鴻蒙OS 分布式數(shù)據(jù)服務(wù)概述

2020-09-18 17:48 更新

分布式數(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ù)進行隔離,保證不同應(yīng)用之間的數(shù)據(jù)不能通過分布式數(shù)據(jù)服務(wù)互相訪問。在通過可信認證的設(shè)備間,分布式數(shù)據(jù)服務(wù)支持應(yīng)用數(shù)據(jù)相互同步,為用戶提供在多種終端設(shè)備上一致的數(shù)據(jù)訪問體驗。

基本概念

  • KV數(shù)據(jù)模型

“KV數(shù)據(jù)模型”是“Key-Value 數(shù)據(jù)模型”的簡稱,“Key-Value”即“鍵-值”。它是一種 NoSQL 類型數(shù)據(jù)庫,其數(shù)據(jù)以鍵值對的形式進行組織、索引和存儲。

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ù)為單位進行同步,一次本地事務(wù)的修改要么都同步成功,要么都同步失敗。

  • 分布式數(shù)據(jù)庫一致性

在分布式場景中一般會涉及多個設(shè)備,組網(wǎng)內(nèi)設(shè)備之間看到的數(shù)據(jù)是否一致稱為分布式數(shù)據(jù)庫的一致性。分布式數(shù)據(jù)庫一致性可以分為強一致性、弱一致性最終一致性。

  • 強一致性:是指某一設(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ù)能夠達到一致狀態(tài)。

強一致性對分布式數(shù)據(jù)的管理要求非常高,在服務(wù)器的分布式場景可能會遇到。因為移動終端設(shè)備的不常在線、以及無中心的特性,分布式數(shù)據(jù)服務(wù)不支持強一致,只支持最終一致性。

  • 分布式數(shù)據(jù)庫同步

底層通信組件完成設(shè)備發(fā)現(xiàn)和認證,會通知上層應(yīng)用程序(包括分布式數(shù)據(jù)服務(wù))設(shè)備上線。收到設(shè)備上線的消息后分布式數(shù)據(jù)服務(wù)可以在兩個設(shè)備之間建立加密的數(shù)據(jù)傳輸通道,利用該通道在兩個設(shè)備之間進行數(shù)據(jù)同步。

分布式數(shù)據(jù)服務(wù)提供了兩種同步模式:手動**同步自動同步模式手動同步**模式完全由應(yīng)用程序調(diào)用接口來觸發(fā),并且支持指定同步的設(shè)備列表和同步模式(PULL、PUSH和PULL_PUSH三種同步模式)。自動同步模式由分布式數(shù)據(jù)庫來完成數(shù)據(jù)同步(同步時機包括設(shè)備上線、應(yīng)用程序修改數(shù)據(jù)等),業(yè)務(wù)不感知同步操作。

  • 單版本分布式數(shù)據(jù)庫

單版本是指數(shù)據(jù)在本地保存是以單個KV條目為單位的方式保存,對每個Key最多只保存一個條目項,當數(shù)據(jù)在本地被用戶修改時,不管它是否已經(jīng)被同步出去,均直接在這個條目上進行修改。同步也以此為基礎(chǔ),按照它在本地被寫入或更改的順序?qū)斍白钚乱淮涡薷闹饤l同步至遠端設(shè)備。

  • 設(shè)備協(xié)同分布式數(shù)據(jù)庫

設(shè)備協(xié)同分布式數(shù)據(jù)庫建立在單版本分布式數(shù)據(jù)庫之上,對應(yīng)用程序存入的 KV 數(shù)據(jù)中的 Key 前面拼接了本設(shè)備的 DeviceID 標識符,這樣能保證每個設(shè)備產(chǎn)生的數(shù)據(jù)嚴格隔離,底層按照設(shè)備的維度管理這些數(shù)據(jù),設(shè)備協(xié)同分布式數(shù)據(jù)庫支持以設(shè)備的維度查詢分布式數(shù)據(jù),但是不支持修改遠端設(shè)備同步過來的數(shù)據(jù)。

  • 分布式數(shù)據(jù)庫沖突解決策略

