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

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

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

什么是分布式數(shù)據(jù)對象呢?

OpenAtom OpenHarmony ? 來源:OpenAtom OpenHarmony ? 作者:OpenAtom OpenHarmony ? 2022-06-07 09:23 ? 次閱讀

3月底發(fā)布的OpenAtom OpenHarmony(以下簡稱“OpenHarmony”)3.1 Release版本中,新增了分布式數(shù)據(jù)對象特性。什么是分布式數(shù)據(jù)對象呢?本期就讓我們一起來了解一下~

一、背景介紹

OpenHarmony 作為分布式操作系統(tǒng),支持運(yùn)行在不同的終端設(shè)備上。這些終端設(shè)備通過跨端遷移和多端協(xié)同等,可以為用戶提供豐富、流暢的全場景體驗(yàn)。在這種分布式場景下,不同設(shè)備之間需要進(jìn)行數(shù)據(jù)互通來實(shí)現(xiàn)設(shè)備間的配合。

下面先看以下這個(gè)分布式場景的示例:

示例:可觸屏和TV的協(xié)作

在 TV/PAD 上觀看視頻時(shí),在可觸屏設(shè)備上控制 TV/PAD 上的播放狀態(tài)、進(jìn)度、音量和速度等,實(shí)現(xiàn)多端控制。

0dde95e2-e59a-11ec-ba43-dac502259ad0.jpg

圖1 多端控制,解放設(shè)備限制

要實(shí)現(xiàn)上面這個(gè)示例的功能,首先必須實(shí)現(xiàn)設(shè)備之間的數(shù)據(jù)同步。傳統(tǒng)方式下,設(shè)備之間的數(shù)據(jù)同步,需要開發(fā)者完成消息處理邏輯,包括:建立通信鏈接、消息收發(fā)處理、錯(cuò)誤重試、數(shù)據(jù)沖突解決等操作,工作量非常大。而且設(shè)備越多,調(diào)試復(fù)雜度將呈指數(shù)增長。是否有更簡單的實(shí)現(xiàn)方式?經(jīng)過分析,我們發(fā)現(xiàn),示例中的播放狀態(tài)、進(jìn)度、音量和速度等其實(shí)都是變量。如果這些變量支持“全局”訪問,那么開發(fā)者跨設(shè)備訪問這些變量就能像操作本地變量一樣,數(shù)據(jù)就能夠自動高效、便捷地實(shí)現(xiàn)多端同步了。

為此,本次 OpenHarmony v3.1 Release 版本新增了分布式數(shù)據(jù)對象特性。分布式數(shù)據(jù)對象為開發(fā)者在分布式應(yīng)用場景下提供簡單易用的 JS 接口,輕松實(shí)現(xiàn)多設(shè)備間同應(yīng)用的數(shù)據(jù)協(xié)同,同時(shí)設(shè)備間可以監(jiān)聽對象的狀態(tài)和數(shù)據(jù)變更。與傳統(tǒng)方式相比,分布式數(shù)據(jù)對象大大減少了開發(fā)者的工作量。

(為方便描述,后文中“分布式數(shù)據(jù)對象”也簡稱為“對象”。)

二、原理解析

這么簡單高效的分布式數(shù)據(jù)對象技術(shù)具體如何實(shí)現(xiàn)的呢?讓我們來一一解析~

1.對象的數(shù)據(jù)同步

分布式數(shù)據(jù)對象,最重要的功能就是對象之間的數(shù)據(jù)同步??尚沤M網(wǎng)內(nèi)的設(shè)備可以在本地創(chuàng)建分布式數(shù)據(jù)對象,并設(shè)置 sessionID。不同設(shè)備上的分布式數(shù)據(jù)對象,通過設(shè)置相同的 sessionID,建立對象之間的同步關(guān)系。

如圖 3 所示,設(shè)備 A 和設(shè)備 B 上的“分布式數(shù)據(jù)對象1”,其 sessionID 均為 session1,這兩個(gè)對象建立了 session1 的同步關(guān)系。

0dfe75ec-e59a-11ec-ba43-dac502259ad0.png

圖2對象的同步關(guān)系

一個(gè)同步關(guān)系中,一個(gè)設(shè)備只能有一個(gè)對象加入。比如圖 3 中,設(shè)備 A 的“分布式數(shù)據(jù)對象 1”已經(jīng)加入了 session1 的同步關(guān)系,所以,設(shè)備 A 的“分布式數(shù)據(jù)對象 2”就加入失敗了。

建立同步關(guān)系后,每個(gè) session 有一份共享對象數(shù)據(jù)。加入了同一個(gè) session 的對象,支持以下操作:

(1)讀取/修改 session 中的數(shù)據(jù)。

(2)監(jiān)聽數(shù)據(jù)變更,感知其他對象對共享對象數(shù)據(jù)的修改。

