1# 分布式数据对象部件 2## 简介 3分布式数据对象管理框架是一款面向对象的内存数据管理框架,向应用开发者提供内存对象的创建、查询、删除、修改、订阅等基本数据对象的管理能力,同时具备分布式能力,满足超级终端场景下,相同应用多设备间的数据对象协同需求。 4 5分布式数据对象提供JS接口,让开发者能以使用本地对象的方式使用分布式对象。分布式数据对象支持的数据类型包括数字型、字符型、布尔型等基本类型,同时也支持数组、基本类型嵌套等复杂类型。 6 7## 约束 8 9• 不同设备间只有相同bundleName的应用才能直接同步 10 11• 不建议创建过多分布式对象,每个分布式对象将占用100-150KB内存 12 13• 每个对象大小不超过500KB 14 15• 支持JS接口间的互通,与其他语言不互通 16 17• 如对复杂类型的数据进行修改,仅支持修改根属性,暂不支持下级属性修改 18 19## 目录 20 21``` 22//foundation/distributeddatamgr/data_object/ 23├── frameworks # 框架层代码 24│ ├── innerkitsimpl # 内部接口实现 25│ │ ├── include 26│ │ ├── src 27│ │ └── test # C++测试用例 28│ └── jskitsimpl # JS API实现 29│ ├── include 30│ ├── src 31│ └── test # js测试用例 32├── interfaces # 接口代码 33│ ├── innerkits # 内部接口声明 34│ └── jskits # js接口声明 35├── picture # 资源图库 36└── samples # 开发实例 37``` 38**图 1** 分布式数据对象实现图<a name="fig1"></a> 39 40 41 42每定义一个分布式数据对象都会创建一个分布式内存数据库,通过sessionId来标识。当对分布式数据对象进行读写操作时,实际上是对分布式数据库进行读写操作。分布式数据对象通过软总线实现数据的同步。 43## 接口说明 44 45### 引用分布式对象头文件 46 47```js 48import distributedObject from '@ohos.data.distributedDataObject' 49``` 50 51### 接口 52 53| 接口名称 | 描述 | 54| ------------------------------------------------------------ | ------------------------------------------------------------ | 55| function createDistributedObject(source: object): DistributedObject; | 创建分布式对象<br>source中指定分布式对象中的属性<br>返回值是创建出的分布式对象,接口见DistrubutedObject | 56| function genSessionId(): string; | 随机创建sessionId<br>返回值是随机创建的sessionId | 57 58### DistrubutedObject 59 60| 接口名称 | 描述 | 61| ------------------------------------------------------------ | ------------------------------------------------------------ | 62| setSessionId(sessionId?: string): boolean; | 设置同步的sessionId,可信组网中有多个设备时,多个设备间的对象如果设置为同一个sessionId,就能自动同步<br>sessionId是不同设备间组网的标识,将sessionId设置为" "或不设置均可退出组网<br>返回值是操作结果,true表示设置sessionId成功 | 63| on(type: 'change', callback: Callback<{ sessionId: string, fields: Array<string> }>): void; | 监听对象数据的变更<br>type固定为'change'<br>callback是变更时触发的回调,回调参数sessionId标识变更对象的sessionId,fields标识对象变更的属性名 | 64| off(type: 'change', callback?: Callback<{ sessionId: string, fields: Array<string> } | 删除数据对象变更的监听<br>type固定为'change'<br>callback为可选参数,不设置表示删除该对象所有变更监听 | 65| on(type: 'status', callback: Callback<{ sessionId: string, networkId: string, status: 'online' \| 'offline' }>): void | 监听数据对象上下线的变更<br/>type固定为'status'<br/>callback是变更时触发的回调,回调参数sessionId标识变更对象的sessionId,networkId标识对象设备的networkId,status标识对象为'online'(上线)或'offline'(下线)的状态 | 66| off(type: 'status', callback?: Callback<{ sessionId: string, deviceId: string, status: 'online' \| 'offline' }>): void | 删除数据对象上下线变更的监听<br/>type固定为'status'<br/>callback为可选参数,不设置表示删除该数据对象所有上下线监听 | 67| save(deviceId: string, callback: AsyncCallback<SaveSuccessResponse>): void | 持久化保存数据对象<br/>deviceId为设备Id,用户自定义。例如"local"。<br/> | 68| revokeSave(callback: AsyncCallback<RevokeSaveSuccessResponse>): void | 撤回已保存的数据对象。callback为撤回已保存的数据对象回调。 69 70 71 72## 开发实例 73 74针对分布式数据对象,有以下开发实例可供参考: 75 76[备忘录应用](https://gitee.com/openharmony/distributeddatamgr_data_object/tree/master/samples/distributedNotepad) 77 78分布式数据对象在备忘录应用中,通过分布式数据对象框架,当用户在某一端设备上新增备忘录事件,修改编辑事件标题和内容以及清空事件列表时,产生的数据变更结果均可以同步刷新显现在可信组网内其他设备上。 79 80## 相关仓 81- [分布式数据对象开发指导](https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/database/data-sync-of-distributed-data-object.md) 82- [分布式数据对象API文档](https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/reference/apis/js-apis-data-distributedobject.md) 83- [distributeddatamgr\_datamgr](https://gitee.com/openharmony/distributeddatamgr_datamgr) 84- [third\_party\_sqlite](https://gitee.com/openharmony/third_party_sqlite) 85- **[distributeddatamgr\_data\_object](https://gitee.com/openharmony/distributeddatamgr_data_object)** 86