介紹
分布式數據服務(Distributed Data Service,DDS)為應用程序提供不同設備間數據分布式的能力。通過調用分布式數據接口,應用程序將數據保存到分布式數據庫中。通過結合帳號、應用和分布式數據服務對屬于不同的應用的數據進行隔離,保證不同應用之間的數據不能通過分布式數據服務互相訪問。在通過可信認證的設備間,分布式數據服務支持應用數據相互同步,為用戶提供在多種終端設備上一致的數據訪問體驗。效果圖如下:
圖 1 []()
搭建OpenHarmony環境
完成本篇Codelab我們首先要完成開發環境的搭建,本示例以Hi3516DV300開發板為例,參照以下步驟進行:
- [獲取OpenHarmony系統版本]:標準系統解決方案(二進制)
以3.0版本為例: - 搭建燒錄環境
- 搭建開發環境
- 開始前請參考[工具準備],完成DevEco Studio的安裝和開發環境配置。
- 開發環境配置完成后,請參考[使用工程向導]創建工程(模板選擇“Empty Ability”),選擇JS或者eTS語言開發。
- 工程創建完成后,選擇使用[真機進行調測]。
代碼結構解讀
本篇Codelab只對核心代碼進行講解,對于完整代碼,我們會在最后的參考中提供下載方式,接下來我們來講解整個工程的代碼結構:
- pages:用于存放所有頁面的目錄。
- config.json:配置文件。
分布式組網
硬件準備:準備兩臺燒錄相同的版本系統的Hi3516DV300開發板A,B。
兩個開發板A,B配置在同一個WiFi網絡之下。
打開設置-->WLAN-->點擊右側WiFi開關-->點擊目標WiFi并輸入密碼。將設備A,B設置為互相信任的設備。
- 找到系統應用“音樂”。
- 設備A打開音樂,點擊左下角流轉按鈕,彈出列表框,在列表中會展示遠端設備的id。
- 選擇遠端設備B的id,另一臺開發板(設備B)會彈出驗證的選項框。
- 設備B點擊允許,設備B將會彈出隨機PIN碼,將設備B的PIN碼輸入到設備A的PIN碼填入框中。
配網完畢。
創建分布式數據庫
- 導入模塊
import distributedData from '@ohos.data.distributeddata';
- 參考分布式數據庫[接口],在kvStoreModel類中定義KvManager和KvStore變量,并通過createKVManager創建分布式數據庫管理對象KvManager,通過getKVStore獲取數據庫操作實例KvStore。其中config表示創建KVManager實例的配置信息,包括調用方的包名和用戶信息。options表示創建 KvStore實例的配置信息。表示示例代碼如下:
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和要添加的數值。示例代碼如下:
put(key, value) { this.kvStore.put(key, value).then((data) = > { this.kvStore.get(key).then((data) = > { }); }).catch((err) = > { }); }
- 數據庫中刪除指定鍵值對的數據:使用delete()方法,該方法接收一個參數,需要刪除數據的鍵值key,結果以Promise形式返回。示例代碼如下:
delete(key) { this.kvStore.delete(key).then((data) = > { }).catch((err) = > { }); }
- 數據庫中獲取指定鍵值對的數據:使用get()方法,該方法接收兩個參數,分別是需要獲取數據的鍵值key和返回函數callback,結果以callback函數形式返回。示例代碼如下:
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文章
9瀏覽量
8923 -
鴻蒙
+關注
關注
57文章
2339瀏覽量
42805 -
HarmonyOS
+關注
關注
79文章
1973瀏覽量
30143 -
OpenHarmony
+關注
關注
25文章
3713瀏覽量
16254
發布評論請先 登錄
相關推薦
評論