(3)監(jiān)聽狀態(tài)變更,感知其他對象的加入和離開。

關(guān)于分布式數(shù)據(jù)對象的數(shù)據(jù)同步,值得注意的是,同步的最小單位是“屬性”。比如,圖 4 中對象 1 包含三個(gè)屬性:name、age 和 parents。當(dāng)其中一個(gè)屬性變更時(shí),則數(shù)據(jù)同步時(shí)只需同步此變更的屬性。

0e247940-e59a-11ec-ba43-dac502259ad0.png

圖3數(shù)據(jù)視圖

2.對象的生命周期

接下來,我們從生命周期的角度來全面認(rèn)識一下分布式數(shù)據(jù)對象。

0e6976a8-e59a-11ec-ba43-dac502259ad0.png

圖4生命周期

如圖 5 所示,對象包括三種狀態(tài):未初始化、本地對象和分布式對象。這三種狀態(tài)說明如下:

0e8dbe14-e59a-11ec-ba43-dac502259ad0.png

圖5對象的三種狀態(tài)

根據(jù)條件變化,對象在這三種狀態(tài)之間會來回切換:

最開始,對象處于未初始化狀態(tài)。實(shí)例化之后,對象就從未初始化狀態(tài)切換到本地對象狀態(tài)。給對象設(shè)置 sessionID,收到對端設(shè)備對象上線通知后,此時(shí)可以跨設(shè)備同步數(shù)據(jù)了,對象就進(jìn)入了分布式對象狀態(tài)。

本端或遠(yuǎn)端設(shè)備下線,或者 sessionID 被清除,那么對象又切回本地對象狀態(tài)。分布式對象實(shí)例和對應(yīng)的內(nèi)存數(shù)據(jù)庫都保存在應(yīng)用程序的進(jìn)程空間,當(dāng)應(yīng)用程序退出后,分布式對象和內(nèi)存數(shù)據(jù)庫也隨之銷毀,對象直接進(jìn)入未初始化狀態(tài)。

三、開發(fā)約束及案例

經(jīng)過上面的介紹,大家對分布式數(shù)據(jù)對象已經(jīng)有了充分的了解了,下面就要介紹開發(fā)者們最關(guān)心的“怎么用”的問題了。

在使用分布式數(shù)據(jù)對象之前,我們先說明一下相關(guān)的開發(fā)約束:

1. 單個(gè)應(yīng)用程序最多只能創(chuàng)建 16 個(gè)分布式數(shù)據(jù)對象實(shí)例。

2. 考慮到性能和用戶體驗(yàn),最多不超過 3 個(gè)設(shè)備進(jìn)行數(shù)據(jù)協(xié)同。

3. 考慮到性能和用戶體驗(yàn),分布式數(shù)據(jù)對象大小限制在 500KB 以內(nèi)。

4. 分布式數(shù)據(jù)對象的數(shù)據(jù)同步發(fā)生在同一個(gè)應(yīng)用程序下,且同 session ID 之間。

接下來,我們通過一個(gè)簡單的開發(fā)案例來講解如何使用分布式數(shù)據(jù)對象。此案例中,設(shè)備 A 和設(shè)備 B 分別創(chuàng)建一個(gè)包含 3 個(gè)屬性的對象,這兩個(gè)對象加入到同一個(gè) session,建立同步關(guān)系。一個(gè)對象的屬性變更會自動同步到另一個(gè)對象,從而實(shí)現(xiàn)“全局變量”效果。

通過此案例,我們能夠掌握分布式數(shù)據(jù)對象的基本操作,包括:

1. 創(chuàng)建對象

2. 設(shè)置 sessionID

3. 設(shè)置監(jiān)聽對象變更的回調(diào)

4. 監(jiān)聽狀態(tài)變更

代碼示例如下:

1. 設(shè)備 A 的 JS 代碼示例:



		

import distributedObject from '@ohos.data.distributedDataObject'//創(chuàng)建對象,對象包含三個(gè)屬性:name、age和isVisvar g_object = distributedObject.createDistributedObject({name:"Amy", age:18, isVis:false});//設(shè)置sessionID為“123456”g_object.setSessionId("123456"); //設(shè)置監(jiān)聽對象變更的回調(diào)changeCallback : function (sessionId, changeData) { if (changeData != null && changeData != undefined) { changeData.forEach(element => { console.info("changed !" + element + " " + g_object[element]); }); }} g_object.on("change",this.changeCallback);

2. 設(shè)備 B 的 JS 代碼示例:




		

