如何使用推送通知同步SQLite和MySQL数据库?

14

我在安卓上有一个SQLite数据库和一个服务器上的MySQL数据库。我想在用户编辑手机数据或网站上的数据时同步这些数据库。

我知道如何在用户在手机上进行更改时更新服务器上的MySQL数据库,但我不知道如何在用户在网站上进行更改时更新Android数据库。

我已经研究了推送通知,并认为这是一个好的思路,但我有几个问题:

  1. 当用户通过网站更新数据时,它会向该用户的手机发送一条推送通知,说明已经进行了更改。这个推送通知能否触发使用新数据对Android的数据库进行更新?

  2. 如果用户关闭了推送通知,我还能触发其Android数据库进行更新吗?

我还阅读过关于SQLite和MySQL数据库同步的文章,并找到了这篇帖子SQLite和MySQL同步,但没有发现这篇帖子对我的情况有所帮助。

推送通知是一个好去路吗?还是我应该使用其他方法?

简而言之 - 我想让Android设备检测MySQL数据库上的更改,并在用户启动同步之前更新其SQLite数据库的方法。

2个回答

1

基于令牌的分页方法。

假设:或者你需要做出以下决定

  1. 其中一个数据库将是真相之源,如果两个数据库中存在差异,哪个数据是真实的,哪个将被覆盖? - 假设远程数据库是真相之源
  2. 数据更改的频率是多少? - 假设它不是实时关键的
  3. 我们可以处理多少陈旧的数据。 - 假设我们可以接受几分钟的差异

如何确保数据一致性

  • 找到一种方法来关联一个令牌,该令牌可用于识别数据同步至哪个记录。无论您对Web请求有多么有信心,这都非常重要,它们会失败。因此,最好的方法是发送存储的最后一个令牌,Web端点将返回从该令牌到最新值的数据。
  • 如果数据量太大,则发送块>发送所有数据。块的工作方式相同,基于令牌。
  • 这些令牌也可以是简单的PK自动增量列。

如何处理时差和过期数据

如果您的应用程序需要一些数据接近实时,最好根据几个屏幕对数据进行分类,并在用户进入该屏幕时后台发送请求以仅获取相关数据列。这将确保数据与重要列同步。这是经典的推拉方法。也可以在启动画面上完成。

  • 作为一个经验法则,如果您需要紧急处理某事,请拉取。
  • 如果可以等待,请等待推送。

推送通知是可以接受的,只要:

  • 它们应该是静默的。
  • 有关推送通知数量的限制。
  • 有相关成本。
  • 故障检查机制是什么?如果请求失败怎么办?

0

很抱歉我没有使用过推送通知。但是一个解决方案可能是:您可以在启动器onCreate()中创建一个早期方法调用,以异步轮询事件查找服务器,看是否已经通过某种API在MySQL中注册了任何更改,然后以这种方式更新SQLite?由于这是启动时发生的第一件事,从技术上讲,用户并没有启动它。当然,除非您定期重复轮询,否则这不会在应用程序使用期间进行更新?


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接