DEV Community

SameX
SameX

Posted on

鸿蒙Next之数据同步艺术之四:必要不充分理解分布式数据对象同步

本文旨在深入探讨华为鸿蒙HarmonyOS Next系统(截止目前API12)的技术细节,基于实际开发实践进行总结。主要作为技术分享与交流载体,难免错漏,欢迎各位同仁提出宝贵意见和问题,以便共同进步。本文为原创内容,任何形式的转载必须注明出处及原作者。

分布式数据对象的生命周期

分布式数据对象的生命周期包括以下状态:

  • 未初始化: 未实例化,或已被销毁。
  • 本地数据对象: 已创建对应的数据表,但是还无法进行数据同步。
  • 分布式数据对象: 已创建对应的数据表,设备在线且组网内设置相同 SessionId 的对象数 >= 2,可以跨设备同步数据。若设备掉线或将 SessionId 置为空,分布式数据对象退化为本地数据对象。 #### 分布式数据对象的同步机制 分布式数据对象的同步机制可以分为以下几个步骤:
  • 创建分布式数据对象: 开发者使用 distributedDataObject.create 方法创建一个分布式数据对象实例,并将业务数据传入。
  • 设置同步会话ID: 开发者使用 dataObject.setSessionId 方法设置同步会话ID,确保不同设备上的对象可以同步数据。
  • 数据映射: 开发者对分布式数据对象的“读取”或“赋值”操作会自动映射到内存数据库的 get 和 put 操作。每个属性的变更都会触发数据同步操作。
  • 数据同步: 当一个设备上的分布式数据对象发生数据变更时,系统会自动将变更数据同步到其他具有相同 SessionId 的设备上。同步过程采用异步方式进行,并通过回调函数通知开发者同步结果。
  • 数据变更通知: 其他设备上的分布式数据对象也会监听数据变更事件,当收到数据变更通知时,会自动更新本地数据。 #### 数据同步的效率和性能 分布式数据对象的同步机制采用了以下措施来提高效率和性能:
  • 最小数据同步单位: 数据同步是以属性为最小单位的,只有当属性发生变更时才会触发数据同步操作,减少了不必要的同步数据量。
  • 异步数据同步: 数据同步采用异步方式进行,避免了阻塞应用程序的运行。
  • 数据压缩: 系统会自动对同步数据进行压缩,减少网络传输的数据量。
  • 数据校验: 系统会对同步数据进行校验,确保数据的一致性和完整性。 ### 实现分布式数据对象同步的完整代码示例 示例代码
// 导入模块
import { distributedDataObject } from '@kit.ArkData';
// 创建分布式数据对象
let dataObject = distributedDataObject.create(context, data);
// 设置同步会话ID
dataObject.setSessionId(sessionId);
// 监听数据变更
dataObject.on('change', (sessionId, fields) => {
  console.log(`数据变更:${fields.join(',')}`);
});
// 更改数据
dataObject.title = '新的标题';
dataObject.text = '新的文本';
// 添加监听状态变更
dataObject.on('status', (sessionId, networkId, status) => {
  console.log(`状态变更:SessionId=${sessionId}, NetworkId=${networkId}, Status=${status}`);
});
// 添加数据持久化
dataObject.save(deviceId);
// 添加数据撤销
dataObject.revokeSave(callback);
// 添加资产绑定
dataObject.bindAssetStore(assetKey, bindInfo, callback);
Enter fullscreen mode Exit fullscreen mode

代码解析

  1. 导入模块: 首先导入 distributedDataObject 模块,它提供了创建和操作分布式数据对象的接口。
  2. 创建分布式数据对象: 使用 distributedDataObject.create 方法创建一个分布式数据对象实例,并将业务数据传入。
  3. 设置同步会话ID: 使用 dataObject.setSessionId 方法设置同步会话ID,确保不同设备上的对象可以同步数据。
  4. 监听数据变更: 使用 dataObject.on 方法监听数据变更事件,当数据发生变更时,回调函数会被触发。
  5. 更改数据: 通过修改分布式数据对象的属性,触发数据同步操作。
  6. 添加监听状态变更: 使用 dataObject.on 方法监听状态变更事件,例如设备连接状态、数据同步状态等。
  7. 添加数据持久化: 使用 dataObject.save 方法将分布式数据对象持久化到设备上,即使设备重启后,数据也不会丢失。
  8. 添加数据撤销: 使用 dataObject.revokeSave 方法撤销之前保存的分布式数据对象,释放设备空间。
  9. 添加资产绑定: 使用 dataObject.bindAssetStore 方法将分布式数据对象与资产绑定,例如文件、图片等,实现资产的跨设备同步。 ### 总结 分布式数据对象同步是华为鸿蒙HarmonyOS Next 中一个强大的功能,它允许咱们轻松地在多个设备之间同步应用数据。通过深入理解分布式内存数据库、跨设备数据同步机制、数据同步的最小单位以及生命周期等概念,可以有效地利用这一功能,构建多端协同的应用。

Heroku

Simplify your DevOps and maximize your time.

Since 2007, Heroku has been the go-to platform for developers as it monitors uptime, performance, and infrastructure concerns, allowing you to focus on writing code.

Learn More

Top comments (0)

Qodo Takeover

Introducing Qodo Gen 1.0: Transform Your Workflow with Agentic AI

Rather than just generating snippets, our agents understand your entire project context, can make decisions, use tools, and carry out tasks autonomously.

Read full post

👋 Kindness is contagious

Please leave a ❤️ or a friendly comment on this post if you found it helpful!

Okay