分布式數(shù)據(jù)庫多設(shè)備提交沖突場景,在給提交沖突做合并的過程中,如果多個設(shè)備同時修改了同一數(shù)據(jù),則稱這種場景為數(shù)據(jù)沖突。數(shù)據(jù)沖突采用默認沖突解決策略,基于提交時間戳,取時間戳較大的提交數(shù)據(jù),當前不支持定制沖突解決策略。

  • 數(shù)據(jù)庫Schema化管理與謂詞查詢

單版本數(shù)據(jù)庫支持在創(chuàng)建和打開數(shù)據(jù)庫時指定 Schema,數(shù)據(jù)庫根據(jù) Schema 定義感知 KV 記錄的 Value 格式,以實現(xiàn)對 Value 值結(jié)構(gòu)的檢查,并基于 Value 中的字段實現(xiàn)索引建立和支持謂詞查詢。

  • 分布式數(shù)據(jù)庫備份能力

提供分布式數(shù)據(jù)庫備份能力,業(yè)務(wù)通過設(shè)置 backup 屬性為 true,可以觸發(fā)分布式數(shù)據(jù)服務(wù)每日備份。當分布式數(shù)據(jù)庫發(fā)生損壞,分布式數(shù)據(jù)服務(wù)會刪除損壞數(shù)據(jù)庫,并且從備份數(shù)據(jù)庫中恢復(fù)上次備份的數(shù)據(jù)。如果不存在備份數(shù)據(jù)庫,則創(chuàng)建一個新的數(shù)據(jù)庫。同時支持加密數(shù)據(jù)庫的備份能力。

運作機制

分布式數(shù)據(jù)服務(wù)支撐 HarmonyOS 系統(tǒng)上應(yīng)用程序數(shù)據(jù)庫數(shù)據(jù)分布式管理,支持數(shù)據(jù)在相同帳號的多端設(shè)備之間相互同步,為用戶在多端設(shè)備上提供一致的用戶體驗,分布式數(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ù)組件負責(zé)服務(wù)內(nèi)元數(shù)據(jù)管理、權(quán)限管理、加密管理、備份和恢復(fù)管理以及多用戶管理等、同時負責(zé)初始化底層分布式 DB 的存儲組件、同步組件和通信適配層。

  • 存儲組件

存儲組件負責(zé)數(shù)據(jù)的訪問、數(shù)據(jù)的縮減、事務(wù)、快照、數(shù)據(jù)庫加密,以及數(shù)據(jù)合并和沖突解決等特性。

  • 同步組件

同步組件連結(jié)了存儲組件與通信組件,其目標是保持在線設(shè)備間的數(shù)據(jù)庫數(shù)據(jù)一致性,包括將本地產(chǎn)生的未同步數(shù)據(jù)同步給其他設(shè)備,接收來自其他設(shè)備發(fā)送過來的數(shù)據(jù),并合并到本地設(shè)備中。

  • 通信適配層

通信適配層負責(zé)調(diào)用底層公共通信層的接口完成通信管道的創(chuàng)建、連接,接收設(shè)備上下線消息,維護已連接和斷開設(shè)備列表的元數(shù)據(jù),同時將設(shè)備上下線信息發(fā)送給上層同步組件,同步組件維護連接的設(shè)備列表,同步數(shù)據(jù)時根據(jù)該列表,調(diào)用通信適配層的接口將數(shù)據(jù)封裝并發(fā)送給連接的設(shè)備。

應(yīng)用程序通過調(diào)用分布式數(shù)據(jù)服務(wù)接口實現(xiàn)分布式數(shù)據(jù)庫創(chuàng)建、訪問、訂閱功能,服務(wù)接口通過操作服務(wù)組件提供的能力,將數(shù)據(jù)存儲至存儲組件,存儲組件調(diào)用同步組件實現(xiàn)將數(shù)據(jù)同步,同步組件使用通信適配層將數(shù)據(jù)同步至遠端設(shè)備,遠端設(shè)備通過同步組件接收數(shù)據(jù),并更新至本端存儲組件,通過服務(wù)接口提供給應(yīng)用程序使用。

圖1 數(shù)據(jù)分布式運作示意圖 點擊放大

約束與限制

  • 應(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ù)點。
  • 分布式數(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ù)當前不支持應(yīng)用程序自定義沖突解決策略。
以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號