javascript - HTML5 应用数据库同步

标签 javascript sql database html sync

我目前正在从事一个涉及将数据存储在 HTML5 SQL-Lite 数据库中的项目。目前,我有如下架构(4 个表):

TransData:
-----------------------------------------------------------
|   TID   | UserName | TransColor | ... |  Date  |  Note  |
-----------------------------------------------------------
|    6    | Brendan  |      Red   | ... |        |        |
-----------------------------------------------------------
|    7    | Brendan  |      Red   | ... |        |     1  |
-----------------------------------------------------------

FullData:
-----------------------------------------------------------
|   TID   | UserName | TransColor | ... |  Date  |  Note  |
-----------------------------------------------------------
|    1    | Brendan  |      Red   | ... |        |  Start |
-----------------------------------------------------------
|    ...  | Brendan  |      Red   | ... |        |        |
-----------------------------------------------------------
|   40    | Brendan  |      Red   | ... |        |  End   |
-----------------------------------------------------------

SalamanderData:
----------------------------------------------------
|   SID   | SalamanderName | Length | ... |  TID   |
----------------------------------------------------
|    1    | Northern-Slimy |   16   | ... |    6   |
----------------------------------------------------
|    2    |   Two-Lined    |   26   | ... |    6   |
----------------------------------------------------  
|    3    |   Two-Lined    |   12   | ... |    7   |
----------------------------------------------------  

SalamanderData:
----------------------------------------------------
|   SID   | SalamanderName | Length | ... |  TID   |
----------------------------------------------------
|    1    | Northern-Slimy |   16   | ... |    6   |       
----------------------------------------------------
|    2    |   Two-Lined    |   26   | ... |    6   |   
---------------------------------------------------- 
|    3    |   Two-Lined    |   12   | ... |    7   |
----------------------------------------------------

注意:TransData中的“注意”列用于指向FullData字段中集合的起始数据点。

我的应用程序和服务器之间的数据库不应该同步。我只是想将所有这些表转储到服务器上的数据库中(转储是指更新对其他表的引用,然后插入到服务器数据库中)。

我打算使用 MAX(TID-Server) + TID-App = new TID-Server,并将更新级联到表中。

你会怎么做?

最佳答案

来自 Dan Pichelman 的评论,问题是客户端将记录插入本地数据库,为此,必须为它们确定主键。但是,考虑到所有不同的客户端都在做同样的事情,新的 PK 在到达服务器时会发生冲突。

对于物理断开连接(至少有时)或不能存在单点故障的系统(例如在共享序列生成器中),这是一个常见问题。

一些常见的解决方案是:

GUID

这里的 PK 是一个 128 位(或更大)的随机数。任何两个 PK 相同的可能性极小。但为了进一步减少冲突的变化,GUID 算法包括使用唯一机器标识符(网络 MAC)和时间进行播种。在同一台机器上生成的两个 GUID 永远不会发生冲突,在具有不同 MAC 的机器上生成的 GUID 也不会发生冲突。大多数机器和语言都有生成 GUID 的 native 函数,但 JavaScript 没有。见:

分区命名方案

在这个方案中,PK 又是一个很大的数字(实际上是位域),并且您将其划分为分层方式。一个很好的例子是国际电话系统(至少在可移植号码之前)。这里电话号码分为:

  • 国家代码:例如美国 - 1
  • 区号:例如 Sunnyvale - 615
  • 订阅号,由交易所控制。

在您的情况下,您可以按以下方式划分数字:

  • 用户登录(例如每个用户唯一的号码)
  • session ID(例如,每个用户每次登录的唯一编号,用于区分同一用户在不同浏览器/计算机上的不同 session )
  • 序列号

将这三者结合起来,您将获得独一无二的 PK。

PK“许可”服务器

前两个建议的优点是它们可以完全断开连接。如果您有一个已连接的客户端,您可以有一个 Web 服务在客户端请求时提供 PK。

为了提高效率,它可能会返回一批,比如 100 个数字。这甚至可能在用户登录时返回。

客户可以全部使用它们并请求更多。可能存在客户端忘记状态并在全局 PK 序列中留下“漏洞”的情况。这几乎肯定不是问题。

一些注意事项

有时您可能喜欢顺序 PK 以用于表格排序。在哪种情况下,您需要按客户或创建时间订购?如果其中一个很重要,您可能会对分区命名方案给予更高的评价。视情况将客户端或时间作为第一个 分区。或者,向表中添加更多列。

如果您不想要分区命名方案的固定结构,GUID 会很好用。

如果您需要集中协调,请使用 PK 许可证服务器。

关于javascript - HTML5 应用数据库同步,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12266770/

相关文章:

javascript - 在测试中总是先遇到“hook”并且无法修复它

javascript - 有没有办法捕获网页上元素的创建和删除?

javascript - Angular 中的全局变量

sql - Oracle如何将UTC时间转换为本地时间(缺少偏移量信息)

mysql - 具有属性的产品的数据模型,每个属性组合具有不同的价格

javascript - Angular Routing ngRoute 无法提取我的其他 HTML 文件

sql - 在 SQL Server 中格式化时间?

sql - 错误 1826 : Duplicate foreign key constraint name

database - AWS : Why does my RDS instance keep starting after I turned it off?

MySQL 与 PostgreSQL?我应该为我的 Django 项目选择哪个?