gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 19:05:45 25 4
gpt4 key购买 nike

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

最好在客户端有一些缓存机制,并且只要客户端只读就可以启用离线访问数据(在我的例子中,拒绝离线客户端的写访问可以避免必须处理所有可能发生的讨厌的冲突)。

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

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

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

对于如何以优雅且可维护的方式解决该问题有何建议?

最佳答案

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

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

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

<强>1。报警管理器

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

<强>2。 GCM

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

我们结合使用上述两种方法,具体取决于您需要的数据有多“新鲜”以及数据更改的频率。像 RSS 提要这样的东西应该每 30 分钟更新一次,而天气数据可能不需要超过每 4 小时更新一次。

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

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

上面的每个组件都有很多技术细节,但它们应该为您提供一个非常强大的架构,用于将服务器数据与本地数据库同步。

关于android - 将部分数据库模型从服务器同步到客户端,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14396157/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com