分散式資料物件:超級終端的"全域性變數"
在3月底釋出的OpenHarmony v3.1 Release版本中,新增了分散式資料物件特性。什麼是分散式資料物件呢?本期就讓我們一起來了解一下~
一、背景介紹
OpenHarmony作為分散式作業系統,支援執行在不同的終端裝置上。這些終端裝置通過跨端遷移和多端協同等,可以為使用者提供豐富、流暢的全場景體驗。在這種分散式場景下,不同裝置之間需要進行資料互通來實現裝置間的配合。
下面先看兩個分散式場景的示例:
示例1:可觸屏和TV的協作
在TV/PAD上觀看視訊時,在可觸屏裝置上控制TV/PAD上的播放狀態、進度、音量和速度等,實現多端控制。
圖1 多端控制,解放裝置限制
示例2:詞典筆同步翻譯
使用詞典筆掃描書本內容,在手機/PAD上同步展示翻譯結果、內容連結、詞典、例句和音標等。
圖2 同步翻譯,學習不限小屏
要實現上面兩個示例的功能,首先必須實現裝置之間的資料同步。傳統方式下,裝置之間的資料同步,需要開發者完成訊息處理邏輯,包括:建立通訊連結、訊息收發處理、錯誤重試、資料衝突解決等操作,工作量非常大。而且裝置越多,除錯複雜度將呈指數增長。是否有更簡單的實現方式?經過分析,我們發現,示例中的播放狀態、進度、音量和速度等其實都是變數。如果這些變數支援“全域性”訪問,那麼開發者跨裝置訪問這些變數就能像操作本地變數一樣,資料就能夠自動高效、便捷地實現多端同步了。
為此,本次OpenHarmony v3.1 Release版本新增了分散式資料物件特性。分散式資料物件為開發者在分散式應用場景下提供簡單易用的JS介面,輕鬆實現多裝置間同應用的資料協同,同時裝置間可以監聽物件的狀態和資料變更。與傳統方式相比,分散式資料物件大大減少了開發者的工作量。
(為方便描述,後文中“分散式資料物件”也簡稱為“物件”。)
二、原理解析
這麼簡單高效的分散式資料物件技術具體如何實現的呢?讓我們來一一解析~
1. 物件的資料同步
分散式資料物件,最重要的功能就是物件之間的資料同步。可信組網內的裝置可以在本地建立分散式資料物件,並設定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開源專案,專案對應分散式資料庫倉庫地址:
後續倉庫還將陸續發出分散式資料物件的sample哦,敬請期待!
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69997629/viewspace-2888998/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- PHP 超級全域性變數PHP變數
- PHP超全域性變數$_SERVER分析PHP變數Server
- 一個超級簡單的PHP超全域性變數管理擴充套件PHP變數套件
- 全域性變數變數
- 全域性變數與區域性變數變數
- 區域性變數和全域性變數變數
- 全域性 DOM 變數變數
- 全域性DOM變數的坑變數
- Python中的全域性變數和區域性變數Python變數
- 分散式全域性唯一ID分散式
- Java區域性變數與全域性變數Java變數
- java 全域性變數和區域性變數Java變數
- jmeter全域性變數和區域性變數JMeter變數
- 【c】全域性變數與區域性變數變數
- vue3如何將 app 全域性變數物件變為響應式並監聽到某個屬性的改變VueAPP變數物件
- vue定義全域性變數和全域性方法Vue變數
- js-js的全域性變數和區域性變數JS變數
- js宣告全域性變數JS變數
- 十二、變數作用域:區域性變數、全域性變數,函式版名片管理系統—新增函式文件變數函式
- javascript全域性變數的使用注意JavaScript變數
- 分散式全域性ID生成方案分散式
- 分散式架構篇 | 如何在分散式架構下完美實現“全域性資料一致性”?分散式架構
- 函式之定義及全域性變數&區域性變數&風溼理論函式變數
- 破解分散式資料庫全域性死鎖難題 GBase 8c引領資料庫領域變革分散式資料庫
- javascript中的作用域(全域性變數和區域性變數)JavaScript變數
- JavaScript五:全域性變數&區域性變數;運算子JavaScript變數
- less 全域性變數使用 引用變數
- 【SQL Server】常用全域性變數SQLServer變數
- Python定義全域性變數的用法Python變數
- 如何在分散式架構下完美實現“全域性資料一致性”?分散式架構
- 框架篇:分散式全域性唯一ID框架分散式
- ? Hyperf 釋出 v1.1.14 版本 及 超全域性變數元件變數元件
- 成員變數、全域性變數、例項變數、類變數、靜態變數和區域性變數的區別變數
- mac配置全域性環境變數Mac變數
- process node.js全域性變數Node.js變數
- QT 全域性變數使用方法QT變數
- 聽說:分散式ID不能全域性遞增?分散式
- 變數的分類(臨時(本地)變數、環境變數、全域性變數和系統變數)變數