iPhone应用程序和web应用程序之间的双向同步

iPhone应用程序和web应用程序之间的双向同步,iphone,database,data-synchronization,Iphone,Database,Data Synchronization,我有一个依赖MySQL数据库的web应用程序,我正在考虑为它构建一个iPhone应用程序。此应用程序允许用户在web应用程序上浏览/插入/更新/删除其帐户上的数据 最简单的方法是将iPhone应用程序简单地构建为web应用程序的接口,即每个操作都需要连接到web。但是,我希望iPhone应用程序有自己的数据库“离线”版本。这不仅可以让用户离线工作,还可以提供更好的体验,因为所有东西都在本地意味着一个更快、响应更快的应用程序 我会通过使用时间戳并保留最新版本来处理冲突(我已经使用了软删除,即当用户

我有一个依赖MySQL数据库的web应用程序,我正在考虑为它构建一个iPhone应用程序。此应用程序允许用户在web应用程序上浏览/插入/更新/删除其帐户上的数据

最简单的方法是将iPhone应用程序简单地构建为web应用程序的接口,即每个操作都需要连接到web。但是,我希望iPhone应用程序有自己的数据库“离线”版本。这不仅可以让用户离线工作,还可以提供更好的体验,因为所有东西都在本地意味着一个更快、响应更快的应用程序

我会通过使用时间戳并保留最新版本来处理冲突(我已经使用了软删除,即当用户删除记录时,我只需设置一个标志),但我还没有完全弄清楚如何处理插入。事实上,如果用户在脱机(iPhone应用程序)和联机(web应用程序)数据库中插入新项目,则会出现主键冲突(所有我的表都有一个以自动递增为主键的整数字段)。我如何处理这个问题


我在考虑使用两列主键,一个是自动递增的整数,第二个是特定于“设备”的。这样,通过web应用程序添加的新记录将具有ID 1-web、2-web等,而通过iPhone应用程序1-iPhone、2-iPhone等创建的记录。。。这将允许合并两个数据库而不会发生冲突。您认为这个想法如何?

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


一个不那么优雅的解决方案是让iphoneid占据密钥空间的定义子集。例如,使用64位密钥,可以为每个iPhone分配最高20位的特定模式。

您能详细说明UUID吗?这意味着使用从记录本身生成的唯一键,而不是基本的自动递增整数?分割密钥空间的想法也可能奏效。谢谢UUID只是一个可以从任何源生成的半随机128位数字。用于生成UUID的算法旨在避免冲突,即使多个源同时独立地生成UUID。在MySQL上,UUID()函数可以用于此目的,但您也可以在iPhone上使用此函数独立生成它们。太好了,非常感谢您的帮助,这正是我要找的!