如何使用Google App Engine实现跨设备在线和离线数据同步?

4
我希望创建一个应用程序,类似于Evernote应用程序,可以在多个设备之间同步数据。我已经了解了Firebase和Couchbase,但因为价格和托管问题,我不想使用这两个服务。我想自己创建同步功能。
客户端为Android,使用Google云端点创建API并使用Appengine后端。
需要实现在线和离线同步功能。
例如笔记应用程序(类似于Evernote),一个简单的场景是假设用户已经登录到多个设备并在一个设备上创建了一条笔记,它应该与所有其他设备同步。设备X处于离线状态并且也创建了一个文档,但是它离线时无法同步。当设备X联网时,它必须获取服务器的最新状态并添加其创建的笔记,并将其与多个设备同步。
场景2:
我想象一个同步数据会成为问题的场景。假设应用程序应在未连接到Internet时运行,因此无法与中央服务器通信。所以:
- 用户A与B离线并编辑记录#100。 - 用户C离线并删除记录#100。 - 用户C上线(应该在服务器上删除记录#100)。 - 用户A和B上线,但他们编辑的记录不存在。 - 会出现类似上述情况的各种情况。
还有更复杂的情况,请问是否有人已经做过这样的事情,你们都面临了哪些挑战?
最佳解决方案是什么?如何实施?
简而言之,需要像Firebase同步或Couchbase同步一样的逻辑。

1
你所需要的基本上听起来像是一个消息队列。原子任务,如“添加记录”,“删除记录”,“修改记录”可以在客户端离线时排队,然后发送到所有其他节点(或维护一致数据的中央服务器)。当然,有些离线编辑可能会发生冲突。这取决于你的逻辑来处理这些情况。有许多消息队列的实现,但你也可以在软件中构建自己的小队列。 - konqi
1个回答

3
我知道我们不能只是在这里提供参考作为答案,但你的问题如此广泛,我看不到其他的方法。

有一个Android同步功能,在http://developer.android.com/training/sync-adapters/index.html中描述。

然而,我没有看到Couchbase存在任何相关的定价和托管问题。我自己正在开发一个类似的应用程序,使用免费的社区版,它工作得很好。无论如何,您都需要一些服务器数据库,因此在所有可用的数据库产品中,为什么不使用那个可以免费提供同步功能的呢?

(我与Couchbase制造商无关。)


如果问题太宽泛,你应该将其标记为“过于宽泛”,而不是回答它。 - Tunaki
1
哦,这里的踩票警察真快。毕竟,我给出了一个对OP有用的明智答案。我应该删除它以避免负面声誉评分吗? - TAM

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