2

我想构建一个利用服务器数据的应用程序,它需要将应用程序中的数据与其他客户端应用程序输入的数据同步。所以,有几个问题:

  • 如何高效地设计数据库模式?它应该在服务器上复制相同的数据库模式还是应该添加更多的字段和实体?
  • 同步数据的策略是什么,在每个应用程序启动时或在应用程序的某些空闲状态期间,或其他什么...
  • 如何处理用户在应用程序中输入的数据与另一个客户端应用程序输入的数据的冲突。

欢迎任何回应。

4

1 回答 1

5

好吧,您已经确定了原始问题中的主要挑战。真正的答案是,这与 iPhone 没什么关系——数据库复制真的很难

以下是我可以提供的一些经验法则:

  • 如果你能侥幸成功的话,单向数据复制比双向复制要容易一百万倍

  • 如果客户端和服务器上的数据库模式相同,复制总是更容易。

  • 要进行双向复制,您要么需要在每一端存储每一行​​的时间戳,要么将一端的完整内容存储在另一端。(即服务器需要知道客户端的最近状态,或者客户端需要知道服务器的最近状态)。

  • 要允许从断开连接的客户端添加行,您需要使用 GUID(或哈希,例如 SHA-1)而不是自动增量字段来标识您的行。可以将新添加的客户端行保持为“无标识符”,直到您将它们与服务器同步,但这种方式很疯狂。

  • 没有真正的好方法来解决冲突。 不完善的选项包括 last-writer-wins(最后一个同步修改记录的人会插入他们的记录副本)、三向合并(当有人发送修改过的记录时,检查他们更改了哪些列,并且只更改那些列,因此不会覆盖对其他列的任何更改),拆分为两条记录(如果两个人对同一条记录进行更改,只需创建两条记录并假设有人最终会修复它)和“询问用户”(这在技术上是最合理的,但需要大量的 UI 工作,用户甚至很少理解冲突什么)。

于 2010-03-31T18:14:34.587 回答