原標題:分布式數(shù)據(jù)對象:超級終端的"全局變量"
在3月底發(fā)布的OpenHarmony v3.1 Release版本中,新增了分布式數(shù)據(jù)對象特性。什么是分布式數(shù)據(jù)對象呢?本期就讓我們一起來了解一下。
一、背景介紹
OpenHarmony作為分布式操作系統(tǒng),支持運行在不同的終端設(shè)備上。這些終端設(shè)備通過跨端遷移和多端協(xié)同等,可以為用戶提供豐富、流暢的全場景體驗。在這種分布式場景下,不同設(shè)備之間需要進行數(shù)據(jù)互通來實現(xiàn)設(shè)備間的配合。
下面先看兩個分布式場景的示例:
示例1:可觸屏和TV的協(xié)作
在TV/PAD上觀看視頻時,在可觸屏設(shè)備上控制TV/PAD上的播放狀態(tài)、進度、音量和速度等,實現(xiàn)多端控制。
![pYYBAGJo6lCAZQOyAAFHY0dggic470.png](https://file.elecfans.com//web2/M00/3F/9B/pYYBAGJo6lCAZQOyAAFHY0dggic470.png)
圖1 多端控制,解放設(shè)備限制
示例2:詞典筆同步翻譯
使用詞典筆掃描書本內(nèi)容,在手機/PAD上同步展示翻譯結(jié)果、內(nèi)容鏈接、詞典、例句和音標等。
![poYBAGJo6lCAVPQsAACdAP9Evc8276.png](https://file.elecfans.com//web2/M00/3F/96/poYBAGJo6lCAVPQsAACdAP9Evc8276.png)
圖2 同步翻譯,學(xué)習(xí)不限小屏
要實現(xiàn)上面兩個示例的功能,首先必須實現(xiàn)設(shè)備之間的數(shù)據(jù)同步。傳統(tǒng)方式下,設(shè)備之間的數(shù)據(jù)同步,需要開發(fā)者完成消息處理邏輯,包括:建立通信鏈接、消息收發(fā)處理、錯誤重試、數(shù)據(jù)沖突解決等操作,工作量非常大。而且設(shè)備越多,調(diào)試復(fù)雜度將呈指數(shù)增長。是否有更簡單的實現(xiàn)方式?經(jīng)過分析,我們發(fā)現(xiàn),示例中的播放狀態(tài)、進度、音量和速度等其實都是變量。如果這些變量支持“全局”訪問,那么開發(fā)者跨設(shè)備訪問這些變量就能像操作本地變量一樣,數(shù)據(jù)就能夠自動高效、便捷地實現(xiàn)多端同步了。
為此,本次OpenHarmony v3.1 Release版本新增了分布式數(shù)據(jù)對象特性。分布式數(shù)據(jù)對象為開發(fā)者在分布式應(yīng)用場景下提供簡單易用的JS接口,輕松實現(xiàn)多設(shè)備間同應(yīng)用的數(shù)據(jù)協(xié)同,同時設(shè)備間可以監(jiān)聽對象的狀態(tài)和數(shù)據(jù)變更。與傳統(tǒng)方式相比,分布式數(shù)據(jù)對象大大減少了開發(fā)者的工作量。
(為方便描述,后文中“分布式數(shù)據(jù)對象”也簡稱為“對象”。)
二、原理解析
這么簡單高效的分布式數(shù)據(jù)對象技術(shù)具體如何實現(xiàn)的呢?讓我們來一一解析~
1. 對象的數(shù)據(jù)同步
分布式數(shù)據(jù)對象,最重要的功能就是對象之間的數(shù)據(jù)同步。可信組網(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,這兩個對象建立了session1的同步關(guān)系。
![pYYBAGJo6lCASuZ3AAAs8wf0xhg220.png](https://file.elecfans.com//web2/M00/3F/9B/pYYBAGJo6lCASuZ3AAAs8wf0xhg220.png)
圖3 對象的同步關(guān)系
一個同步關(guān)系中,一個設(shè)備只能有一個對象加入。比如圖3中,設(shè)備A的“分布式數(shù)據(jù)對象1”已經(jīng)加入了session1的同步關(guān)系,所以,設(shè)備A的“分布式數(shù)據(jù)對象2”就加入失敗了。
建立同步關(guān)系后,每個session有一份共享對象數(shù)據(jù)。加入了同一個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包含三個屬性:name、age和parents。當(dāng)其中一個屬性變更時,則數(shù)據(jù)同步時只需同步此變更的屬性。
![poYBAGJo6lGAAGSxAAA5V0ogv58182.png](https://file.elecfans.com//web2/M00/3F/96/poYBAGJo6lGAAGSxAAA5V0ogv58182.png)
圖4 數(shù)據(jù)視圖
2. 對象的生命周期
接下來,我們從生命周期的角度來全面認識一下分布式數(shù)據(jù)對象。
![pYYBAGJo6lGAM71LAAAiZAT8rvE420.png](https://file.elecfans.com//web2/M00/3F/9B/pYYBAGJo6lGAM71LAAAiZAT8rvE420.png)
圖5 生命周期
如圖5所示,對象包括三種狀態(tài):未初始化、本地對象和分布式對象。這三種狀態(tài)說明如下:
![poYBAGJo6lGADgx6AAA2nAf5wUA491.png](https://file.elecfans.com//web2/M00/3F/96/poYBAGJo6lGADgx6AAA2nAf5wUA491.png)
圖6 對象的三種狀態(tài)
根據(jù)條件變化,對象在這三種狀態(tài)之間會來回切換:
最開始,對象處于未初始化狀態(tài)。實例化之后,對象就從未初始化狀態(tài)切換到本地對象狀態(tài)。給對象設(shè)置sessionID,收到對端設(shè)備對象上線通知后,此時可以跨設(shè)備同步數(shù)據(jù)了,對象就進入了分布式對象狀態(tài)。
本端或遠端設(shè)備下線,或者sessionID被清除,那么對象又切回本地對象狀態(tài)。分布式對象實例和對應(yīng)的內(nèi)存數(shù)據(jù)庫都保存在應(yīng)用程序的進程空間,當(dāng)應(yīng)用程序退出后,分布式對象和內(nèi)存數(shù)據(jù)庫也隨之銷毀,對象直接進入未初始化狀態(tài)。
三、開發(fā)約束及案例
經(jīng)過上面的介紹,大家對分布式數(shù)據(jù)對象已經(jīng)有了充分的了解了,下面就要介紹開發(fā)者們最關(guān)心的“怎么用”的問題了。
在使用分布式數(shù)據(jù)對象之前,我們先說明一下相關(guān)的開發(fā)約束:
1. 單個應(yīng)用程序最多只能創(chuàng)建16個分布式數(shù)據(jù)對象實例。
2. 考慮到性能和用戶體驗,最多不超過3個設(shè)備進行數(shù)據(jù)協(xié)同。
3. 考慮到性能和用戶體驗,分布式數(shù)據(jù)對象大小限制在500KB以內(nèi)。
4. 分布式數(shù)據(jù)對象的數(shù)據(jù)同步發(fā)生在同一個應(yīng)用程序下,且同session ID之間。
接下來,我們通過一個簡單的開發(fā)案例來講解如何使用分布式數(shù)據(jù)對象。此案例中,設(shè)備A和設(shè)備B分別創(chuàng)建一個包含3個屬性的對象,這兩個對象加入到同一個session,建立同步關(guān)系。一個對象的屬性變更會自動同步到另一個對象,從而實現(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代碼示例:
![pYYBAGJo6lGAbgUSAAD7YzZdNcQ371.png](https://file.elecfans.com//web2/M00/3F/9B/pYYBAGJo6lGAbgUSAAD7YzZdNcQ371.png)
本期,我們?yōu)榇蠹抑v解了分布式數(shù)據(jù)對象的產(chǎn)生背景、原理及開發(fā)案例。如果你想體驗更詳細的分布式數(shù)據(jù)對象,歡迎加入OpenHarmony開源項目,項目對應(yīng)分布式數(shù)據(jù)庫倉庫地址:
https://gitee.com/openharmony/distributeddatamgr_objectstore
后續(xù)倉庫還將陸續(xù)發(fā)出分布式數(shù)據(jù)對象的sample哦,敬請期待!
審核編輯:湯梓紅
-
操作系統(tǒng)
+關(guān)注
關(guān)注
37文章
6895瀏覽量
123745 -
分布式數(shù)據(jù)
+關(guān)注
關(guān)注
0文章
9瀏覽量
8947 -
OpenHarmony
+關(guān)注
關(guān)注
25文章
3747瀏覽量
16582
發(fā)布評論請先 登錄
相關(guān)推薦
分布式云化數(shù)據(jù)庫有哪些類型
HarmonyOS Next 應(yīng)用元服務(wù)開發(fā)-分布式數(shù)據(jù)對象遷移數(shù)據(jù)文件資產(chǎn)遷移
HarmonyOS Next 應(yīng)用元服務(wù)開發(fā)-分布式數(shù)據(jù)對象遷移數(shù)據(jù)權(quán)限與基礎(chǔ)數(shù)據(jù)
基于Openharmony輕量級操作系統(tǒng)的分布式數(shù)據(jù)管理開發(fā)案例
![基于Openharmony輕量級操作系統(tǒng)的<b class='flag-5'>分布式</b><b class='flag-5'>數(shù)據(jù)</b>管理<b class='flag-5'>開發(fā)案</b>例](https://file.elecfans.com/web2/M00/26/21/pYYBAGG5jjSALfrEAAAwAa9Oig8799.png)
鴻蒙開發(fā)接口數(shù)據(jù)管理:【@ohos.data.distributedDataObject (分布式數(shù)據(jù)對象)】
![鴻蒙<b class='flag-5'>開發(fā)</b>接口<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>)】](https://file1.elecfans.com/web2/M00/C6/E9/wKgaomYEK1aAOyTeAADysXFhWs8242.png)
鴻蒙開發(fā)接口數(shù)據(jù)管理:【@ohos.data.distributedData (分布式數(shù)據(jù)管理)】
![鴻蒙<b class='flag-5'>開發(fā)</b>接口<b class='flag-5'>數(shù)據(jù)</b>管理:【@ohos.data.distributedData (<b class='flag-5'>分布式</b><b class='flag-5'>數(shù)據(jù)</b>管理)】](https://file1.elecfans.com/web2/M00/ED/44/wKgaomZiYtqAeD3lAABQ0iJCe48630.png)
HarmonyOS開發(fā)實例:【分布式數(shù)據(jù)服務(wù)】
![HarmonyOS<b class='flag-5'>開發(fā)</b>實例:【<b class='flag-5'>分布式</b><b class='flag-5'>數(shù)據(jù)</b>服務(wù)】](https://file1.elecfans.com/web2/M00/CB/BB/wKgZomYf05KAaQOzAHd_wnoGpFw134.jpg)
HarmonyOS實戰(zhàn)案例:【分布式賬本】
![HarmonyOS實戰(zhàn)案例:【<b class='flag-5'>分布式</b>賬本】](https://file1.elecfans.com/web2/M00/C8/24/wKgZomYY8OKANfjsAAMAVHBzWLM112.jpg)
OpenHarmony南向開發(fā)案例:【分布式畫板】
![OpenHarmony南向<b class='flag-5'>開發(fā)案</b>例:【<b class='flag-5'>分布式</b>畫板】](https://file1.elecfans.com/web2/M00/C8/01/wKgZomYX7ECAEPWcAAaI_H_y4DI580.jpg)
OpenHarmony開發(fā)案例:【分布式計算器】
![OpenHarmony<b class='flag-5'>開發(fā)案</b>例:【<b class='flag-5'>分布式</b>計算器】](https://file1.elecfans.com/web2/M00/C7/F0/wKgZomYXinqAQ7GMAAB_86-HayM561.png)
HarmonyOS開發(fā)實例:【分布式數(shù)據(jù)管理】
![HarmonyOS<b class='flag-5'>開發(fā)</b>實例:【<b class='flag-5'>分布式</b><b class='flag-5'>數(shù)據(jù)</b>管理】](https://file1.elecfans.com/web2/M00/C7/D5/wKgZomYWiGyAc9TVAADfQBhprsg071.png)
評論