dart 如何将Flutter应用的离线数据与在线数据库高效同步

sbdsn5lh  于 2023-07-31  发布在  Flutter
关注(0)|答案(4)|浏览(170)

假设我有一个todo应用程序,它将数据存储在sqflite数据库中(本地在手机上),当应用程序上线时,我希望数据与我的在线数据库同步,比如mongodb或firestore。我不想每次都做完全覆盖或创建新表,我正在寻找一些有效的解决方案,只更新数据库的更改。

wsewodh2

wsewodh21#

Firebase Cloud Firestore为您提供所有这些。如果你不能使用这个,其他解决方案是更复杂的,因为同步信息可能是非常棘手的。
假设用户有两台设备,都保存相同的数据,服务器应该保存哪个版本,最新创建的数据,还是服务器首先接收的数据?
SQLite对于结构化数据是很好的,但是你可以使用系统偏好设置将数据保存为JSON字符串,然后将JSON推送到服务器,如果可以这样做的话会简单得多。
同样,这真的不是一个简单的答案给予并且因项目而异。

wmtdaxz3

wmtdaxz32#

我认为这将有助于构建离线和在线同步:
flutter_offline
http
sqlite

juzqafwq

juzqafwq3#

正如已经指出的,这是一个架构问题,可能没有简单的答案。这里有两个主要的想法:

**场景A:**您只是在更新交易数据,顺序并不重要,例如移动的考勤应用用户的位置沿着日期时间戳记录在服务器上。而服务器则执行其他所有操作(验证、处理、报告)。
**场景B:**顺序很重要。如果您只是保持离线连接,则较旧的数据可能会覆盖较新的数据,如以下情况:用户有两个设备。具有新数据的设备首先联机,然后是具有旧数据的设备

我已经处理了这两种情况,对于情况B,我做了以下操作:
1.创建“队列”表。
1.所有条目首先进入队列(联机或脱机)
1.队列条目中的插入触发Firebase Cloud函数。该函数执行验证和处理(下面的示例)。
1.该函数在实际表中创建条目。
步骤3在使用Todo等应用程序时特别有用。这是因为您可能希望记录事件(比如在日志文件中),但不希望在较旧的数据稍后出现时更新todo项状态。

flmtquvp

flmtquvp4#

Couchbase Lite是一个具有成熟数据同步功能的数据库。
它是一个文档风格的NoSQL数据库,因此它允许您存储JSON而无需定义模式。
当有网络连接时,可以在本地修改文档并与远程Couchbase Server数据库同步。检测来自多个设备的更改之间的冲突,并可以自动解决或通过自定义冲突解决程序解决。
已经提到的Cloud Firestore不是一个完整的离线优先解决方案,并且不适合所有用例。它不允许您精确地控制当用户离线时哪些数据在本地可用。它只缓存一定量的已请求数据。Couchbase Lite提供了多个选项来控制文档如何与远程服务器同步,包括过滤器功能、文档ID和通道列表。Cloud Firestore也没有内置的冲突检测系统。
免责声明:我是Couchbase Lite Dart/Flutter SDK的作者。

相关问题