DEV Community

SameX
SameX

Posted on

鸿蒙Next之数据同步艺术之一:方舟数据管理揭秘

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

本文将介绍华为鸿蒙HarmonyOS Next 中的核心数据管理框架——方舟数据管理(ArkData),并探讨其在HarmonyOS系统中的角色和重要性。

什么是方舟数据管理?

方舟数据管理(ArkData)是华为鸿蒙HarmonyOS Next 中的一个重要组件,它为开发者提供了一套统一的数据存储、管理和同步机制。ArkData 旨在解决不同应用、不同设备之间数据交互的问题,并提升数据管理的效率和安全性能。

方舟数据管理的角色和重要性

  • 统一数据管理: ArkData 提供了一套统一的数据类型和结构定义,例如标准化数据类型 (UTD) 和标准化数据结构,用于描述不同类型的数据,并规范数据交互的格式。
  • 数据存储和持久化: ArkData 支持多种数据存储方式,包括用户首选项、键值型数据库、关系型数据库等,开发者可以根据数据的特点选择合适的存储方案。
  • 数据同步: ArkData 支持跨设备数据同步功能,例如分布式数据对象和关系型数据库,开发者可以利用这些功能实现应用数据在不同设备之间的同步。
  • 数据安全与可靠性: ArkData 提供了一系列数据安全与可靠性机制,例如数据备份、数据恢复、数据加密等,以确保数据的安全性和可靠性。 ### 如何在项目中集成ArkData模块 要在项目中使用ArkData模块,你需要进行以下步骤:
  • 导入模块: 在你的项目中,需要导入ArkData模块相关的类和接口。
  • 创建数据对象: 根据你的需求,选择合适的存储方式创建数据对象,例如创建键值型数据库、关系型数据库或用户首选项。
  • 操作数据: 使用ArkData模块提供的接口对数据对象进行增删改查等操作。
  • 数据同步: 如果需要跨设备数据同步,可以配置分布式数据对象或关系型数据库的同步参数,并调用相应的接口进行数据同步。 示例代码
// 导入ArkData模块
import { distributedKVStore } from '@kit.ArkData';
// 创建键值型数据库
let kvManager = distributedKVStore.createKVManager(kvManagerConfig);
let kvStore = kvManager.getKVStore('storeId', options);
// 插入数据
kvStore.put('key1', 'value1');
// 查询数据
let value = kvStore.get('key1');
console.log(value); // 输出:value1
Enter fullscreen mode Exit fullscreen mode

标准化数据类型 (UTD)

  • UTD 的作用: UTD 定义了不同类型数据的标识、归属关系、简要描述等信息,例如图片、视频、音频等。它可以帮助应用识别和过滤不同类型的数据,例如文件预览、文件分享等。
  • UTD 的优势: UTD 的引入,使得不同应用、不同设备之间数据交互更加规范和一致,降低了开发成本,并提升了用户体验。
  • UTD 的使用: 开发者可以使用ArkData提供的接口查询和获取UTD信息,例如 uniformTypeDescriptor.getUniformDataTypeByFilenameExtensionuniformTypeDescriptor.getTypeDescriptor示例代码
// 查询文件类型
let fileType = uniformTypeDescriptor.getUniformDataTypeByFilenameExtension('.jpg');
console.log(fileType.typeId); // 输出:general.image
// 获取文件类型详情
let fileDetails = uniformTypeDescriptor.getTypeDescriptor(fileType.typeId);
console.log(fileDetails.description); // 输出:图片
Enter fullscreen mode Exit fullscreen mode

标准化数据结构

  • 标准化数据结构的定义: 标准化数据结构为部分UTD数据类型定义了统一的数据内容结构,例如图片的宽高、分辨率等信息,以及超链接的URL、描述等信息。
  • 标准化数据结构的作用: 标准化数据结构可以方便应用进行跨应用、跨设备的数据交互,例如拖拽等。
  • 标准化数据结构的使用: 开发者可以使用ArkData提供的接口创建和操作标准化数据结构,例如 uniformDataStruct.HyperlinkuniformDataStruct.PlainText示例代码
// 创建超链接
let hyperlink = new uniformDataStruct.Hyperlink({
  uniformDataType: 'general.hyperlink',
  url: 'https://www.example.com',
  description: '示例超链接',
});
// 创建纯文本
let plainText = new uniformDataStruct.PlainText({
  uniformDataType: 'general.plain-text',
  textContent: '示例文本',
});
// 创建统一数据对象
let unifiedData = new unifiedDataChannel.UnifiedData();
unifiedData.addRecord(new unifiedDataChannel.UnifiedRecord(hyperlink));
unifiedData.addRecord(new unifiedDataChannel.UnifiedRecord(plainText));
// 打印统一数据对象内容
console.log(unifiedData.getRecords());
Enter fullscreen mode Exit fullscreen mode

