iPhone应用和Web应用之间的双向同步

4
我有一个依赖于MySQL数据库的Web应用程序,我考虑构建一个iPhone应用程序。该应用程序将允许用户浏览/插入/更新/删除其在Web应用程序上的帐户数据。
最简单的方法是将iPhone应用程序仅构建为Web应用程序的接口,即每个操作都需要连接到Web。但是,我希望iPhone应用程序具有自己的“离线”数据库版本。这不仅允许用户脱机工作,而且还提供更好的体验,因为本地拥有所有内容意味着更快和更响应的应用程序。
我将使用时间戳并保留最新版本来处理冲突(我已经使用软删除,即当用户删除记录时,我只需设置标志),但我还没有完全想清楚如何处理插入。事实上,如果用户在离线(iPhone应用程序)和在线(Web应用程序)数据库中都插入了新项目,则会出现主键冲突(我的所有表都具有INTEGER字段,其中auto-increment为主键)。我该如何解决这个问题?
我考虑使用两个列的主键,一个是自动递增的整数,另一个是特定于“设备”的主键。这样,通过Web应用程序添加的新记录将具有ID 1-web、2-web等,通过iPhone应用程序创建的记录将具有ID 1-iphone、2-iphone等...这将允许合并两个数据库而不会发生冲突。你觉得这个想法怎么样?
1个回答

5

最简单的解决方案是使用UUID。

一种不太优雅的解决方案是让iPhone ID占用定义好的密钥空间子集。例如,对于64位密钥,每个iPhone可以分配一个特定模式的最高20位。


你能详细说明一下UUID吗?这是指使用从记录本身生成的唯一键,而不是基本的自增整数吗?将键空间分割的想法也可能奏效。谢谢! - Wookai
UUID只是一个可以从任何来源生成的半随机128位数字。用于生成UUID的算法旨在避免冲突,即使多个源同时独立地生成它们也是如此。在MySQL上,可以使用UUID()函数来实现此目的,但您还可以使用CFUUIDCreate函数在iPhone上独立生成它们。 - Marcelo Cantos

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接