Bre*_*dan 7 javascript sql database html5 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 |
----------------------------------------------------
Run Code Online (Sandbox Code Playgroud)
注意:TransData中的"注释"列用于指向FullData字段中集合的起始数据点.
我的应用程序和服务器之间的数据库不应该是同步的.我只是试图将所有这些表转储到服务器上的数据库中(通过转储我的意思是,更新对其他表的引用,然后插入到服务器数据库中).
我打算使用MAX(TID-Server) + TID-App = new TID-Server,并将更新级联到表中.
你会怎么做呢?
根据Dan Pichelman的评论,问题是客户端将记录插入到本地数据库中,为此,必须确定它们的主键.但是,鉴于所有不同的客户端都在做同样的事情,新PK将在它们到达服务器时发生冲突.
这是一个常见问题,即物理断开(至少有时)或不存在单点故障的系统,例如在共享序列发生器中.
一些常见的解决方案是
这里PK是128位(或更大)的随机数.任何两个PK相同的可能性非常小.但是为了进一步减少碰撞的变化,GUID算法包括使用唯一的机器标识符(网络MAC)和时间进行播种.在同一台机器上生成的两个GUID永远不会发生冲突,并且在具有不同MAC的机器上也不会生成GUID.大多数机器和语言都具有生成GUID的本机函数,但JavaScript没有.看到:
分区命名方案
在这个方案中,PK又是一个很大的数字(真正的位域),你将它划分为分层方式.一个很好的例子是国际电话系统(至少在便携式号码之前).这里的电话号码分为:
在您的情况下,您可以将数字分区:
结合这三个你将有一个保证独特的PK.
PK'许可'服务器
前两个建议的优点是它们完全断开连接.如果您有连接的客户端,则可以在客户端请求时提供提供PK的Web服务.
为了提高效率,它可能会返回一批100个数字.甚至可以在用户登录时返回.
客户可以使用它们并请求更多.可能存在客户端忘记状态并在全局PK序列中留下"漏洞"的情况.这几乎肯定不是一个问题.
一些考虑
有时你可能会喜欢顺序PK用于表排序.在这种情况下,您需要按客户或创建时间订购吗?如果其中一个很重要,您可以将分区命名方案评级更高.根据需要将客户端或时间作为第一个分区.或者,在表中添加更多列.
如果您不想要分区命名方案的固定结构,GUID将运行良好.
如果您想要集中协调,请使用PK许可证服务器.
| 归档时间: |
|
| 查看次数: |
575 次 |
| 最近记录: |