//創(chuàng)建對象,對象包含三個(gè)屬性:name、age和isVisvar g_object = distributedObject.createDistributedObject({name:"Amy", age:undefined, isVis:false});//設(shè)置sessionID為“123456”,這個(gè)session里已經(jīng)有設(shè)備A的對象g_object.setSessionId("123456"); //監(jiān)聽狀態(tài)變更statusCallback : function (sessionId, networkid, status) {//成功加入session并檢測到設(shè)備A上線if (status == "online" && networkid == networkid_A) {//此時(shí)設(shè)備A的age值是18,而本地age值是undefined,通過console.info自動同步設(shè)備A的age數(shù)據(jù)到本地。如果想使用本地?cái)?shù)據(jù),可以把a(bǔ)ge初始值改為有效值,像name一樣。 console.info ("age = {g_object.age}"); g_object.name = "jack"; //此時(shí)設(shè)備A的changeCallback收到對象變更的回調(diào),打印出“changed !name jack”。//后續(xù)使用g_object.做的屬性修改都會自動同步給設(shè)備A,同時(shí)g_object.屬性訪問的數(shù)據(jù)都是session中的最新數(shù)據(jù)(也包括設(shè)備A上的修改)。設(shè)備A和B相當(dāng)于使用同一個(gè)全局變量g_object。 }}g_object.on("status",this.statusCallback);

本期,我們?yōu)榇蠹抑v解了分布式數(shù)據(jù)對象的產(chǎn)生背景、原理及開發(fā)案例。如果你想體驗(yàn)更詳細(xì)的分布式數(shù)據(jù)對象,歡迎加入 OpenHarmony 開源項(xiàng)目,項(xiàng)目對應(yīng)分布式數(shù)據(jù)庫倉庫地址:

https://gitee.com/openharmony/distributeddatamgr_objectstore

后續(xù)倉庫還將陸續(xù)發(fā)出分布式數(shù)據(jù)對象的 sample 哦,敬請期待!

審核編輯 :李倩


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

    關(guān)注

    0

    文章

    9

    瀏覽量

    8907
  • OpenHarmony
    +關(guān)注

    關(guān)注

    25

    文章

    3550

    瀏覽量

    15749

原文標(biāo)題:分布式數(shù)據(jù)對象:超級終端的"全局變量"

