gpt4 book ai didi

database - 将一个或多个数据库与主数据库同步 - 外键

转载 作者:太空狗 更新时间:2023-10-30 01:56:51 25 4
gpt4 key购买 nike

我正在使用 Google Gears 来离线使用应用程序(我知道 Gears 已被弃用)。我面临的问题是与服务器上的数据库同步。

具体问题是主键或更准确地说是外键。将信息发送到服务器时,我可以轻松地忽略主键,并生成新的主键。但是我怎么知道这些关系是什么。

我想到了一个解决方案,打赌我需要为每个客户保存所有的 pk。将多个客户端与一个服务器数据库同步的最佳方法是什么。

编辑:
我一直在想,我猜seqential primary keys不是最好的解决方案,但是还有什么其他的可能性呢?由于可能发生碰撞,基于时间的方法似乎不正确。

想到 GUID,这是一个选项吗?看起来在 javascript 中生成 GUID 并不是那么容易。

我可以用自然键或复合键做一些事情。正如我所考虑的那样,这看起来是最好的解决方案。会有什么问题吗?

最佳答案

这不是一个完整的答案,但至少可以为您提供一些想法...

您提出的问题(以及您试图解决的问题)并非特定于 Google Gears,并且对于其他解决方案仍然有效,例如 HTML 5 或基于系统或 Flash/空气。


在几个月前的最后一次 ZendCon 期间有关于该主题的演示文稿——幻灯片可在 slideshare 上找到: Planning for Synchronization with Browser-Local Databases


浏览这些幻灯片时,您会看到关于可能想到的几种可能性的注释(有些确实想到了,或者出现在其他答案中):

  • 使用 GUID
  • 复合键
  • 主键池(即预先保留一定范围的键)

当然,对于其中的每一个,都有优点......和缺点 - 我不会复制粘贴它们:看看幻灯片;-)


现在,在您的情况下,哪种解决方案最好?实际上,这很难说——而且您越早考虑同步,它可能就越好/越容易:当应用程序仍处于设计阶段时,向应用程序中添加东西要简单得多 ^^


首先,确定是否:

  • 您的应用程序通常处于连接状态,很少发生断开连接的情况
  • 或者如果您的应用程序经常断开连接,并且偶尔只连接一次。

那么,你要同步什么?

  • 数据?
    • 比如“这是该用户发出的所有命令的列表
    • 当然,在每个断开连接的设备上复制该数据——每个设备都可以修改它
    • 在这种情况下,如果一个用户删除一行,而另一个用户添加一行,如何知道哪个用户拥有“真实”数据?
  • 或对这些数据采取的行动?
    • 比如“我正在该用户发出的命令列表中添加一个条目
    • 在这种情况下,如果一个用户删除了一行,而另一个用户添加了一行,同步就很容易了,因为您只需将这两个操作同步到您的中央数据库
    • 但这并不容易实现,尤其是对于大型应用程序/系统:每次执行操作时,您都必须记录它!


还有一个我们通常不会想到的特定问题 - 直到它发生:特别是如果您的同步过程可能需要一些时间(如果您有大量数据,如果您不经常同步,. ..)如果同步还没有完成就停止了怎么办?

例如,如果:

  • 火车上的用户可以使用一些 3G 卡访问网络
  • 同步开始
  • 有一条隧道——但连接中断了。

在大多数情况下,拥有半同步数据可能不是那么好......

因此,您也必须找到该问题的解决方案:在大多数情况下,同步必须是原子的!

关于database - 将一个或多个数据库与主数据库同步 - 外键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2372138/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com