分布式数据对象

  • 分布式数据对象的定义: 分布式数据对象是华为鸿蒙HarmonyOS Next 中的一个内存对象同步机制,它可以将一个对象的数据在多个设备之间进行同步。
  • 分布式数据对象的作用: 分布式数据对象可以用于跨设备迁移、多端协同等场景,例如游戏应用、多人协作应用等。
  • 分布式数据对象的使用: 开发者可以使用ArkData提供的接口创建和操作分布式数据对象,例如 distributedDataObject.createdistributedDataObject.setSessionId示例代码
// 创建分布式数据对象
let dataObject = distributedDataObject.create(context, data);
// 设置同步会话ID
dataObject.setSessionId(sessionId);
// 监听数据变更
dataObject.on('change', (sessionId, fields) => {
  console.log(`数据变更:${fields.join(',')}`);
});
// 更改数据
dataObject.title = '新的标题';
Enter fullscreen mode Exit fullscreen mode

关系型数据库 (RelationalStore)

  • 关系型数据库的定义: 关系型数据库是华为鸿蒙HarmonyOS Next 中的一个持久化存储机制,它基于SQLite组件,支持复杂的数据库操作,例如增删改查、事务、索引等。
  • 关系型数据库的作用: 关系型数据库可以用于存储复杂的数据关系,例如联系人、日历等。
  • 关系型数据库的使用: 开发者可以使用ArkData提供的接口创建和操作关系型数据库,例如 relationalStore.getRdbStorerelationalStore.executeSql示例代码
// 创建关系型数据库
let store = relationalStore.getRdbStore(context, storeConfig);
// 创建数据表
store.executeSql('CREATE TABLE IF NOT EXISTS EMPLOYEE (ID INTEGER PRIMARY KEY AUTOINCREMENT, NAME TEXT NOT NULL, AGE INTEGER)');
// 插入数据
store.insert('EMPLOYEE', { name: 'Alice', age: 30 });
// 查询数据
let resultSet = store.query('EMPLOYEE', ['ID', 'NAME', 'AGE']);
while (resultSet.goToNextRow()) {
  console.log(`ID: ${resultSet.getInt('ID')}, NAME: ${resultSet.getString('NAME')}, AGE: ${resultSet.getInt('AGE')}`);
}
resultSet.close();
Enter fullscreen mode Exit fullscreen mode

键值型数据库 (KV-Store)

  • 键值型数据库的定义: 键值型数据库是华为鸿蒙HarmonyOS Next 中的一个轻量级持久化存储机制,它以键值对的形式存储数据,支持快速读写操作。
  • 键值型数据库的作用: 键值型数据库可以用于存储简单的数据,例如配置信息、用户偏好设置等。
  • 键值型数据库的使用: 开发者可以使用ArkData提供的接口创建和操作键值型数据库,例如 distributedKVStore.createKVManagerdistributedKVStore.getKVStore示例代码
// 创建键值型数据库
let kvManager = distributedKVStore.createKVManager(kvManagerConfig);
let kvStore = kvManager.getKVStore('storeId', options);
// 插入数据
kvStore.put('key1', 'value1');
// 查询数据
let value = kvStore.get('key1');
console.log(value); // 输出:value1
Enter fullscreen mode Exit fullscreen mode

用户首选项 (Preferences)

  • 用户首选项的定义: 用户首选项是华为鸿蒙HarmonyOS Next 中的一个轻量级配置数据存储机制,它以键值对的形式存储数据,并且可以监听数据变更。
  • 用户首选项的作用: 用户首选项可以用于存储应用的配置信息、用户偏好设置等。
  • 用户首选项的使用: 开发者可以使用ArkData提供的接口创建和操作用户首选项,例如 preferences.getPreferencesSyncpreferences.putSync示例代码
// 创建用户首选项
let preferences = preferences.getPreferencesSync(context, options);
// 写入数据
preferences.putSync('key1', 'value1');
// 读取数据
let value = preferences.getSync('key1');
console.log(value); // 输出:value1
// 删除数据
preferences.deleteSync('key1');
Enter fullscreen mode Exit fullscreen mode

总结

方舟数据管理 (ArkData) 是华为鸿蒙HarmonyOS Next 中的一个强大的数据管理框架,它为我们开发者提供了便捷的数据存储、管理和同步功能,并提升了数据管理的效率和安全性能。开发者可以利用ArkData模块轻松地实现跨应用、跨设备的数据交互,并构建安全可靠的应用。

Qodo Takeover

Introducing Qodo Gen 1.0: Transform Your Workflow with Agentic AI

While many AI coding tools operate as simple command-response systems, Qodo Gen 1.0 represents the next generation: autonomous, multi-step problem-solving agents that work alongside you.

Read full post

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