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

2020-09-18 17:48 更新

分布式數(shù)據(jù)服務(wù)(Distributed Data Service,DDS) 為應(yīng)用程序提供不同設(shè)備間數(shù)據(jù)庫(kù)數(shù)據(jù)分布式的能力。通過(guò)調(diào)用分布式數(shù)據(jù)接口,應(yīng)用程序?qū)?shù)據(jù)保存到分布式數(shù)據(jù)庫(kù)中。通過(guò)結(jié)合帳號(hào)、應(yīng)用和數(shù)據(jù)庫(kù)三元組,分布式數(shù)據(jù)服務(wù)對(duì)屬于不同的應(yīng)用的數(shù)據(jù)進(jìn)行隔離,保證不同應(yīng)用之間的數(shù)據(jù)不能通過(guò)分布式數(shù)據(jù)服務(wù)互相訪問(wèn)。在通過(guò)可信認(rèn)證的設(shè)備間,分布式數(shù)據(jù)服務(wù)支持應(yīng)用數(shù)據(jù)相互同步,為用戶提供在多種終端設(shè)備上一致的數(shù)據(jù)訪問(wèn)體驗(yàn)。

基本概念

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

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

KV 數(shù)據(jù)模型適合不涉及過(guò)多數(shù)據(jù)關(guān)系和業(yè)務(wù)關(guān)系的業(yè)務(wù)數(shù)據(jù)存儲(chǔ),比 SQL 數(shù)據(jù)庫(kù)存儲(chǔ)擁有更好的讀寫性能,同時(shí)因在分布式場(chǎng)景中降低了數(shù)據(jù)庫(kù)版本兼容和數(shù)據(jù)同步過(guò)程中沖突解決的復(fù)雜度而被廣泛使用。分布式數(shù)據(jù)庫(kù)也是基于 KV 數(shù)據(jù)模型,對(duì)外提供 KV 類型的訪問(wèn)接口。

  • 分布式數(shù)據(jù)庫(kù)事務(wù)性

分布式數(shù)據(jù)庫(kù)事務(wù)支持本地事務(wù)(和傳統(tǒng)數(shù)據(jù)庫(kù)的事務(wù)概念一致)和同步事務(wù),同步事務(wù)是指在設(shè)備之間同步數(shù)據(jù)時(shí),是以本地事務(wù)為單位進(jìn)行同步,一次本地事務(wù)的修改要么都同步成功,要么都同步失敗。

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

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

  • 強(qiáng)一致性:是指某一設(shè)備成功增、刪、改數(shù)據(jù)后,組網(wǎng)內(nèi)設(shè)備對(duì)該數(shù)據(jù)的讀取操作都將得到更新后的值。
  • 弱一致性:是指某一設(shè)備成功增、刪、改數(shù)據(jù)后,組網(wǎng)內(nèi)設(shè)備可能能讀取到本次更新數(shù)據(jù),也可能讀取不到,不能保證在多長(zhǎng)時(shí)間后每個(gè)設(shè)備的數(shù)據(jù)一定是一致的。
  • 最終一致性:是指某一設(shè)備成功增、刪、改數(shù)據(jù)后,組網(wǎng)內(nèi)設(shè)備可能讀取不到本次更新數(shù)據(jù),但在某個(gè)時(shí)間窗口之后組網(wǎng)內(nèi)設(shè)備的數(shù)據(jù)能夠達(dá)到一致?tīng)顟B(tài)。

強(qiáng)一致性對(duì)分布式數(shù)據(jù)的管理要求非常高,在服務(wù)器的分布式場(chǎng)景可能會(huì)遇到。因?yàn)橐苿?dòng)終端設(shè)備的不常在線、以及無(wú)中心的特性,分布式數(shù)據(jù)服務(wù)不支持強(qiáng)一致,只支持最終一致性。

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

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

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

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

單版本是指數(shù)據(jù)在本地保存是以單個(gè)KV條目為單位的方式保存,對(duì)每個(gè)Key最多只保存一個(gè)條目項(xiàng),當(dāng)數(shù)據(jù)在本地被用戶修改時(shí),不管它是否已經(jīng)被同步出去,均直接在這個(gè)條目上進(jìn)行修改。同步也以此為基礎(chǔ),按照它在本地被寫入或更改的順序?qū)?dāng)前最新一次修改逐條同步至遠(yuǎn)端設(shè)備。

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

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

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

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

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

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

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

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

運(yùn)作機(jī)制

分布式數(shù)據(jù)服務(wù)支撐 HarmonyOS 系統(tǒng)上應(yīng)用程序數(shù)據(jù)庫(kù)數(shù)據(jù)分布式管理,支持?jǐn)?shù)據(jù)在相同帳號(hào)的多端設(shè)備之間相互同步,為用戶在多端設(shè)備上提供一致的用戶體驗(yàn),分布式數(shù)據(jù)服務(wù)包含五部分:

  • 服務(wù)接口

分布式數(shù)據(jù)服務(wù)提供專門的數(shù)據(jù)庫(kù)創(chuàng)建、數(shù)據(jù)訪問(wèn)、數(shù)據(jù)訂閱等接口給應(yīng)用程序調(diào)用,接口支持 KV 數(shù)據(jù)模型,支持常用的數(shù)據(jù)類型,同時(shí)確保接口的兼容性、易用性和可發(fā)布性。

  • 服務(wù)組件

服務(wù)組件負(fù)責(zé)服務(wù)內(nèi)元數(shù)據(jù)管理、權(quán)限管理、加密管理、備份和恢復(fù)管理以及多用戶管理等、同時(shí)負(fù)責(zé)初始化底層分布式 DB 的存儲(chǔ)組件、同步組件和通信適配層。

  • 存儲(chǔ)組件

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

  • 同步組件

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

  • 通信適配層

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

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

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

約束與限制

  • 應(yīng)用程序如需使用分布式數(shù)據(jù)服務(wù)完整功能,需要申請(qǐng) ohos.permission.DISTRIBUTED_DATASYNC 權(quán)限。
  • 分布式數(shù)據(jù)服務(wù)的數(shù)據(jù)模型僅支持 KV 數(shù)據(jù)模型,不支持外鍵、觸發(fā)器等關(guān)系型數(shù)據(jù)庫(kù)中的技術(shù)點(diǎn)。
  • 分布式數(shù)據(jù)服務(wù)支持的 KV 數(shù)據(jù)模型規(guī)格:
    • 設(shè)備協(xié)同數(shù)據(jù)庫(kù),Key 最大支持 896Byte,Value 最大支持 4MB - 1Byte。
    • 單版本數(shù)據(jù)庫(kù),Key 最大支持 1KB,Value 最大支持 4MB - 1Byte。
    • 每個(gè)應(yīng)用程序最多支持同時(shí)打開 16 個(gè) KvStore。
  • 由于支持的存儲(chǔ)類型不完全相同等原因,分布式數(shù)據(jù)服務(wù)無(wú)法完全代替業(yè)務(wù)沙箱內(nèi)數(shù)據(jù)庫(kù)數(shù)據(jù)的 存儲(chǔ)功能,開發(fā)人員需要確定要做分布式同步的數(shù)據(jù),把這些數(shù)據(jù)保存到分布式數(shù)據(jù)服務(wù)中。
  • 分布式數(shù)據(jù)服務(wù)當(dāng)前不支持應(yīng)用程序自定義沖突解決策略。
以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)