《HarmonyOS 7 跨设备数据协同专题》04:DistributedKVStore 的 PUSH、PULL 与最终一致性【鸿蒙心迹】
手机改了平板也改了最后谁覆盖谁前三篇做的都是实时内存同步适合正在编辑的笔记。这篇做持久化大量笔记记录要存到数据库里跨设备同步。最开始以为同步就是把两边数据合一下就行。结果两边都改了同一条记录到底听谁的一、分布式 KVStore 是什么分布式 KVStore 就是一个键值数据库数据可以跨设备同步。和分布式数据对象不一样数据对象是内存里的实时同步KVStore 是持久化的存在本地数据库然后按策略同步。类型存储方式同步方式DistributedDataObject内存实时同步DistributedKVStore本地数据库按策略同步二、三种同步模式手动同步的时候有三种模式模式方向说明PUSH_ONLY只推把本地数据推给对端PULL_ONLY只拉从对端拉数据下来PUSH_PULL双向两边数据互相同步这段代码解决什么问题手动同步 KVStore。文件distributed/NoteStore.ets用途持久化笔记同步接入位置网络恢复后import{distributedKVStore}fromkit.ArkData;// 手动同步kvStore.sync(deviceIds,distributedKVStore.SyncMode.PUSH_PULL,(err,result){if(err){console.error(同步失败);return;}console.log(同步完成:,result);});三、最终一致性是什么意思同步完成了不是说两边数据完全一样。是最终一致。意思是现在可能不一样过一会儿同步完了就一样了。不是强一致。四、几个容易踩的坑第一个坑什么情况都用 PUSH_PULL。有些场景只推或者只拉就够了。第二个坑把同步完成理解成强一致。同步完也可能有冲突。第三个坑设备离线疯狂重试。离线了就别一直重试等连上再同步。第四个坑大量数据每次全量同步。数据量大会很慢。五、冲突怎么处理两边都改了同一条记录冲突怎么办正确的做法是加版本字段或者更新时间。谁更新时间新听谁的。这次做持久化同步最大的体会是持久化同步不是实时内存同步是按策略同步的。要考虑弱网、离线、冲突这些情况不是同步一下就完事了。