HarmonyOS之数据管理·分布式数据服务的应用
生活随笔
收集整理的這篇文章主要介紹了
HarmonyOS之数据管理·分布式数据服务的应用
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
一、簡介
① 基本概念
- 分布式數(shù)據(jù)服務(wù)(Distributed Data Service,DDS) 為應(yīng)用程序提供不同設(shè)備間數(shù)據(jù)庫數(shù)據(jù)分布式的能力。通過調(diào)用分布式數(shù)據(jù)接口,應(yīng)用程序?qū)?shù)據(jù)保存到分布式數(shù)據(jù)庫中。通過結(jié)合帳號、應(yīng)用和數(shù)據(jù)庫三元組,分布式數(shù)據(jù)服務(wù)對屬于不同的應(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)。
- KV 數(shù)據(jù)模型:
-
- “KV數(shù)據(jù)模型”是“Key-Value數(shù)據(jù)模型”的簡稱,“Key-Value”即“鍵-值”。它是一種 NoSQL 類型數(shù)據(jù)庫,其數(shù)據(jù)以鍵值對的形式進(jìn)行組織、索引和存儲。
-
- KV 數(shù)據(jù)模型適合不涉及過多數(shù)據(jù)關(guān)系和業(yè)務(wù)關(guān)系的業(yè)務(wù)數(shù)據(jù)存儲,比 SQL 數(shù)據(jù)庫存儲擁有更好的讀寫性能,同時因在分布式場景中降低了數(shù)據(jù)庫版本兼容和數(shù)據(jù)同步過程中沖突解決的復(fù)雜度而被廣泛使用。分布式數(shù)據(jù)庫也是基于 KV 數(shù)據(jù)模型,對外提供 KV 類型的訪問接口。
- 分布式數(shù)據(jù)庫事務(wù)性:分布式數(shù)據(jù)庫事務(wù)支持本地事務(wù)(和傳統(tǒng)數(shù)據(jù)庫的事務(wù)概念一致)和同步事務(wù),同步事務(wù)是指在設(shè)備之間同步數(shù)據(jù)時,是以本地事務(wù)為單位進(jìn)行同步,一次本地事務(wù)的修改要么都同步成功,要么都同步失敗。
- 分布式數(shù)據(jù)庫一致性:在分布式場景中一般會涉及多個設(shè)備,組網(wǎng)內(nèi)設(shè)備之間看到的數(shù)據(jù)是否一致稱為分布式數(shù)據(jù)庫的一致性。分布式數(shù)據(jù)庫一致性可以分為強(qiáng)一致性、弱一致性和最終一致性。
-
- 強(qiáng)一致性:是指某一設(shè)備成功增、刪、改數(shù)據(jù)后,組網(wǎng)內(nèi)設(shè)備對該數(shù)據(jù)的讀取操作都將得到更新后的值。
-
- 弱一致性:是指某一設(shè)備成功增、刪、改數(shù)據(jù)后,組網(wǎng)內(nèi)設(shè)備可能能讀取到本次更新數(shù)據(jù),也可能讀取不到,不能保證在多長時間后每個設(shè)備的數(shù)據(jù)一定是一致的。
-
- 最終一致性:是指某一設(shè)備成功增、刪、改數(shù)據(jù)后,組網(wǎng)內(nèi)設(shè)備可能讀取不到本次更新數(shù)據(jù),但在某個時間窗口之后組網(wǎng)內(nèi)設(shè)備的數(shù)據(jù)能夠達(dá)到一致狀態(tài)。
-
- 強(qiáng)一致性對分布式數(shù)據(jù)的管理要求非常高,在服務(wù)器的分布式場景可能會遇到。因?yàn)橐苿咏K端設(shè)備的不常在線、以及無中心的特性,分布式數(shù)據(jù)服務(wù)不支持強(qiáng)一致,只支持最終一致性。
- 分布式數(shù)據(jù)庫同步
-
- 底層通信組件完成設(shè)備發(fā)現(xiàn)和認(rèn)證,會通知上層應(yīng)用程序(包括分布式數(shù)據(jù)服務(wù))設(shè)備上線。收到設(shè)備上線的消息后分布式數(shù)據(jù)服務(wù)可以在兩個設(shè)備之間建立加密的數(shù)據(jù)傳輸通道,利用該通道在兩個設(shè)備之間進(jìn)行數(shù)據(jù)同步。
-
- 分布式數(shù)據(jù)服務(wù)提供了兩種同步模式:手動同步和自動同步模式。手動同步模式完全由應(yīng)用程序調(diào)用接口來觸發(fā),并且支持指定同步的設(shè)備列表和同步模式(PULL、 PUSH 和 PULL_PUSH 三種同步模式)。自動同步模式由分布式數(shù)據(jù)庫來完成數(shù)據(jù)同步(同步時機(jī)包括設(shè)備上線、應(yīng)用程序修改數(shù)據(jù)等),業(yè)務(wù)不感知同步操作。
- 單版本分布式數(shù)據(jù)庫:單版本是指數(shù)據(jù)在本地保存是以單個 KV 條目為單位的方式保存,對每個 Key 最多只保存一個條目項,當(dāng)數(shù)據(jù)在本地被用戶修改時,不管它是否已經(jīng)被同步出去,均直接在這個條目上進(jìn)行修改。同步也以此為基礎(chǔ),按照它在本地被寫入或更改的順序?qū)?dāng)前最新一次修改逐條同步至遠(yuǎn)端設(shè)備。
- 設(shè)備協(xié)同分布式數(shù)據(jù)庫:設(shè)備協(xié)同分布式數(shù)據(jù)庫建立在單版本分布式數(shù)據(jù)庫之上,對應(yīng)用程序存入的 KV 數(shù)據(jù)中的 Key 前面拼接了本設(shè)備的 DeviceID 標(biāo)識符,這樣能保證每個設(shè)備產(chǎn)生的數(shù)據(jù)嚴(yán)格隔離,底層按照設(shè)備的維度管理這些數(shù)據(jù),設(shè)備協(xié)同分布式數(shù)據(jù)庫支持以設(shè)備的維度查詢分布式數(shù)據(jù),但是不支持修改遠(yuǎn)端設(shè)備同步過來的數(shù)據(jù)。
- 分布式數(shù)據(jù)庫沖突解決策略:分布式數(shù)據(jù)庫多設(shè)備提交沖突場景,在給提交沖突做合并的過程中,如果多個設(shè)備同時修改了同一數(shù)據(jù),則稱這種場景為數(shù)據(jù)沖突。數(shù)據(jù)沖突采用默認(rèn)沖突解決策略,基于提交時間戳,取時間戳較大的提交數(shù)據(jù),當(dāng)前不支持定制沖突解決策略。
- 數(shù)據(jù)庫 Schema 化管理與謂詞查詢:單版本數(shù)據(jù)庫支持在創(chuàng)建和打開數(shù)據(jù)庫時指定Schema,數(shù)據(jù)庫根據(jù) Schema 定義感知 KV 記錄的 Value 格式,以實(shí)現(xiàn)對 Value 值結(jié)構(gòu)的檢查,并基于 Value 中的字段實(shí)現(xiàn)索引建立和支持謂詞查詢。
- 分布式數(shù)據(jù)庫備份能力:提供分布式數(shù)據(jù)庫備份能力,業(yè)務(wù)通過設(shè)置 backup 屬性為 true,可以觸發(fā)分布式數(shù)據(jù)服務(wù)每日備份。當(dāng)分布式數(shù)據(jù)庫發(fā)生損壞,分布式數(shù)據(jù)服務(wù)會刪除損壞數(shù)據(jù)庫,并且從備份數(shù)據(jù)庫中恢復(fù)上次備份的數(shù)據(jù)。如果不存在備份數(shù)據(jù)庫,則創(chuàng)建一個新的數(shù)據(jù)庫。同時支持加密數(shù)據(jù)庫的備份能力。
② 運(yùn)作機(jī)制
- 分布式數(shù)據(jù)服務(wù)支撐 HarmonyOS 系統(tǒng)上應(yīng)用程序數(shù)據(jù)庫數(shù)據(jù)分布式管理,支持?jǐn)?shù)據(jù)在相同帳號的多端設(shè)備之間相互同步,為用戶在多端設(shè)備上提供一致的用戶體驗(yàn),分布式數(shù)據(jù)服務(wù)包含五部分:
-
- 服務(wù)接口:分布式數(shù)據(jù)服務(wù)提供專門的數(shù)據(jù)庫創(chuàng)建、數(shù)據(jù)訪問、數(shù)據(jù)訂閱等接口給應(yīng)用程序調(diào)用,接口支持 KV 數(shù)據(jù)模型,支持常用的數(shù)據(jù)類型,同時確保接口的兼容性、易用性和可發(fā)布性。
-
- 服務(wù)組件:服務(wù)組件負(fù)責(zé)服務(wù)內(nèi)元數(shù)據(jù)管理、權(quán)限管理、加密管理、備份和恢復(fù)管理以及多用戶管理等、同時負(fù)責(zé)初始化底層分布式 DB 的存儲組件、同步組件和通信適配層。
-
- 存儲組件:存儲組件負(fù)責(zé)數(shù)據(jù)的訪問、數(shù)據(jù)的縮減、事務(wù)、快照、數(shù)據(jù)庫加密,以及數(shù)據(jù)合并和沖突解決等特性。
-
- 同步組件:同步組件連結(jié)了存儲組件與通信組件,其目標(biāo)是保持在線設(shè)備間的數(shù)據(jù)庫數(shù)據(jù)一致性,包括將本地產(chǎn)生的未同步數(shù)據(jù)同步給其他設(shè)備,接收來自其他設(shè)備發(fā)送過來的數(shù)據(jù),并合并到本地設(shè)備中。
-
- 通信適配層:通信適配層負(fù)責(zé)調(diào)用底層公共通信層的接口完成通信管道的創(chuàng)建、連接,接收設(shè)備上下線消息,維護(hù)已連接和斷開設(shè)備列表的元數(shù)據(jù),同時將設(shè)備上下線信息發(fā)送給上層同步組件,同步組件維護(hù)連接的設(shè)備列表,同步數(shù)據(jù)時根據(jù)該列表,調(diào)用通信適配層的接口將數(shù)據(jù)封裝并發(fā)送給連接的設(shè)備。
- 應(yīng)用程序通過調(diào)用分布式數(shù)據(jù)服務(wù)接口實(shí)現(xiàn)分布式數(shù)據(jù)庫創(chuàng)建、訪問、訂閱功能,服務(wù)接口通過操作服務(wù)組件提供的能力,將數(shù)據(jù)存儲至存儲組件,存儲組件調(diào)用同步組件實(shí)現(xiàn)將數(shù)據(jù)同步,同步組件使用通信適配層將數(shù)據(jù)同步至遠(yuǎn)端設(shè)備,遠(yuǎn)端設(shè)備通過同步組件接收數(shù)據(jù),并更新至本端存儲組件,通過服務(wù)接口提供給應(yīng)用程序使用。
- 數(shù)據(jù)分布式運(yùn)作示意圖如下:
③ 使用限制
- 應(yīng)用程序如需使用分布式數(shù)據(jù)服務(wù)完整功能,需要申請 ohos.permission.DISTRIBUTED_DATASYNC 權(quán)限。
- 分布式數(shù)據(jù)服務(wù)的數(shù)據(jù)模型僅支持 KV 數(shù)據(jù)模型,不支持外鍵、觸發(fā)器等關(guān)系型數(shù)據(jù)庫中的技術(shù)點(diǎn)。
- 分布式數(shù)據(jù)服務(wù)支持的 KV 數(shù)據(jù)模型規(guī)格:
-
- 設(shè)備協(xié)同數(shù)據(jù)庫,Key 最大支持 896Byte,Value 最大支持 4MB - 1Byte。
-
- 單版本數(shù)據(jù)庫,Key 最大支持 1KB,Value 最大支持 4MB - 1Byte。
-
- 每個應(yīng)用程序最多支持同時打開 16 個 KvStore。
- 由于支持的存儲類型不完全相同等原因,分布式數(shù)據(jù)服務(wù)無法完全代替業(yè)務(wù)沙箱內(nèi)數(shù)據(jù)庫數(shù)據(jù)的存儲功能,開發(fā)人員需要確定要做分布式同步的數(shù)據(jù),把這些數(shù)據(jù)保存到分布式數(shù)據(jù)服務(wù)中。
- 分布式數(shù)據(jù)服務(wù)當(dāng)前不支持應(yīng)用程序自定義沖突解決策略。
- 分布式數(shù)據(jù)服務(wù)當(dāng)前流控機(jī)制針對 KvStore 的接口 1 秒最大訪問 1000 次,1 分鐘最大訪問 10000 次。KvManager 的接口 1 秒最大訪問 50 次,1 分鐘最大訪問 500 次。
- 如果需要在分布式數(shù)據(jù)庫事件回調(diào)的方法里修改 UI 組件,建議使用 UITaskDispatcher 機(jī)制。
④ 應(yīng)用場景
- 分布式數(shù)據(jù)服務(wù)主要實(shí)現(xiàn)對用戶設(shè)備中應(yīng)用程序的數(shù)據(jù)內(nèi)容的分布式同步。
- 當(dāng)設(shè)備 1 上的應(yīng)用 A 在分布式數(shù)據(jù)庫中增、刪、改數(shù)據(jù)后,設(shè)備 2 上的應(yīng)用 A 也可以獲取到該數(shù)據(jù)庫變化。可在分布式圖庫、信息、通訊錄、文件管理器等場景中使用。
二、分布式數(shù)據(jù)服務(wù) API
- HarmonyOS 系統(tǒng)中的分布式數(shù)據(jù)服務(wù)模塊為開發(fā)者提供下面幾種功能:
三、分布式數(shù)據(jù)服務(wù)使用流程
① 根據(jù)配置構(gòu)造分布式數(shù)據(jù)庫管理類實(shí)例
- 根據(jù)應(yīng)用上下文創(chuàng)建 KvManagerConfig 對象。
- 創(chuàng)建分布式數(shù)據(jù)庫管理器實(shí)例。
- 以下為創(chuàng)建分布式數(shù)據(jù)庫管理器的代碼示例:
② 獲取/創(chuàng)建單版本分布式數(shù)據(jù)庫
- 聲明需要創(chuàng)建的單版本分布式數(shù)據(jù)庫 ID 描述。
- 創(chuàng)建單版本分布式數(shù)據(jù)庫,跨設(shè)備自動同步數(shù)據(jù)庫功能默認(rèn)開啟。
- 以下為創(chuàng)建單版本分布式數(shù)據(jù)庫的代碼示例:
③ 訂閱分布式數(shù)據(jù)變化
- 客戶端需要實(shí)現(xiàn) KvStoreObserver 接口。
- 構(gòu)造并注冊 KvStoreObserver 實(shí)例。
- 以下為訂閱單版本分布式數(shù)據(jù)庫所有(本地及遠(yuǎn)端)數(shù)據(jù)變化通知的代碼示例:
④ 將數(shù)據(jù)寫入單版本分布式數(shù)據(jù)庫
- 構(gòu)造需要寫入單版本分布式數(shù)據(jù)庫的 Key(鍵)和 Value(值)。
- 將鍵值數(shù)據(jù)寫入單版本分布式數(shù)據(jù)庫。
- 以下為將字符串類型鍵值數(shù)據(jù)寫入單版本分布式數(shù)據(jù)庫的代碼示例:
⑤ 查詢單版本分布式數(shù)據(jù)庫數(shù)據(jù)
- 構(gòu)造需要從單版本分布式數(shù)據(jù)庫快照中查詢的 Key(鍵)。
- 從單版本分布式數(shù)據(jù)庫快照中獲取數(shù)據(jù)。
- 以下為從單版本分布式數(shù)據(jù)庫中查詢字符串類型數(shù)據(jù)的代碼示例:
⑥ 同步數(shù)據(jù)到其他設(shè)備
- 獲取已連接的設(shè)備列表。
- 選擇同步方式進(jìn)行數(shù)據(jù)同步。
- 以下為單版本分布式數(shù)據(jù)庫進(jìn)行數(shù)據(jù)同步的代碼示例,其中同步方式為 PUSH_ONLY:
⑦ 關(guān)閉單版本分布式數(shù)據(jù)庫
- 以下為關(guān)閉單版本分布式數(shù)據(jù)庫的代碼示例:
⑧ 刪除單版本分布式數(shù)據(jù)庫
- 以下為刪除單版本分布式數(shù)據(jù)庫的代碼示例:
總結(jié)
以上是生活随笔為你收集整理的HarmonyOS之数据管理·分布式数据服务的应用的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: HarmonyOS之数据管理·轻量级偏好
- 下一篇: HarmonyOS之数据管理·分布式文件