我目前正在开发具有完全相同的要求和问题的移动/桌面/分布式应用程序。
首先,这些要求本身并不是移动应用程序固有的,而是任何断开/分布式的客户端-服务器事务(并行编程,多线程,您就可以了)。因此,它们当然是移动应用程序中要解决的典型问题。
通常,所有这些归结为您拥有一个潜在的数据记录,该记录已分发给n个客户端,这些客户端可以同时对其进行编辑。您需要的是
- 适当的版本控制/锁定机制,
- 适当的权限/访问管理,
- 适当的同步/缓存策略
对于(1),您可以应用一些模式:有两种常用的锁定策略:乐观离线锁定和 悲观离线锁定。其中一些应用在不同的版本控制“模式”中,例如MultiVersion并发控制(MVCC),它对每个数据记录使用一个计数器(很简单的“时间戳”),每当更改记录时都会更新一个计数器。
(2)和(3)本身是非常广泛的问题,需要独立于(1)进行处理。根据我的经验提供的一些建议:
使用客户端服务器技术为您抽象出大多数问题。我强烈推荐一些Web技术,例如CouchDb,它可以通过(乐观)离线锁定+ MVCC处理(1),通过Web API处理(2),以及通过Http缓存很好地处理(3)。
如果可以依靠成熟的技术和方法,请不要自己发明东西。我相信,花任何时间研究和比较现有技术/模式都比尝试实施自己的系统要好得多。
如果可能,尝试使用同类技术。“同质”是指基于相同原理构建的技术,例如Web 2.0使用方案。一个示例:与将SQL用于移动应用程序相比,将适当的CouchDb和REST Client(Web API)与本地缓存策略一起使用是更好的选择。
我强烈建议不要使用MySQL,因为它不是针对此类使用场景的显式技术。它可以工作,但是使用已经包含Web通信和并发样式的数据库系统(例如许多NoSQL数据库),您的处境会好得多。
顺便说一句,我已经与一个针对CouchDb API的自定义本地客户端一起工作,选择了CouchDb,它可以很好地工作和扩展。我从使用MSQL +(N)Hibernate切换到最初因为没有做出正确的选择(意味着没有做足够的研究)而付出了高昂的代价。