0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

HarmonyOS開發(fā)實(shí)例:【分布式數(shù)據(jù)服務(wù)】

jf_46214456 ? 來源:jf_46214456 ? 作者:jf_46214456 ? 2024-04-18 10:18 ? 次閱讀

介紹

分布式數(shù)據(jù)服務(wù)(Distributed Data Service,DDS)為應(yīng)用程序提供不同設(shè)備間數(shù)據(jù)分布式的能力。通過調(diào)用分布式數(shù)據(jù)接口,應(yīng)用程序?qū)?shù)據(jù)保存到分布式數(shù)據(jù)庫中。通過結(jié)合帳號(hào)、應(yīng)用和分布式數(shù)據(jù)服務(wù)對(duì)屬于不同的應(yīng)用的數(shù)據(jù)進(jìn)行隔離,保證不同應(yīng)用之間的數(shù)據(jù)不能通過分布式數(shù)據(jù)服務(wù)互相訪問。在通過可信認(rèn)證的設(shè)備間,分布式數(shù)據(jù)服務(wù)支持應(yīng)用數(shù)據(jù)相互同步,為用戶提供在多種終端設(shè)備上一致的數(shù)據(jù)訪問體驗(yàn)。效果圖如下:

圖 1 []()

搭建OpenHarmony環(huán)境

