2010-06-23 95 views
4

我有一个依赖于MySQL数据库的Web应用程序,我正在考虑构建一个iPhone应用程序。这个应用程序将允许用户在Web应用程序上浏览/插入/更新/删除其帐户上的数据。iPhone应用程序和Web应用程序之间的双向同步

最简单的方法是将iPhone应用程序简单地构建为Web应用程序的界面,即每个操作都需要连接到Web。但是,我希望iPhone应用程序拥有自己的“离线”版本的数据库。这不仅可以让用户脱机工作,而且还可以提供更好的体验,因为拥有本地所有内容意味着更快,响应速度更快的应用程序。

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

我正在考虑有一个two-colums主键,一个是自动递增的整数,第二个是专用于“设备”。这样,通过网络应用程序添加的新记录将具有ID 1-web,2-web等,以及通过iPhone应用程序1-iphone,2-iphone等创建的记录......这将允许将两个数据库没有冲突。你对这个想法有什么看法?

回答

5

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

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

+0

能否详细说明UUID?这意味着使用从记录本身生成的唯一键而不是基本的自动递增整数? 分裂关键空间的想法也可能奏效。谢谢 ! – Wookai 2010-06-24 02:49:56

+0

UUID只是一个可以从任何源生成的半随机128位数字。用于生成UUID的算法旨在避免冲突,即使多个数据源同时生成并且相互独立。在MySQL上,UUID()函数可用于此目的,但您也可以在iPhone上独立使用[CFUUIDCreate](http://developer.apple.com/iphone/library/documentation/CoreFoundation/Reference /CFUUIDRef/Reference/reference.html#//apple_ref/c/func/CFUUIDCreate)函数。 – 2010-06-24 09:58:21

+0

太好了,非常感谢您的帮助,这正是我一直在寻找的! – Wookai 2010-06-25 21:38:55

相关问题