文章出處:【微信號:gh_e4f28cfa3159,微信公眾號:OpenAtom OpenHarmony】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    基于分布式對象存儲WDS的信托非結(jié)構(gòu)化數(shù)據(jù)整合平臺

    基于分布式對象存儲WDS的信托非結(jié)構(gòu)化數(shù)據(jù)整合平臺
    的頭像 發(fā)表于 08-28 09:56 ?147次閱讀
    基于<b class='flag-5'>分布式</b><b class='flag-5'>對象</b>存儲WDS的信托非結(jié)構(gòu)化<b class='flag-5'>數(shù)據(jù)</b>整合平臺

    鴻蒙開發(fā)管理:ohos.account.distributedAccount 分布式帳號管理

    獲取分布式帳號單實(shí)例對象。
    的頭像 發(fā)表于 07-08 10:03 ?165次閱讀
    鴻蒙開發(fā)管理:ohos.account.distributedAccount <b class='flag-5'>分布式</b>帳號管理

    鴻蒙開發(fā)接口數(shù)據(jù)管理:【@ohos.data.distributedDataObject (分布式數(shù)據(jù)對象)】

    本模塊提供管理基本數(shù)據(jù)對象的相關(guān)能力,包括創(chuàng)建、查詢、刪除、修改、訂閱等;同時(shí)支持相同應(yīng)用多設(shè)備間的分布式數(shù)據(jù)對象協(xié)同能力。
    的頭像 發(fā)表于 06-07 17:51 ?1295次閱讀
    鴻蒙開發(fā)接口<b class='flag-5'>數(shù)據(jù)</b>管理:【@ohos.data.distributedDataObject (<b class='flag-5'>分布式</b><b class='flag-5'>數(shù)據(jù)</b><b class='flag-5'>對象</b>)】

    鴻蒙開發(fā)接口數(shù)據(jù)管理:【@ohos.data.distributedData (分布式數(shù)據(jù)管理)】

    分布式數(shù)據(jù)管理為應(yīng)用程序提供不同設(shè)備間數(shù)據(jù)庫的分布式協(xié)同能力。通過調(diào)用分布式數(shù)據(jù)各個(gè)接口,應(yīng)用程
    的頭像 發(fā)表于 06-07 09:30 ?722次閱讀
    鴻蒙開發(fā)接口<b class='flag-5'>數(shù)據(jù)</b>管理:【@ohos.data.distributedData (<b class='flag-5'>分布式</b><b class='flag-5'>數(shù)據(jù)</b>管理)】

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

    分布式數(shù)據(jù)服務(wù)(Distributed Data Service,DDS)為應(yīng)用程序提供不同設(shè)備間數(shù)據(jù)分布式的能力。
    的頭像 發(fā)表于 04-18 10:18 ?559次閱讀
    HarmonyOS開發(fā)實(shí)例:【<b class='flag-5'>分布式</b><b class='flag-5'>數(shù)據(jù)</b>服務(wù)】

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

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

    什么是分布式架構(gòu)?

    1.獨(dú)立性:分布式架構(gòu)中的各個(gè)節(jié)點(diǎn)是獨(dú)立運(yùn)行的,它們沒有依賴關(guān)系,可以單獨(dú)進(jìn)行升級、維護(hù)和擴(kuò)展。 2.通信性:分布式架構(gòu)中的各個(gè)節(jié)點(diǎn)通過網(wǎng)絡(luò)連接進(jìn)行通信和協(xié)作,以實(shí)現(xiàn)數(shù)據(jù)的傳輸和共享。 3.負(fù)載均衡:
    的頭像 發(fā)表于 01-12 15:04 ?985次閱讀
    什么是<b class='flag-5'>分布式</b>架構(gòu)?

    分布式IO工業(yè)自動化數(shù)據(jù)采集與分析的核心

    工業(yè)自動化生產(chǎn)的效率。在傳統(tǒng)的工業(yè)自動化生產(chǎn)中,設(shè)備的控制和監(jiān)測通常采用集中式控制方式,這種方式存在著設(shè)備連接復(fù)雜、數(shù)據(jù)傳輸速度慢、故障率高和擴(kuò)展性差等問題。而分布式IO采用分布式控制方式,將設(shè)備按照
    發(fā)表于 12-28 14:47

    鴻蒙原生應(yīng)用開發(fā)——分布式數(shù)據(jù)對象

    01、什么是分布式數(shù)據(jù)對象 在可信組網(wǎng)環(huán)境下,多個(gè)相互組網(wǎng)認(rèn)證的設(shè)備將各自創(chuàng)建的對象加入同一個(gè) sessionId,使得加入的多個(gè)數(shù)據(jù)
    發(fā)表于 12-08 10:01

    分布式系統(tǒng)硬件資源池原理和接入實(shí)踐

    的使用習(xí)慣;手機(jī)導(dǎo)航接續(xù)到車機(jī)后,車機(jī)的 GPS 信號可以共享給手機(jī),結(jié)合手機(jī) GPS 信號提供更高精度的定位數(shù)據(jù);可以看到,在智慧出行場景中,可以通過分布式硬件資源池結(jié)合手機(jī)和車機(jī)的優(yōu)勢硬件,為用戶
    發(fā)表于 12-06 10:02

    zookeeper分布式原理

    是提供一個(gè)高可用的、一致性的機(jī)制,用于解決分布式系統(tǒng)中常見的一致性問題,比如Leader選舉、分布式鎖等。在本文中,我們將詳細(xì)介紹Zookeeper的原理和工作機(jī)制。 數(shù)據(jù)模型 Zookeeper的
    的頭像 發(fā)表于 12-03 16:33 ?519次閱讀

    分布式數(shù)據(jù)恢復(fù)-hbase+hive分布式存儲誤刪除文件的數(shù)據(jù)恢復(fù)方案

    hbase+hive分布式存儲數(shù)據(jù)恢復(fù)環(huán)境: 16臺某品牌R730XD服務(wù)器節(jié)點(diǎn),每臺物理服務(wù)器節(jié)點(diǎn)上有數(shù)臺虛擬機(jī),虛擬機(jī)上配置的分布式,上層部署hbase數(shù)據(jù)庫+hive
    的頭像 發(fā)表于 11-24 15:55 ?333次閱讀

    springclould分布式教程

    Spring Cloud是一個(gè)基于Spring Boot的分布式系統(tǒng)開發(fā)工具,它提供了一系列的分布式系統(tǒng)解決方案,可以幫助開發(fā)者快速構(gòu)建和部署分布式應(yīng)用程序。本文將介紹Spring Cloud
    的頭像 發(fā)表于 11-16 10:59 ?384次閱讀

    tldb提供分布式鎖使用方法

    前言:分布式鎖是分布式系統(tǒng)中一個(gè)極為重要的工具。目前有多種分布式鎖的設(shè)計(jì)方案,比如借助 redis,mq,數(shù)據(jù)庫,zookeeper 等第三方服務(wù)系統(tǒng)來設(shè)計(jì)
    的頭像 發(fā)表于 11-02 14:44 ?780次閱讀
    tldb提供<b class='flag-5'>分布式</b>鎖使用方法

    分布式文件系統(tǒng)的設(shè)計(jì)原理是什么?

    什么是分布式文件系統(tǒng)?分布式文件系統(tǒng)(DFS)是一種計(jì)算機(jī)文件系統(tǒng),使用戶能夠從多個(gè)分布式位置存儲和訪問數(shù)據(jù)。它是在分布式環(huán)境中的不同計(jì)算機(jī)
    的頭像 發(fā)表于 10-17 17:35 ?686次閱讀