Android应用程序数据库与远程数据库同步

问题描述:

我正在同步到Web应用程序的Android应用程序的规划阶段。网络端将用Python编写,可能是Django或金字塔,而Android应用将是简单的java。我的目标是在没有数据连接的情况下让Android应用程序工作,不包括应用程序的社交/网络方面。Android应用程序数据库与远程数据库同步

这将是一个普通的应用程序,所以我想坚持一些可以通过在市场上轻松点击安装的东西,而不需要像CloudDB for Android一样单独下载。

我还没有找到任何支持此功能的数据库,所以我会自己写。在编写同步逻辑时需要注意的一点是,多个用户可以写入的用户之间会有一些共享数据。这是一个独立的项目,所以我想我会通过这个来看看我是否完全脱离基地。

  • 该应用程序将处理本地保存到本地sqlite数据库,然后将消息发送到服务,该服务将尝试将这些更改同步到远程数据库。
  • 同步服务将在检查本地应用程序的消息(即其他用户对共享数据的更改)和将本地更改写入远程服务器之间交替进行。
  • 所有数据将有一个跟踪更改的时间戳
  • 从应用程序写入服务器时,如果服务器有更新的信息,用户将被警告冲突并提示覆盖服务器有或放弃本地更改。如果自应用程序上次读取数据后服务器尚未更新,请处理更新。
  • 当数据从服务器传送到应用程序时,如果服务器有较新的数据覆盖本地数据,否则将丢弃它,因为它将在下一次由应用程序更新服务器时处理。

这里的一些问题:

1)这听起来有点小题大做?有没有更简单的方法来处理这个问题?

2)该处理在哪里进行?在客户端还是服务器上?我认为客户端的优势在于服务器上的处理较少,但是如果它在服务器上,这使得更容易实现其他客户端。

3)我应该如何处理来自服务器的更新?增量投票或彗星/ websocket?有一点要记住,我宁愿在Webfaction上进行最小安装,因为这是初创公司。

一旦解决了这些问题,我打算为极客社区提供解决方案。

1)看起来像这是很好的方式来管理您的本地&远程更改+支持离线工作。我不认为这是多余的

2)我认为,你应该用本地时间戳本地缓存用户的变化,直到同步完成。然后,服务器应该管理所有处理:跟踪当前版本,提交和回滚更新尝试。客户端处理较少=对您更好! (更容易支持和实现)

3)如果我想支持离线模式,我会选择轮询,因为在离线状态下,您不能保持套接字打开,并且每次连接Internet时都必须重新打开它被恢复。

PS:看起来像这是VEEERYY OLD的问题... LOL