提供智能手机和网络应用程序时如何确保本地和远程数据库之间的数据一致性
Posted
技术标签:
【中文标题】提供智能手机和网络应用程序时如何确保本地和远程数据库之间的数据一致性【英文标题】:How to ensure data consistency between local and remote database when providing smartphone and web app 【发布时间】:2021-10-17 09:35:13 【问题描述】:我正在开发一个 Flutter 应用程序,它也应该能够在离线模式下运行。因为我使用的是颤振,所以我还想提供我的应用程序的 Web 版本的使用。我要构建的应用程序依赖于数据,因此要使其脱机工作,我需要某种本地数据库,但是要使 Web 版本正常工作,我还需要将数据存储在远程数据库上,以便可以从网络。这提出的问题是我如何确保本地和远程数据库始终在同一页面上。如果从 Web 更改某些内容,它还需要影响设备上的本地数据库,如果在本地更改某些内容,它也必须影响远程数据库。我只需要一个关于如何总体上实现我想要的东西的提示。
【问题讨论】:
我个人更喜欢在这种情况下使用 Firebase。它支持离线访问和自动同步。但是,我不确定如何从头开始实施它。我也想学这个。 【参考方案1】:这可以使用支持离线的Firebase Firestore
轻松实现。
或者
如果您打算从头开始执行此操作,一种方法是保留一个单独的本地数据库并在其上执行每个事务。如果在线在远程数据库上执行相同的事务。如果离线,请记录本地数据库上的待处理事务(最好在与主数据库不同的数据库中),并在连接远程数据库时执行它们。
您可以将Hive
或sqflite
用于本地数据库
或者
跟踪执行交易的记录。在同步之前,从本地(离线完成)和远程(在网络上完成,电话未连接)合并这些记录。如果在同一记录上执行了多个事务,则将远程和本地 DB 记录更新为执行最新事务的 DB 中的最新记录状态(如果在远程 DB 上执行了最新事务,则更新本地 DB,反之亦然)
【讨论】:
如果用户从 Web 对远程数据库进行一些事务,我如何将它们导入本地数据库。用户的设备在使用 web 版本时是否必须连接到互联网,就像使用 whatsapp web 时一样。也许你也可以从网络存储在远程数据库中进行的事务,然后将它们与本地数据库同步,但是如果用户的设备没有连接到互联网并且他在本地数据库上进行更改并从远程数据库上进行更改怎么办?网络。我认为这会导致问题。 我更新了我的答案并添加了一种新方法。希望能解决冲突问题。以上是关于提供智能手机和网络应用程序时如何确保本地和远程数据库之间的数据一致性的主要内容,如果未能解决你的问题,请参考以下文章