首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将一个或多个数据库与主数据库同步-外键

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

Stack Overflow用户
提问于 2010-03-03 14:41:27
回答 4查看 869关注 0票数 4

我使用Google可以脱机使用应用程序(我知道Gears是不推荐的)。我面临的问题是与服务器上的数据库同步。

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

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

编辑:

我一直在考虑这个问题,我想,几个主键并不是最好的解决方案,但是还有什么其他的可能性呢?以时间为基础似乎不对,因为碰撞可能会发生。

我想到了一个吉德,这是个选择吗?在javascript中生成GUID似乎并不那么容易。

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

EN

回答 4

Stack Overflow用户

发布于 2010-03-12 22:45:40

这不是一个完整的答案,但至少可以给你一些想法.

您所问的问题(以及您试图解决的问题)并不是专门针对Google的,它仍然适用于其他解决方案,如HTML 5或基于系统或Flash/Air。

在几个月前的上一次ZendCon中,有一个关于这个主题的介绍--幻灯片可以在slideshare:与浏览器同步的规划-本地数据库上获得

通过这些幻灯片,你会看到一些关于可能出现在你脑海中的可能性的笔记(有些确实出现在你的脑海中,或者在另一些答案中):

  • 使用GUID
  • 复合键
  • 主密钥池(即预先保留一系列密钥)

当然,每个人都有优势.缺点--我不会复制--粘贴它们:看看幻灯片;-)

现在,在你的情况下,哪一种解决方案将是最好的?很难说,实际上--你越早想到同步,它就越好/更容易:当应用程序仍处于设计阶段^^时,向应用程序中添加内容要简单得多。

首先,确定是否:

  • 您的应用程序通常是连接的,与dis连接的情况很少发生。
  • 或者您的应用程序通常是dis连接的,并且只偶尔连接一次。

那你们要同步什么?

  • 数据?
    • 就像“这是该用户所做的所有命令的列表”
    • 在每个dis连接的设备上复制数据,当然,每个dis连接设备都可以修改它。
    • 在这种情况下,如果一个用户删除了一行,而另一个用户添加了一行,那么如何知道哪个用户拥有"true“数据?

  • 或对这些数据所做的操作?
    • 比如“我在用户所做的命令列表中添加了一个条目”
    • 在本例中,如果一个用户删除一行,而另一个用户添加一行,则很容易同步,因为只需将这两个操作同步到您的中央DB
    • 但这并不容易实现,特别是对于大型应用程序/系统:每次执行操作时,都必须对其进行记录!

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

例如,如果:

  • 列车上的用户可以通过3G卡进入网络。
  • 同步开始
  • 有一条隧道--而且连接也失去了。

在大多数情况下,拥有半同步的数据可能不太好.

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

票数 3
EN

Stack Overflow用户

发布于 2010-03-06 13:39:32

我想出了以下解决方案:

每个客户端都从服务器获得一个唯一的id。在引用主键的任何地方,我都使用带有客户端id的复合键和自动增量字段。

这样,这种组合是独一无二的,而且很容易实现。唯一剩下的就是确保每个客户都有一个独特的身份证明。

我刚刚发现了一个缺点: SQLite不支持复合主键上的自动增量,所以我必须自己处理id。

票数 0
EN

Stack Overflow用户

发布于 2010-03-13 04:06:39

我会使用类似的设置,你的最新答案。但是,为了避免自动增量问题,我将在主数据库中使用一个自动增量代理键,然后存储客户端主键和客户端id。这样,您就不会丢失或更改流程中的任何数据,您还将跟踪数据最初来自哪个客户端。

确保还在客户端Pk上设置了唯一的索引,即客户端Id,以启用来自任何子表的引用完整性。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2372138

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档