原標題:分布式數據對象:超級終端的"全局變量"
在3月底發布的OpenHarmony v3.1 Release版本中,新增了分布式數據對象特性。什么是分布式數據對象呢?本期就讓我們一起來了解一下。
一、背景介紹
OpenHarmony作為分布式操作系統,支持運行在不同的終端設備上。這些終端設備通過跨端遷移和多端協同等,可以為用戶提供豐富、流暢的全場景體驗。在這種分布式場景下,不同設備之間需要進行數據互通來實現設備間的配合。
下面先看兩個分布式場景的示例:
示例1:可觸屏和TV的協作
在TV/PAD上觀看視頻時,在可觸屏設備上控制TV/PAD上的播放狀態、進度、音量和速度等,實現多端控制。
圖1 多端控制,解放設備限制
示例2:詞典筆同步翻譯
使用詞典筆掃描書本內容,在手機/PAD上同步展示翻譯結果、內容鏈接、詞典、例句和音標等。
圖2 同步翻譯,學習不限小屏
要實現上面兩個示例的功能,首先必須實現設備之間的數據同步。傳統方式下,設備之間的數據同步,需要開發者完成消息處理邏輯,包括:建立通信鏈接、消息收發處理、錯誤重試、數據沖突解決等操作,工作量非常大。而且設備越多,調試復雜度將呈指數增長。是否有更簡單的實現方式?經過分析,我們發現,示例中的播放狀態、進度、音量和速度等其實都是變量。如果這些變量支持“全局”訪問,那么開發者跨設備訪問這些變量就能像操作本地變量一樣,數據就能夠自動高效、便捷地實現多端同步了。
為此,本次OpenHarmony v3.1 Release版本新增了分布式數據對象特性。分布式數據對象為開發者在分布式應用場景下提供簡單易用的JS接口,輕松實現多設備間同應用的數據協同,同時設備間可以監聽對象的狀態和數據變更。與傳統方式相比,分布式數據對象大大減少了開發者的工作量。
(為方便描述,后文中“分布式數據對象”也簡稱為“對象”。)
二、原理解析
這么簡單高效的分布式數據對象技術具體如何實現的呢?讓我們來一一解析~
1. 對象的數據同步
分布式數據對象,最重要的功能就是對象之間的數據同步??尚沤M網內的設備可以在本地創建分布式數據對象,并設置sessionID。不同設備上的分布式數據對象,通過設置相同的sessionID,建立對象之間的同步關系。
如圖3所示,設備A和設備B上的“分布式數據對象1”,其sessionID均為session1,這兩個對象建立了session1的同步關系。
圖3 對象的同步關系
一個同步關系中,一個設備只能有一個對象加入。比如圖3中,設備A的“分布式數據對象1”已經加入了session1的同步關系,所以,設備A的“分布式數據對象2”就加入失敗了。
建立同步關系后,每個session有一份共享對象數據。加入了同一個session的對象,支持以下操作:
(1)讀取/修改session中的數據。
(2)監聽數據變更,感知其他對象對共享對象數據的修改。
(3)監聽狀態變更,感知其他對象的加入和離開。
關于分布式數據對象的數據同步,值得注意的是,同步的最小單位是“屬性”。比如,圖4中對象1包含三個屬性:name、age和parents。當其中一個屬性變更時,則數據同步時只需同步此變更的屬性。
圖4 數據視圖
2. 對象的生命周期
接下來,我們從生命周期的角度來全面認識一下分布式數據對象。
圖5 生命周期
如圖5所示,對象包括三種狀態:未初始化、本地對象和分布式對象。這三種狀態說明如下:
圖6 對象的三種狀態
根據條件變化,對象在這三種狀態之間會來回切換:
最開始,對象處于未初始化狀態。實例化之后,對象就從未初始化狀態切換到本地對象狀態。給對象設置sessionID,收到對端設備對象上線通知后,此時可以跨設備同步數據了,對象就進入了分布式對象狀態。
本端或遠端設備下線,或者sessionID被清除,那么對象又切回本地對象狀態。分布式對象實例和對應的內存數據庫都保存在應用程序的進程空間,當應用程序退出后,分布式對象和內存數據庫也隨之銷毀,對象直接進入未初始化狀態。
三、開發約束及案例
經過上面的介紹,大家對分布式數據對象已經有了充分的了解了,下面就要介紹開發者們最關心的“怎么用”的問題了。
在使用分布式數據對象之前,我們先說明一下相關的開發約束:
1. 單個應用程序最多只能創建16個分布式數據對象實例。
2. 考慮到性能和用戶體驗,最多不超過3個設備進行數據協同。
3. 考慮到性能和用戶體驗,分布式數據對象大小限制在500KB以內。
4. 分布式數據對象的數據同步發生在同一個應用程序下,且同session ID之間。
接下來,我們通過一個簡單的開發案例來講解如何使用分布式數據對象。此案例中,設備A和設備B分別創建一個包含3個屬性的對象,這兩個對象加入到同一個session,建立同步關系。一個對象的屬性變更會自動同步到另一個對象,從而實現 “全局變量”效果。
通過此案例,我們能夠掌握分布式數據對象的基本操作,包括:
1. 創建對象
2. 設置sessionID
3. 設置監聽對象變更的回調
4. 監聽狀態變更
代碼示例如下:
1. 設備A的JS代碼示例:
本期,我們為大家講解了分布式數據對象的產生背景、原理及開發案例。如果你想體驗更詳細的分布式數據對象,歡迎加入OpenHarmony開源項目,項目對應分布式數據庫倉庫地址:
https://gitee.com/openharmony/distributeddatamgr_objectstore
后續倉庫還將陸續發出分布式數據對象的sample哦,敬請期待!
審核編輯:湯梓紅
-
操作系統
+關注
關注
37文章
6747瀏覽量
123202 -
分布式數據
+關注
關注
0文章
9瀏覽量
8921 -
OpenHarmony
+關注
關注
25文章
3665瀏覽量
16161
發布評論請先 登錄
相關推薦
評論