完成本篇Codelab我們首先要完成開發(fā)環(huán)境的搭建,本示例以Hi3516DV300開發(fā)板為例,參照以下步驟進(jìn)行:

  1. [獲取OpenHarmony系統(tǒng)版本]:標(biāo)準(zhǔn)系統(tǒng)解決方案(二進(jìn)制)
    以3.0版本為例:
  2. 搭建燒錄環(huán)境
    1. [完成DevEco Device Tool的安裝]
    2. [完成Hi3516開發(fā)板的燒錄]
    3. 鴻蒙開發(fā)指導(dǎo)參考:[gitee.com/li-shizhen-skin/harmony-os/blob/master/README.md](
  3. 搭建開發(fā)環(huán)境
    1. 開始前請(qǐng)參考[工具準(zhǔn)備],完成DevEco Studio的安裝和開發(fā)環(huán)境配置。
    2. 開發(fā)環(huán)境配置完成后,請(qǐng)參考[使用工程向?qū)創(chuàng)建工程(模板選擇“Empty Ability”),選擇JS或者eTS語言開發(fā)。
    3. 工程創(chuàng)建完成后,選擇使用[真機(jī)進(jìn)行調(diào)測(cè)]。

搜狗高速瀏覽器截圖20240326151450.png

代碼結(jié)構(gòu)解讀

本篇Codelab只對(duì)核心代碼進(jìn)行講解,對(duì)于完整代碼,我們會(huì)在最后的參考中提供下載方式,接下來我們來講解整個(gè)工程的代碼結(jié)構(gòu):

  • pages:用于存放所有頁面的目錄。
    • index:構(gòu)成關(guān)系型數(shù)據(jù)庫操作界面,包括index.hml布局文件,index.css樣式文件,index.js邏輯處理文件。
    • KvStoreModel.js:創(chuàng)建分布式數(shù)據(jù)庫,以及提供表格數(shù)據(jù)的增、刪、改、查API接口。
  • config.json:配置文件。

分布式組網(wǎng)

  1. 硬件準(zhǔn)備:準(zhǔn)備兩臺(tái)燒錄相同的版本系統(tǒng)的Hi3516DV300開發(fā)板A,B。

  2. 兩個(gè)開發(fā)板A,B配置在同一個(gè)WiFi網(wǎng)絡(luò)之下。
    打開設(shè)置-->WLAN-->點(diǎn)擊右側(cè)WiFi開關(guān)-->點(diǎn)擊目標(biāo)WiFi并輸入密碼。

  3. 將設(shè)備A,B設(shè)置為互相信任的設(shè)備。

    • 找到系統(tǒng)應(yīng)用“音樂”。

    • 設(shè)備A打開音樂,點(diǎn)擊左下角流轉(zhuǎn)按鈕,彈出列表框,在列表中會(huì)展示遠(yuǎn)端設(shè)備的id。
    • 選擇遠(yuǎn)端設(shè)備B的id,另一臺(tái)開發(fā)板(設(shè)備B)會(huì)彈出驗(yàn)證的選項(xiàng)框。
    • 設(shè)備B點(diǎn)擊允許,設(shè)備B將會(huì)彈出隨機(jī)PIN碼,將設(shè)備B的PIN碼輸入到設(shè)備A的PIN碼填入框中。


    配網(wǎng)完畢。

創(chuàng)建分布式數(shù)據(jù)庫

  1. 導(dǎo)入模塊
    import distributedData from '@ohos.data.distributeddata';
    
  2. 參考分布式數(shù)據(jù)庫[接口],在kvStoreModel類中定義KvManager和KvStore變量,并通過createKVManager創(chuàng)建分布式數(shù)據(jù)庫管理對(duì)象KvManager,通過getKVStore獲取數(shù)據(jù)庫操作實(shí)例KvStore。其中config表示創(chuàng)建KVManager實(shí)例的配置信息,包括調(diào)用方的包名和用戶信息。options表示創(chuàng)建 KvStore實(shí)例的配置信息。表示示例代碼如下:
export default class KvStoreModel {
    kvManager;
    kvStore;
    constructor() {
    }
    createKvStore(callback) {
      if (typeof (this.kvStore) === 'undefined') {
        //創(chuàng)建KVManager實(shí)例的配置信息
        var config = {
          bundleName: 'com.ohos.distributedmusicplayer',
          userInfo: {
            userId: '0',
            userType: 0
          }
        };
        let self = this;
        distributedData.createKVManager(config).then((manager) = > {
          self.kvManager = manager;
          //創(chuàng)建 KvStore實(shí)例的配置信息
          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();
      }
    }
}

操作分布式數(shù)據(jù)方法

創(chuàng)建分布式數(shù)據(jù)庫后,獲得一個(gè)KvStore,通過KvStore調(diào)用相關(guān)接口執(zhí)行相關(guān)的數(shù)據(jù)操作,結(jié)果以Promise形式返回。

  • 添加鍵值對(duì)到數(shù)據(jù)庫:使用put()方法,該方法接收兩個(gè)參數(shù),分別是要添加的數(shù)值Key和要添加的數(shù)值。示例代碼如下:
    put(key, value) {
      this.kvStore.put(key, value).then((data) = > {
    	this.kvStore.get(key).then((data) = > {
    	});
      }).catch((err) = > {
      });
    }
    
  • 數(shù)據(jù)庫中刪除指定鍵值對(duì)的數(shù)據(jù):使用delete()方法,該方法接收一個(gè)參數(shù),需要?jiǎng)h除數(shù)據(jù)的鍵值key,結(jié)果以Promise形式返回。示例代碼如下:
    delete(key) {
      this.kvStore.delete(key).then((data) = > {
      }).catch((err) = > {
      });
    }
    
  • 數(shù)據(jù)庫中獲取指定鍵值對(duì)的數(shù)據(jù):使用get()方法,該方法接收兩個(gè)參數(shù),分別是需要獲取數(shù)據(jù)的鍵值key和返回函數(shù)callback,結(jié)果以callback函數(shù)形式返回。示例代碼如下:
    get(key,callback){
      this.kvStore.get(key).then((data) = > {
           callback(data);
      });
    }
    

同步分布式數(shù)據(jù)庫

通常情況下,當(dāng)數(shù)據(jù)庫的數(shù)據(jù)產(chǎn)生變化時(shí),需要主動(dòng)通知與該數(shù)據(jù)相關(guān)聯(lián)的進(jìn)程或者應(yīng)用,從而使得相關(guān)進(jìn)程或者應(yīng)用接收到數(shù)據(jù)變化后完成相應(yīng)的處理。對(duì)于數(shù)據(jù)提供方,當(dāng)數(shù)據(jù)庫數(shù)據(jù)變化,可以通過如下方法通知數(shù)據(jù)訂閱者:

broadcastMessage(key, value) {
  let self = this;
  this.createKvStore(() = > {
	self.put(key, value);//self.delete(key)新增或者刪除數(shù)據(jù)都可導(dǎo)致數(shù)據(jù)變化
  });
}

對(duì)于數(shù)據(jù)接收方,可以通過KvStore提供的[on]方法注冊(cè)一個(gè)數(shù)據(jù)訂閱者。示例代碼如下:

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;
	  }
	});
  });
}

