首页 经验

诗词速通,漫游泡泡,词汇宝,新维日语,简易物理,点此下载


distributedDataObject和kvstore区别

时间: 2026-04-15 11:47:41

(部分内容来自网络,其真实性存疑,为了避免对您造成误导,请谨慎甄别。)

好,直接说区别,不扯废话。




一、一句话总结


对比项DistributedDataObject (分布式数据对象)KVStore (分布式键值库)
数据存哪内存。应用退出,数据就没了磁盘。应用退出,数据还在
怎么同步改属性就自动同步,不需要调任何方法默认自动同步,也可以手动调 sync() 控制时机
同步粒度属性级。改哪个属性就只同步哪个属性键级。改哪个key就只同步哪个key
数据形态JS对象,像操作本地变量一样操作键值对,put(key, value) / get(key)
查询能力。只能整个对象读。支持条件查询、前缀查询
冲突处理。需要业务自己合并SINGLE_VERSION:后写覆盖;DEVICE_COLLABORATION:按设备分片,不冲突
限制单对象 ≤ 500KB,最多16个实例,最多3台设备单key的Value ≤ 4MB,最多16个库
适合场景页面标题、光标位置、播放进度、开关状态配置项、待办列表、消息记录、结构化数据




二、按你的需求选


你要的是:同应用跨设备同步数据


你的数据特征选哪个原因
需要持久化,重启后还在KVStore数据存磁盘
不需要持久化,页面关了数据无所谓DistributedDataObject更简单
数据量超过500KBKVStore单对象500KB硬上限
需要查询(比如查所有key、按前缀查)KVStore支持Query
只是页面状态同步(标题、选中项)DistributedDataObject改属性就同步,代码最少
两设备可能同时改同一条数据KVStore + DEVICE_COLLABORATION模式按设备分片,天然不冲突




三、代码对比


DistributedDataObject


import { distributedDataObject } from '@kit.ArkData';

// 创建对象 let obj = distributedDataObject.create(context, {     title: '标题',     content: '内容' });
// 设置sessionId(同ID自动组网) let sessionId = distributedDataObject.genSessionId(); obj.setSessionId(sessionId);
// 监听其他设备的数据变化 obj.on('change', (sessionId, fields) => {     console.log('变化字段:', fields);     console.log('新标题:', obj.title); });
// 修改数据(自动同步到其他设备) obj.title = '新标题';


KVStore


import { distributedKVStore } from '@kit.ArkData';

// 创建KVManager let kvManager = distributedKVStore.createKVManager({     context: context,     bundleName: 'com.example.app' });
// 获取KVStore let kvStore = await kvManager.getKVStore('store_id', {     autoSync: true,  // 自动同步     kvStoreType: distributedKVStore.KVStoreType.SINGLE_VERSION });
// 写数据(自动同步) await kvStore.put('title', '新标题');
// 读数据 let title = await kvStore.get('title');
// 监听其他设备的变化 kvStore.on('dataChange',      distributedKVStore.SubscribeType.SUBSCRIBE_TYPE_REMOTE,     (data) => {         console.log('收到远端数据:', data);     } );




四、关键区别(你之前调不通的原因)


问题DistributedDataObjectKVStore
接收方必须设undefined✅ 必须。否则数据会被覆盖❌ 不需要
sessionId必须一致✅ 必须。否则不同步❌ 不需要
需要手动sync❌ 不需要⚠️ 可选,默认autoSync=true就行
数据丢了不报错⚠️ 会。因为存内存✅ 不会,存磁盘


你之前DistributedDataObject调不通,大概率是接收方没把属性设成undefined


还有问题,向AI提问。


上一个 分布式文件系统 + 手动通知 文章列表 下一个 三个问题的技术描述

(汉语/英语/日语/法语/德语)语音助手(识别/合成),智能翻译,高中物理动画,数据分析,数据可视化,电话: 18201798243(同v)

© 2019-至今 适观科技

沪ICP备17002269号