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

时间:2011-04-04 21:42:10

标签: python android

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

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

我没有找到任何支持此功能的数据库,因此我将自己编写。编写同步逻辑的一个警告是,用户之间将存在一些共享数据,多个用户将能够写入。这是一个独奏项目,所以我想我会在这里看看我是否完全偏离基础。

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

以下是一些问题:

1)这听起来有点矫枉过正吗?有没有更简单的方法来处理这个?

2)这种处理应该在哪里进行?在客户端或服务器上?我认为客户端的优势在于服务器上的处理较少,但如果它在服务器上,则可以更容易地实现其他客户端。

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

一旦解决了这些问题,我就会计划为极客社区提供解决方案。

1 个答案:

答案 0 :(得分:1)

1)看起来这是管理本地和娱乐的好方法。远程更改+支持离线工作。我不认为这有点矫枉过正

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

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

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