我有一个旧的Java EE Web应用程序,它使用数据库存储用户从应用程序输入的数据。我现在正在设计一个iPhone应用程序,允许用户在iPhone上输入相同的信息,并通过Restful Web服务将数据提交到现有数据库。
在iPhone上我想让用户能够输入数据,即使他们没有连接到网络,并且在网络连接可用后自动同步到服务器。为实现这一目标,我计划使用CoreData在手机上本地存储记录。
我正在努力的用例就是这个;如果用户在离线模式下输入数据然后上线(网络应用程序)并在手机上传离线数据之前输入数据,我该如何防止手机盲目覆盖网络上输入的数据。我希望能够向用户显示一个错误,说明他们需要在他们推送离线更改之前进行在线编辑。
我确定这是一个可能很常见的用例。有谁知道处理这个问题的任何设计模式?
感谢。
答案 0 :(得分:1)
您可以让您的网络服务提供iOS应用跟踪的“版本”。例如,行数的md5sum或在线数据库中的最后一行。它基本上是一个版本控制系统,因此您的移动应用程序可以检查并查看其数据版本是否与Web服务匹配。您的移动应用程序连接到Internet,检查Web应用程序中的数据版本并将其与上一个已知版本进行比较。然后合并成为一个问题,但这似乎超出了你的问题的范围。
答案 1 :(得分:0)
看来,您有多个具有读/写访问权限的用户/设备和分布式数据库,其中特定设备具有受限的内存和CPU功率,在不同的操作系统上运行,并且在不确定的时间内也处于脱机状态。
这可能是你可以得到的最糟糕的情况;)
除非您通过严格限制用例来降低复杂性,否则同步数据库和保持数据逻辑正确的要求是一项非常复杂的挑战。
有关详细信息,您可以查看CouchDB,TouchDB,RIAK,RIAK for mobile,simperium,apigee, cloudant (for mobile) - 可能提供解决方案。
请注意,并非所有解决方案实际上都在设备上提供(分布式)数据库。 TouchDB会,而RIAK至少会谈到它。