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

4 投票
1 回答
1673 浏览
提问于 2025-04-16 15:05

我正在计划一个安卓应用,它会和一个网页应用同步。网页那边会用Python写,可能会用Django或者Pyramid,而安卓应用则会用简单的Java来开发。我的目标是让这个安卓应用在没有数据连接的情况下也能正常工作,除了社交和网页相关的功能。

这个应用是个普通的应用,所以我希望它能在市场上通过一键安装,不需要像CloudDB那样单独下载。

我还没找到支持这种功能的数据库,所以我打算自己写一个。写同步逻辑的时候有个问题,就是会有一些共享数据,多个用户都能写入。这是一个个人项目,所以我想把这些想法分享出来,看看我是否想错了方向。

  • 这个应用会把本地保存的数据处理到本地的sqlite数据库,然后发送消息给一个服务,试图把这些变化同步到远程数据库。
  • 同步服务会交替检查本地应用的消息,比如其他用户对共享数据的修改,以及把本地的变化写入远程服务器。
  • 所有数据都会有时间戳,用来追踪变化。
  • 当应用要把数据写入服务器时,如果服务器有更新的信息,用户会被警告有冲突,并提示是覆盖服务器的数据还是放弃本地的修改。如果服务器自上次应用读取数据后没有更新,就处理这个更新。
  • 当数据从服务器传到应用时,如果服务器有更新的数据,就覆盖本地数据,否则就丢弃,因为应用会在下一次更新服务器时处理这个。

我有几个问题:

1) 这样做是不是太复杂了?有没有更简单的方法来处理这个?

2) 这些处理应该在哪里进行?在客户端还是服务器上?我觉得在客户端处理可以减轻服务器的负担,但如果在服务器上处理,其他客户端的实现会更简单。

3) 我应该如何处理来自服务器的更新?是增量轮询还是用comet/websocket?需要考虑的是,我希望一开始在Webfaction上尽量少安装东西,因为这是一个初创项目。

一旦这些问题解决了,我计划把这个解决方案分享给技术社区。

1 个回答

1

1) 看起来这个方法挺不错的,可以帮助你管理本地和远程的更改,还能支持离线工作。我觉得这样做并不过分。

2) 我认为,你应该把用户的更改先保存在本地,并加上时间戳,直到同步完成。然后服务器来处理所有的事情:跟踪当前版本,提交和回滚更新的尝试。客户端处理的事情越少,对你来说就越好!这样更容易支持和实现。

3) 如果我想支持离线模式,我会选择轮询,因为在离线状态下你无法保持连接,每次网络恢复时都得重新连接。

PS: 看起来这个问题真的是太老了... 哈哈

撰写回答