審核編輯 黃宇

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 分布式數(shù)據(jù)

    關(guān)注

    0

    文章

    9

    瀏覽量

    8915
  • 鴻蒙
    +關(guān)注

    關(guān)注

    57

    文章

    2302

    瀏覽量

    42689
  • HarmonyOS
    +關(guān)注

    關(guān)注

    79

    文章

    1966

    瀏覽量

    29962
  • OpenHarmony
    +關(guān)注

    關(guān)注

    25

    文章

    3635

    瀏覽量

    16061
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    HarmonyOS開發(fā)實(shí)例:【分布式數(shù)據(jù)管理】

    eTS中分布式數(shù)據(jù)管理的使用,包括KVManager對(duì)象實(shí)例的創(chuàng)建和KVStore數(shù)據(jù)流轉(zhuǎn)的使用。
    的頭像 發(fā)表于 04-11 09:57 ?878次閱讀
    <b class='flag-5'>HarmonyOS</b><b class='flag-5'>開發(fā)</b><b class='flag-5'>實(shí)例</b>:【<b class='flag-5'>分布式</b><b class='flag-5'>數(shù)據(jù)</b>管理】

    HarmonyOS應(yīng)用開發(fā)-分布式任務(wù)調(diào)度

    1. 介紹本篇CodeLab將實(shí)現(xiàn)的內(nèi)容HarmonyOS是面向全場(chǎng)景多終端的分布式操作系統(tǒng),使得應(yīng)用程序的開發(fā)打破了智能終端互通的性能和數(shù)據(jù)壁壘,業(yè)務(wù)邏輯原子化
    發(fā)表于 09-18 09:21

    HarmonyOS應(yīng)用開發(fā)-分布式設(shè)計(jì)

    設(shè)計(jì)理念HarmonyOS 是面向未來全場(chǎng)景智慧生活方式的分布式操作系統(tǒng)。對(duì)消費(fèi)者而言,HarmonyOS 將生活場(chǎng)景中的各類終端進(jìn)行能力整合,形成“One Super Device”,以實(shí)現(xiàn)
    發(fā)表于 09-22 17:11

    HarmonyOS分布式數(shù)據(jù)庫,為啥這么牛?

    開發(fā)者無需關(guān)注索引引擎實(shí)現(xiàn);業(yè)務(wù)通過一套接口調(diào)用,就可以建立起應(yīng)用內(nèi)的索引,同時(shí)系統(tǒng)還具備強(qiáng)大的搜索服務(wù),提供了豐富的檢索接口。 03 出色的性能表現(xiàn) 除了實(shí)現(xiàn)基礎(chǔ)功能,HarmonyOS
    發(fā)表于 11-19 15:38

    HarmonyOS教程—分布式運(yùn)動(dòng)健康應(yīng)用(智能穿戴端)

    的健康數(shù)據(jù),并寫入到分布式數(shù)據(jù)庫中,我們會(huì)在第七小節(jié)詳細(xì)說明如何實(shí)現(xiàn)。最后是初始化分布式數(shù)據(jù)服務(wù)initDbManager(),有關(guān)分布式數(shù)據(jù)
    發(fā)表于 09-06 11:39

    HarmonyOS原子化服務(wù)卡片開發(fā)-分布式體驗(yàn)學(xué)習(xí)

    1.原子化服務(wù)流轉(zhuǎn)在HarmonyOS中泛指涉及多端的分布式操作。流轉(zhuǎn)能力打破設(shè)備界限,多設(shè)備聯(lián)動(dòng),使用戶應(yīng)用程序可分可合、可流轉(zhuǎn),實(shí)現(xiàn)如郵件跨設(shè)備編輯、多設(shè)備協(xié)同健身、多屏游戲等分布式
    發(fā)表于 09-07 09:38

    HarmonyOS教程—基于分布式數(shù)據(jù)接口,實(shí)現(xiàn)多種設(shè)備上一致的數(shù)據(jù)訪問體驗(yàn)

    1. 如何使用分布式數(shù)據(jù)庫介紹分布式數(shù)據(jù)服務(wù)(Distributed Data Service,DDS) 為應(yīng)用程序提供不同設(shè)備間數(shù)據(jù)數(shù)據(jù)
    發(fā)表于 09-26 11:40

    HarmonyOS分布式應(yīng)用框架深入解讀

    著,一般默默地為開發(fā)者和用戶服務(wù)?;A(chǔ)服務(wù)層:包括分布式調(diào)度管理、分布式數(shù)據(jù)管理、
    發(fā)表于 11-22 15:15

    HDC2021技術(shù)分論壇:如何高效完成HarmonyOS分布式應(yīng)用測(cè)試?

    作者:liuxun,HarmonyOS測(cè)試架構(gòu)師HarmonyOS是新一代的智能終端操作系統(tǒng),給開發(fā)者提供了設(shè)備發(fā)現(xiàn)、設(shè)備連接、跨設(shè)備調(diào)用等豐富的分布式API。隨著越來越多的
    發(fā)表于 12-13 14:55

    如何高效完成HarmonyOS分布式應(yīng)用測(cè)試?

    作者:liuxun,HarmonyOS測(cè)試架構(gòu)師HarmonyOS是新一代的智能終端操作系統(tǒng),給開發(fā)者提供了設(shè)備發(fā)現(xiàn)、設(shè)備連接、跨設(shè)備調(diào)用等豐富的分布式API。隨著越來越多的
    發(fā)表于 12-13 18:07

    HarmonyOS應(yīng)用開發(fā)-EducationSystem分布式親子早教系統(tǒng)體驗(yàn)

    HarmonyOS應(yīng)用程序開發(fā),多屏協(xié)作交互和分布式跨設(shè)備傳輸?shù)慕?jīng)驗(yàn)。 ? 從項(xiàng)目創(chuàng)建、代碼編寫到編譯、構(gòu)造、部署和操作。二、效果圖:完整代碼地址:https://gitee.com/jltfcloudcn/jump_to/tr
    發(fā)表于 07-25 10:23

    HarmonyOS測(cè)試技術(shù)與實(shí)戰(zhàn)-HarmonyOS分布式應(yīng)用特征與挑戰(zhàn)

     HDC 2021華為開發(fā)者大會(huì)HarmonyOS測(cè)試技術(shù)與實(shí)戰(zhàn)-HarmonyOS分布式應(yīng)用特征與挑戰(zhàn)
    的頭像 發(fā)表于 10-23 14:41 ?1644次閱讀
    <b class='flag-5'>HarmonyOS</b>測(cè)試技術(shù)與實(shí)戰(zhàn)-<b class='flag-5'>HarmonyOS</b><b class='flag-5'>分布式</b>應(yīng)用特征與挑戰(zhàn)

    基于鴻蒙分布式數(shù)據(jù)服務(wù)開發(fā)的聊天室應(yīng)用

    ?? 之前給大家介紹過《HarmonyOS 分布式之仿抖音應(yīng)用》,此次給大家介紹一下基于鴻蒙分布式數(shù)據(jù)服務(wù)開發(fā)的聊天室應(yīng)用,模擬現(xiàn)實(shí)中的聊天
    的頭像 發(fā)表于 11-15 09:32 ?1752次閱讀

    基于鴻蒙分布式數(shù)據(jù)服務(wù)開發(fā)的聊天室應(yīng)用

    ?? 之前給大家介紹過《HarmonyOS 分布式之仿抖音應(yīng)用》,此次給大家介紹一下基于鴻蒙分布式數(shù)據(jù)服務(wù)開發(fā)的聊天室應(yīng)用,模擬現(xiàn)實(shí)中的聊天
    的頭像 發(fā)表于 12-03 10:35 ?7555次閱讀

    HarmonyOS分布式應(yīng)用上架問題分析

    HarmonyOS是新一代的智能終端操作系統(tǒng),給開發(fā)者提供了設(shè)備發(fā)現(xiàn)、設(shè)備連接、跨設(shè)備調(diào)用等豐富的分布式API。隨著越來越多的開發(fā)者投入到Harmo
    的頭像 發(fā)表于 12-24 17:56 ?1869次閱讀
    <b class='flag-5'>HarmonyOS</b><b class='flag-5'>分布式</b>應(yīng)用上架問題分析