构建通过Web API与服务器同步数据的iPhone应用程序面临的主要挑战是什么?

Hoa*_*ham 2 iphone synchronization database-design application-design

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

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

欢迎任何回应.

ape*_*arr 5

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

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

  • 如果你可以侥幸逃脱,那么单向复制数据比双向复制容易一百万倍.

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

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

  • 要允许从断开连接的客户端添加行,您需要使用GUID(或散列,例如SHA-1)来标识行,而不是自动增量字段.在将新客户端添加的行与服务器同步之前,可以将新的客户端添加的行保留为"无标识符",但这种方式很疯狂.

  • 做解决冲突没有实际的好办法. 不完美的选项包括last-writer-wins(同步修改后的记录的最后一个人获得插入记录的副本),三向合并(当有人发送修改后的记录时,检查他们已更改的列,并仅更改那些列,因此不会覆盖对其他列的任何更改),拆分为两个记录(如果两个人对同一记录进行更改,只做两个记录并假设某人最终会修复它),并"询问用户"(这在技术上是最合理的,但需要大量的UI工作,用户很少理解甚至什么冲突).