Android 将部分数据库模型从服务器同步到客户端

Android 将部分数据库模型从服务器同步到客户端,android,database,client-server,offline-caching,Android,Database,Client Server,Offline Caching,这更多的是一个概念性问题,不一定与任何特定的技术有关。 假设您在服务器上有一些数据库,有一些REST/JSON API来访问该数据库中的内容,还有一些移动客户端显示通过API检索到的数据 最好在客户机上有一些缓存机制,并且只要客户机只是在读取数据,就可以启用对数据的脱机访问(在我的情况下,拒绝对脱机客户机的写访问是可以的,这样可以避免管理所有可能发生的严重冲突) 解决这个问题的一个好方法似乎是在客户机上提供服务器数据库模型的子集,并将数据从服务器同步到客户机。 访问本地数据库可能会立即返回结果,

这更多的是一个概念性问题,不一定与任何特定的技术有关。 假设您在服务器上有一些数据库,有一些REST/JSON API来访问该数据库中的内容,还有一些移动客户端显示通过API检索到的数据

最好在客户机上有一些缓存机制,并且只要客户机只是在读取数据,就可以启用对数据的脱机访问(在我的情况下,拒绝对脱机客户机的写访问是可以的,这样可以避免管理所有可能发生的严重冲突)

解决这个问题的一个好方法似乎是在客户机上提供服务器数据库模型的子集,并将数据从服务器同步到客户机。 访问本地数据库可能会立即返回结果,但也会触发对服务器的更新请求。如果服务器返回修改后的数据,客户机模型将同步其本地数据库,并通知显示数据更改

最终的目标当然是,用户可以浏览信息,而不管其互联网连接的稳定性如何,并且只要不修改任何数据,就不会被连接对话框或类似对话框所困扰

现在从实现的角度来看。。。一方面,将服务器数据库直接耦合到客户机数据库似乎是个坏主意,因为它们可能来自不同的供应商。我想至少在这两种数据库实现之上需要一个独立于供应商的模型。另一方面,将服务器数据库中的数据转换为某种传输格式,然后再将其放回客户机数据库,这似乎需要很大的开销


如何以优雅且可维护的方式解决这个问题,有什么建议吗?

我正在从事一个有类似要求的项目。我们希望在某个地方的服务器上有一个大的、可用的数据库,然后是从中获取数据的移动设备。如果设备脱机,这是正常的,因为它们在本地保存了自己的数据副本

我们决定使用BigCoach(支持集群的ApacheCouchDB的分支)作为服务器技术,然后在移动设备上使用Couchbase Mobile。(值得注意的是,Android TouchDB将取代Couchbase Mobile,但目前还不稳定。)

我们使用coach*技术的原因是coach具有良好的HTTP复制能力。您可以通过编程方式在移动设备上启动同步事件,它将为您复制所有插入、更新和删除。它将自己的嵌入式CouchDb上的信息存储在移动设备上,因此可以脱机读取


如果您不想走沙发路,您可以简单地使用类似SQLlite的东西来存储REST/API调用的结果。然后,您必须编写自己的复制逻辑,以便在移动设备脱机后再返回时使用。有很多创新的方法可以做到这一点,所以这可能是一个选择。

我正在开发一个应用程序,可以将大型数据库的一小部分本地同步到手机上。有一个初始预加载,必须发生在手机上,但之后的更新发生在后台异步

首先,强烈建议使用JSON或XML分离服务器和手机。锁定一种技术总是会导致问题,因为无论平台如何,您都必须使用相同的技术。也就是说,如果您计划扩展到其他平台(Web、iOS等),则必须使用服务器指定的格式。从长远来看,选择一种通用格式将使其更简单。事实上,大量公共图书馆阅读/编写JSON是一件小事

我们使用两种方法来同步数据

1。AlarmManager

我们计划AlarmManager触发一个服务,以便按常规计划(假设每6小时)唤醒一次。唤醒启动一个后台服务,该服务联系服务器,下载JSON中的更改并更新本地SQLite数据库。如果没有连接,则跳过更新并安排下次唤醒。我们添加了一个ConnectivityChanged接收器,以便在连接恢复时自动重新启动同步

2。GCM

如果您仅在发生更改时更新本地数据库,那么这将需要更多的工作,但会节省大量电池和数据使用。Google Cloud Messaging可以向设备发送唤醒消息,并告诉它启动同步服务。同步服务的运行方式与上述AlarmManager方法相同

根据您需要数据的“新鲜程度”以及数据更改的频率,我们将上述两种方法结合使用。RSS提要之类的东西应该每30分钟更新一次,而气象数据不需要每4小时更新一次

所以要运行我们使用的数据库同步

接收器->侦听系统事件和触发服务 服务->连接到服务器,下载JSON并更新SQLite提供程序 提供者->将记录插入数据库,并向ContentObserver广播内容更改 ContentObservers->当应用程序运行时,ContentObservers使用新数据更新UI


上面的每个组件都有很多技术细节,但这应该为您提供一个非常健壮的体系结构,用于将服务器数据与本地数据库同步

Couchbase Mobile指的是github上的Android Couchbase,TouchDB指的是github上的TouchDB Android?我只是想知道,因为他们两个都已经有一段时间没有工作了,这让我想知道他们中的任何一个在某个时候是否适合生产环境。是的。这两个都是我的意思。你是对的,这两个项目都相当死气沉沉。事实上,Couchbase Mobile已经正式消亡。TouchDB是iOS版本的一个端口(它非常稳定,工作了很多),但它还不完整。对于Android,我们将使用Couchbase Mobile