电子说
分布式数据服务(Distributed Data Service,DDS)为应用程序提供不同设备间数据分布式的能力。通过调用分布式数据接口,应用程序将数据保存到分布式数据库中。通过结合帐号、应用和分布式数据服务对属于不同的应用的数据进行隔离,保证不同应用之间的数据不能通过分布式数据服务互相访问。在通过可信认证的设备间,分布式数据服务支持应用数据相互同步,为用户提供在多种终端设备上一致的数据访问体验。效果图如下:
图 1 []()
完成本篇Codelab我们首先要完成开发环境的搭建,本示例以Hi3516DV300开发板为例,参照以下步骤进行:
gitee.com/li-shizhen-skin/harmony-os/blob/master/README.md
](本篇Codelab只对核心代码进行讲解,对于完整代码,我们会在最后的参考中提供下载方式,接下来我们来讲解整个工程的代码结构:
硬件准备:准备两台烧录相同的版本系统的Hi3516DV300开发板A,B。
两个开发板A,B配置在同一个WiFi网络之下。
打开设置-->WLAN-->点击右侧WiFi开关-->点击目标WiFi并输入密码。
将设备A,B设置为互相信任的设备。
配网完毕。
import distributedData from '@ohos.data.distributeddata';
export default class KvStoreModel {
kvManager;
kvStore;
constructor() {
}
createKvStore(callback) {
if (typeof (this.kvStore) === 'undefined') {
//创建KVManager实例的配置信息
var config = {
bundleName: 'com.ohos.distributedmusicplayer',
userInfo: {
userId: '0',
userType: 0
}
};
let self = this;
distributedData.createKVManager(config).then((manager) = > {
self.kvManager = manager;
//创建 KvStore实例的配置信息
var options = {
createIfMissing: true,
encrypt: false,
backup: false,
autoSync: true,
kvStoreType: 1,
schema: '',
securityLevel: 3,
};
self.kvManager.getKVStore(STORE_ID, options).then((store) = > {
self.kvStore = store;
callback();
});
});
} else {
callback();
}
}
}
创建分布式数据库后,获得一个KvStore,通过KvStore调用相关接口执行相关的数据操作,结果以Promise形式返回。
put(key, value) {
this.kvStore.put(key, value).then((data) = > {
this.kvStore.get(key).then((data) = > {
});
}).catch((err) = > {
});
}
delete(key) {
this.kvStore.delete(key).then((data) = > {
}).catch((err) = > {
});
}
get(key,callback){
this.kvStore.get(key).then((data) = > {
callback(data);
});
}
通常情况下,当数据库的数据产生变化时,需要主动通知与该数据相关联的进程或者应用,从而使得相关进程或者应用接收到数据变化后完成相应的处理。对于数据提供方,当数据库数据变化,可以通过如下方法通知数据订阅者:
broadcastMessage(key, value) {
let self = this;
this.createKvStore(() = > {
self.put(key, value);//self.delete(key)新增或者删除数据都可导致数据变化
});
}
对于数据接收方,可以通过KvStore提供的[on]方法注册一个数据订阅者。示例代码如下:
setOnMessageReceivedListener(callback) {
let self = this;
this.createKvStore(() = > {
self.kvStore.on('dataChange', 1, (data) = > {
for (var i = 0; i < data.insertEntries.length; i++) {
callback(data.insertEntries[0].key, data.insertEntries[0].value.value, 0);
return;
}
for (i = 0; i < data.updateEntries.length; i++) {
callback(data.updateEntries[0].key, data.updateEntries[0].value.value, 1);
return;
}
for (i = 0; i < data.deleteEntries.length; i++) {
callback(data.deleteEntries[0].key, '', 2);
return;
}
});
});
}
审核编辑 黄宇
全部0条评论
快来发表一下你的评论吧 !