安卓上的SQLite和具备同步功能的MongoDB

4

Android上是否可以使用SQLite,而在服务器上使用NoSQL数据库(如MongoDB),并实现两者之间的双向数据复制/同步?还是最好在两端都使用SQL或NoSQL,而不混用?


2
在不同的数据库之间(例如SQLite和MongoDB)进行双向数据复制/同步可能是您需要自己开发的解决方案。您实际上需要同步数据的用例是什么?如果在Android和服务器上同时更改了相同的数据,则完全的双向复制将需要某种形式的冲突解决。也许您正在考虑一种缓存策略,用户可以在离线时在其Android设备上进行更改/查询,然后在重新联机时与服务器同步数据? - Stennie
是的,最初它将是在单个设备和服务器之间的缓存策略,其中数据只能在设备上修改,而不能在服务器上修改。因此,实质上,服务器将成为备份。最终,我希望同步多个设备,这些设备都可以访问和修改共享数据。那时冲突解决可能会变得至关重要。考虑到Martin Fowler的事件溯源模式。由于从未尝试过这种事情,我担心SQL-> NoSQL不匹配可能会引起潜在问题。 - Julian A.
2个回答

3

有几种不同的方法可以考虑:

1) 使用一个实现多主或 MVCC(多版本并发控制)且在 Android 和您的服务器上运行的数据库产品。 在MVCC wikipedia page上有一些示例,其中CouchDB是一种常见的解决方案。 有一TouchDB-Android端口,其针对 Android 进行了优化,并支持复制到 CouchDB。

2) 您的要求可能足够简单(或独特),以需要自己开发解决方案。 一个常见的解决方案是在 Android 上使用 SQLite 并通过(可能是 RESTful 的)API 将信息同步到远程服务器。

在移动设备和服务器上使用相似的架构和查询语言并非必须,但这样做可能会使您更加理智。


值得一提的是,还可以看看PouchDB,这是一个实现了CouchDB API的JavaScript库。PouchDB被设计用于在离线访问时保存更改,并在联网后将其与CouchDB服务器同步。目前(2013年5月),它仍处于“Alpha预览”版本,但总体方法非常有前途。 - Stennie

2
您可能想要查看SymmetricDS,我自己没有使用过,但正在考虑。目前它允许Android上的SQLite数据库同步到mongoDB后端,但目前不能反向同步。显然,您可以在中间同步数据库中创建必要的同步数据,使其返回到您的SQLite数据库。还有一个iOS版本正在进行中。它具有GPL许可证,因此如果您商业使用它,您需要支付费用(除非您的应用程序是开源的)。

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