《HarmonyOS 7 跨设备数据协同专题》04:DistributedKVStore 的 PUSH、PULL 与最终一致性【鸿蒙心迹】
2026/9/23 9:58:49 网站建设 项目流程

手机改了,平板也改了,最后谁覆盖谁?

前三篇做的都是实时内存同步,适合正在编辑的笔记。这篇做持久化:大量笔记记录,要存到数据库里,跨设备同步。

最开始以为:同步就是把两边数据合一下就行。结果两边都改了同一条记录,到底听谁的?

一、分布式 KVStore 是什么

分布式 KVStore 就是一个键值数据库,数据可以跨设备同步。

和分布式数据对象不一样:数据对象是内存里的,实时同步;KVStore 是持久化的,存在本地数据库,然后按策略同步。

类型存储方式同步方式
DistributedDataObject内存实时同步
DistributedKVStore本地数据库按策略同步

二、三种同步模式

手动同步的时候,有三种模式:

模式方向说明
PUSH_ONLY只推把本地数据推给对端
PULL_ONLY只拉从对端拉数据下来
PUSH_PULL双向两边数据互相同步

这段代码解决什么问题:手动同步 KVStore。
文件:distributed/NoteStore.ets
用途:持久化笔记同步
接入位置:网络恢复后

import{distributedKVStore}from'@kit.ArkData';// 手动同步kvStore.sync(deviceIds,distributedKVStore.SyncMode.PUSH_PULL,(err,result)=>{if(err){console.error('同步失败');return;}console.log('同步完成:',result);});

三、最终一致性是什么意思

同步完成了,不是说两边数据完全一样。是最终一致。

意思是:现在可能不一样,过一会儿同步完了就一样了。不是强一致。

四、几个容易踩的坑

第一个坑:什么情况都用 PUSH_PULL。有些场景只推或者只拉就够了。

第二个坑:把同步完成理解成强一致。同步完也可能有冲突。

第三个坑:设备离线疯狂重试。离线了就别一直重试,等连上再同步。

第四个坑:大量数据每次全量同步。数据量大会很慢。

五、冲突怎么处理

两边都改了同一条记录,冲突怎么办?

正确的做法是:加版本字段或者更新时间。谁更新时间新,听谁的。

这次做持久化同步最大的体会是:持久化同步不是实时内存同步,是按策略同步的。要考虑弱网、离线、冲突这些情况,不是"同步一下就完事了"。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询