让我说我有一个待办事项应用程序,当该应用程序联机时,它会将数据存储在sqflite数据库中(在手机上本地),我希望将数据与我的在线数据库(如mongodb或firestore)同步。我不想每次都要进行完全覆盖或创建新表,我正在寻找一种仅更新对数据库所做更改的有效解决方案。
答案 0 :(得分:7)
the source code为您提供了所有这些功能。如果您不能使用此功能,则其他解决方案会更加复杂,因为同步信息可能会非常棘手。
假设用户有2个设备,它们都保存相同的数据,服务器应保留哪个版本,最新创建的数据或服务器首先接收的数据?
SQLite适用于结构化数据,但是您可以使用“系统偏好设置”将数据另存为JSON字符串,然后将该JSON推送到服务器,如果可以通过这种方式进行操作则简单得多。
同样,这确实不是一个简单的答案,并且因项目而异。
答案 1 :(得分:1)
正如已经指出的,这是一个体系结构问题,可能没有简单的答案。这里有两个主要想法:
方案A::您只是在更新交易数据,因此顺序无关紧要,例如移动考勤应用程序。用户的位置以及日期时间戳记记录在服务器上。然后服务器执行其他所有操作(验证,处理,报告)。
方案B:顺序很重要。如果仅保持脱机连接,则在以下类似情况下,较旧的数据可能会覆盖较新的数据:用户具有两个设备。具有新数据的设备首先联机,然后具有旧数据的设备
我处理了两种情况,对于情况B,我做了以下事情:
在使用Todo等应用程序时,步骤3特别有用。这是因为您可能想记录事件(例如在日志文件中记录),但如果以后出现较旧的数据,则不希望重复待办事项状态。
答案 2 :(得分:0)
https://github.com/jogboms/flutter_offline
https://pub.dev/packages/http
https://medium.com/@greg.perry/sqlite-database-in-flutter-2ef1ef87e5af
我认为这将有助于构建离线和在线同步。