ArkData:键值型数据库——让信息在多设备间安全的跳跃 原创
嘿,小伙伴们!👋 想象一下,如果你的手机、平板和电脑能够像一群好朋友一样,随时分享彼此的新鲜事,那该多酷啊!这就是同应用跨设备数据同步的魅力所在。📲💻📚
🚀 同应用跨设备数据同步简介
同应用跨设备数据同步,就像是在不同设备间搭建了一个秘密通道,让数据可以自由穿梭。🌉 无论是在家里的平板上编辑文档,还是在路上用手机查看,都能保持同步,让你的工作无缝衔接。
🔍 键值型数据库跨设备数据同步
键值型数据库跨设备数据同步,就像是给你的数据找了个超级管家,不仅帮你保管好每一条信息,还能在你需要的时候,迅速地把它们送到正确的设备上。🗝️💾
🌟 同应用跨设备数据同步的奇妙用途
1. 分布式图库:让回忆无处不在
想象一下,你在手机上拍了一张超美的照片,回到家里,这张照片已经在你的平板和电脑上等着了。这就是分布式图库的魅力,让美好的回忆随时随地都能查看。🖼️
2. 备忘录:随时记录灵感
灵感总是来得突然,去得也快。有了跨设备同步的备忘录,不管你是在路上用手机匆匆记下,还是在电脑前整理,所有的灵感都能被好好保存,随时查阅。📝
3. 联系人管理:保持联系,不分设备
联系人信息的同步,让你在任何设备上都能轻松找到朋友的电话和邮件。再也不怕换设备就丢了联系方式了。📱💼
4. 文件管理器:文件随行,效率倍增
文件管理器的跨设备同步,让你的文件和文档在任何设备上都能轻松访问。这样,无论你身在何处,都能保持高效工作。📁🚀
📚 键值型数据库跨设备数据同步的魔法
键值型数据库,就像是给你的数据安了个家。每个数据都有属于自己的小房间(键),里面存放着它们的内容(值)。🏠🔑
🌐 单版本数据库:简单直接的数据同步
在单版本数据库中,数据就像是住在单身公寓里,每个设备都有自己的小房间。当数据更新时,最新的版本会覆盖旧的,确保所有设备上的数据都是最新的。🏢
🤝 多设备协同数据库:设备间的和谐共处
多设备协同数据库,就像是给每个设备分配了一栋别墅,每个设备的数据都有自己的独立空间,互不干扰。这样,每个设备都能管理自己的数据,同时还能和其他设备共享信息。🏡
🛠️ 代码实战:用ArkTS语言搭建数据同步的桥梁
现在,让我们用ArkTS语言,一步步搭建起数据同步的桥梁。🌉
🌟 导入模块
首先,我们需要导入必要的模块,就像是准备搭建桥梁的工具。🛠️
import { distributedKVStore } from '@kit.ArkData';
🔑 创建KVManager对象实例
接下来,我们创建一个KVManager对象实例,它将帮助我们管理数据库对象。📂
let kvManager: distributedKVStore.KVManager | undefined;
try {
const kvManagerConfig: distributedKVStore.KVManagerConfig = {
bundleName: 'com.example.datamanagertest',
context: context
};
kvManager = distributedKVStore.createKVManager(kvManagerConfig);
console.info('Succeeded in creating KVManager.');
} catch (e) {
let error = e as BusinessError;
console.error(`Failed to create KVManager. Code:${error.code},message:${error.message}`);
}
分析功能
- 我们首先尝试创建一个
KVManagerConfig
对象,它包含了应用的bundleName和上下文。 - 使用
createKVManager
方法创建KVManager实例。 - 如果创建成功,我们在控制台输出成功信息;如果失败,则输出错误信息。
📝 获取并得到指定类型的键值型数据库
现在,我们来获取并创建一个指定类型的键值型数据库。🗂️
let kvStore: distributedKVStore.SingleKVStore | undefined;
try {
let schema = new distributedKVStore.Schema();
schema.root.appendChild(new distributedKVStore.FieldNode('id', distributedKVStore.ValueType.INTEGER, false, '1'));
schema.root.appendChild(new distributedKVStore.FieldNode('name', distributedKVStore.ValueType.STRING, false, 'zhangsan'));
schema.indexes = ['$.id', '$.name'];
schema.mode = 1;
schema.skip = 0;
const options: distributedKVStore.Options = {
createIfMissing: true,
encrypt: false,
backup: false,
autoSync: false,
kvStoreType: distributedKVStore.KVStoreType.SINGLE_VERSION,
schema: schema,
securityLevel: distributedKVStore.SecurityLevel.S1
};
kvManager.getKVStore<distributedKVStore.SingleKVStore>('storeId', options, (err, store: distributedKVStore.SingleKVStore) => {
if (err) {
console.error(`Failed to get KVStore: Code:${err.code},message:${err.message}`);
return;
}
console.info('Succeeded in getting KVStore.');
kvStore = store;
});
} catch (e) {
let error = e as BusinessError;
console.error(`An unexpected error occurred. Code:${error.code},message:${error.message}`);
}
分析功能
- 我们创建了一个
Schema
对象,定义了两个字段:id
和name
。 options
对象定义了数据库的各种配置,包括是否创建缺失的数据库、是否加密、是否备份等。- 使用
getKVStore
方法异步获取KVStore实例,并在回调中处理错误和成功情况。
📡 订阅分布式数据变化
接下来,我们订阅数据库中数据的变化,这样我们就能知道何时数据发生了变化。📰
try {
kvStore.on('dataChange', distributedKVStore.SubscribeType.SUBSCRIBE_TYPE_ALL, (data) => {
console.info(`dataChange callback call data: ${data}`);
});
} catch (e) {
let error = e as BusinessError;
console.error(`An unexpected error occurred. code:${error.code},message:${error.message}`);
}
分析功能
- 我们使用
on
方法订阅dataChange
事件,并指定订阅类型为SUBSCRIBE_TYPE_ALL
,意味着我们想监听所有类型的变化。 - 当数据变化时,回调函数会被调用,并输出变化的数据。
📌 将数据写入分布式数据库
现在,我们将一些数据写入分布式数据库。📝
const KEY_TEST_STRING_ELEMENT = 'key_test_string';
const VALUE_TEST_STRING_ELEMENT = '{"id":0, "name":"lisi"}';
try {
kvStore.put(KEY_TEST_STRING_ELEMENT, VALUE_TEST_STRING_ELEMENT, (err) => {
if (err !== undefined) {
console.error(`Failed to put data. Code:${err.code},message:${err.message}`);
return;
}
console.info('Succeeded in putting data.');
});
} catch (e) {
let error = e as BusinessError;
console.error(`An unexpected error occurred. Code:${error.code},message:${error.message}`);
}
分析功能
- 我们定义了一个键
KEY_TEST_STRING_ELEMENT
和一个值VALUE_TEST_STRING_ELEMENT
。 - 使用
put
方法将键值对写入数据库,并在回调中处理错误和成功情况。
🔍 查询分布式数据库数据
最后,我们从分布式数据库中查询数据。🔎
try {
kvStore.get(KEY_TEST_STRING_ELEMENT, (err, data) => {
if (err != undefined) {
console.error(`Failed to get data. Code:${err.code},message:${err.message}`);
return;
}
console.info(`Succeeded in getting data. Data:${data}`);
});
} catch (e) {
let error = e as BusinessError;
console.error(`Failed to get data. Code:${error.code},message:${error.message}`);
}
分析功能
- 我们使用
get
方法查询之前写入的键对应的值。 - 在回调中,我们处理错误和成功情况,并输出查询到的数据。
通过同应用跨设备数据同步和键值型数据库跨设备数据同步,我们可以让数据在不同设备间自由飞翔,让生活和工作更加便捷。🌟