成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

OpenHarmony 源碼解析之分布式數據庫

系統 分布式
本文基于OpenHarmonyOS 3.0 LTS 來講解分布式數據服務(Distributed Data Service,DDS) 提供不同設備間數據庫數據分布式的能力。

[[440154]]

想了解更多內容,請訪問:

51CTO和華為官方合作共建的鴻蒙技術社區

https://harmonyos.51cto.com

1 簡介

本文基于OpenHarmonyOS 3.0 LTS 來講解分布式數據服務(Distributed Data Service,DDS) 提供不同設備間數據庫數據分布式的能力。從架構上來說,分布式數據服務是開源鴻蒙底層服務的基礎服務,與分布式任務調度同層。然而在使用分布式任務調度功能時,基本上都需要進一步要求數據交互功能,完成完整的分布式功能,因此在學習分布式任務調度的同時,不可避免的需要學習分布式數據服務相關的功能與底層服務。

本文在寫作時,調試JS的DEMO時發現了更底層的方舟JS運行層的BUG,提交了ISSUE,并試圖提交了PR。如果大家在運行DEMO時發現問題,請先嘗試合并上述PR并重新全部編譯系統并刷機再試。

1.1 分布式相關

  • 《OpenHarmony 源碼解析之分布式任務調度》
  • 《OpenHarmony 源碼解析之分布式數據庫》

1.2 OpenHarmony架構圖

#星光計劃2.0# OpenHarmony 源碼解析之分布式數據庫-鴻蒙HarmonyOS技術社區

2 基礎知識

2.1 概述

先看開源鴻蒙官方文檔對分布式數據服務的描述:

分布式數據服務(Distributed Data Service,DDS) 提供不同設備間數據庫數據分布式的能力。通過結合帳號、應用和數據庫三元組,分布式數據服務對數據進行隔離。在通過可信認證的設備間,分布式數據服務支持數據相互同步,為用戶提供在多種終端設備上一致的數據訪問體驗。

目前開源鴻蒙還沒有整合賬號功能,因此測試的時候賬號可以自由選擇,填寫一致即可。應用和數據庫則必須保持一致,才能進行完整的分布式數據數據隔離,提供數據在多種終端設備上一致的訪問體驗。

2.2 源碼結構

  1. ├── BUILD.gn 
  2. ├── figures 
  3. │   ├── en-us_image_0000001162536643.png 
  4. │   └── zh-cn_image_0000001162536643.png 
  5. ├── frameworks 
  6. │   ├── innerkitsimpl 
  7. │   │   └── distributeddatafwk # 框架層實現 
  8. │   │       ├── include 
  9. │   │       ├── src 
  10. │   │       └── test 
  11. │   └── jskitsimpl 
  12. │       └── distributeddata    # JS接口實現 
  13. │           ├── include 
  14. │           └── src 
  15. ├── interfaces 
  16. │   ├── innerkits                # 內部接口,主要是頭文件 
  17. │   │   ├── app_distributeddata  
  18. │   │   │   ├── BUILD.gn 
  19. │   │   │   └── include 
  20. │   │   └── distributeddata 
  21. │   │       ├── BUILD.gn 
  22. │   │       └── include 
  23. │   └── jskits                   # JS接口,BUILD用 
  24. │       └── distributeddata 
  25. │           └── BUILD.gn 
  26. ├── LICENSE 
  27. ├── OAT.xml 
  28. ├── ohos.build 
  29. ├── README.md 
  30. ├── README_zh.md 
  31. ├── services 
  32. │   └── distributeddataservice 
  33. │       ├── adapter              # 適配實現 
  34. │       │   ├── account          # 賬號適配 
  35. │       │   ├── autils           # 實用庫,包括任務、線程、目錄等 
  36. │       │   ├── broadcaster      # 發送廣播 
  37. │       │   ├── BUILD.gn 
  38. │       │   ├── communicator     # 通訊適配 
  39. │       │   ├── dfx              # 日志、統計、錯誤等相關處理 
  40. │       │   ├── include 
  41. │       │   ├── LICENSE 
  42. │       │   ├── permission        # 權限 
  43. │       │   ├── security          # 安全相關 
  44. │       │   ├── test 
  45. │       │   └── utils 
  46. │       ├── app                   # 用戶程序實現 
  47. │       ├── libs 
  48. │       │   └── distributeddb 
  49. │       │       ├── BUILD.gn 
  50. │       │       ├── common 
  51. │       │       ├── communicator  # 設備間通訊 
  52. │       │       ├── include 
  53. │       │       ├── interfaces 
  54. │       │       ├── storage   # 存儲實現,包括單版本KV、多版本KV、SQLITE3等 
  55. │       │       ├── syncer    # 同步 
  56. │       │       └── test 
  57. │       ├── sa_profile 
  58. │       └── test 
  59. └── test 

2.3 分布式數據服務架構設計圖

#星光計劃2.0# OpenHarmony 源碼解析之分布式數據庫-鴻蒙HarmonyOS技術社區

2.4 數據同步

官方文檔是這么描述的:

通過調用分布式數據服務接口實現分布式數據庫創建、訪問、訂閱功能,服務接口通過操作服務組件提供的能力,將數據存儲至存儲組件,存儲組件調用同步組件實現將數據同步,同步組件使用通信適配層將數據同步至遠端設備,遠端設備通過同步組件接收數據,并更新至本端存儲組件。

2.5 分布式數據

最終一致性:是指某一設備成功增、刪、改數據后,組網內設備可能讀取不到本次更新數據,但在某個時間窗口之后組網內設備的數據能夠達到一致狀態。

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

目前分布式數據的數據模型僅支持KV數據模型,不支持外鍵、觸發器等關系型數據庫中的技術點。雖然開源鴻蒙底層支持基于SQLITE3的關系型數據庫,但是并不在分布式數據層面支持。

當前KV數據模型的限制:

  • 設備協同數據庫,Key最大支持896Byte,Value最大支持4MB。
  • 單版本數據庫,Key最大支持1KB,Value最大支持4MB。
  • 每個程序最多支持同時打開16個DB。
  • 當前流控機制針對KvStore的接口1秒最大訪問1000次,1分鐘最大訪問10000次。
  • KvManager的接口1秒最大訪問50次,1分鐘最大訪問500次。

2.6 使用前提

從開源鴻蒙的分布式數據源代碼中,可以看到目前只有手機(phone)、穿戴式設備(wearable)、車載系統(ivi)會搭載,其它更輕量的設備可能暫時不支持,或者需要剪裁定制支持。

目前在兩臺標準設備的開源系統鴻蒙上,是默認集成了該功能,可以直接使用的。

開源鴻蒙的分布式數據如果只在單機使用,那么無需前提條件。如果需要其分布式功能,那么就需要設備之間完成組網;而組網的前提條件是完成設備認證。具體步驟,請參考OpenHarmony 源碼解析之分布式任務調度。

3 編程接口

3.1 導入模塊

  1. import distributedData from '@ohos.data.distributedData'

 下面各個接口大多有callback和promise兩種異步方式,本文均以promise方式為例,callback方式大同小異,請自行查閱文檔。

3.2 創建管理器

  1. distributedData.createKVManager 
  2. createKVManager(config: KVManagerConfig, callback: AsyncCallback<KVManager>): void 
  3. createKVManager(config: KVManagerConfig): Promise<KVManager> 

 創建一個KVManager對象實例,用于管理數據庫對象,并通過Promise方式返回,此方法為異步方法。

示例:

  1. let kvManager; 
  2. try { 
  3.     const kvManagerConfig = { 
  4.         bundleName : 'com.example.datamanagertest'
  5.         userInfo : { 
  6.             userId : '0'
  7.             userType : 0 
  8.         } 
  9.     } 
  10.     distributedData.createKVManager(kvManagerConfig).then((manager) => { 
  11.         console.log("createKVManager success"); 
  12.         kvManager = manager; 
  13.     }).catch((err) => { 
  14.         console.log("createKVManager err: "  + JSON.stringify(err)); 
  15.     }); 
  16. } catch (e) { 
  17.     console.log("An unexpected error occurred. Error:" + e); 

3.3 獲取存儲實例

  1. kvManager.getKVStore 
  2. getKVStore<T extends KVStore>(storeId: string, options: Options): Promise<T> 

通過指定Options和storeId,創建并獲取KVStore數據庫,并通過Promise方式返回,此方法為異步方法。

示例:

  1. let kvStore; 
  2. try { 
  3.     const options = { 
  4.         createIfMissing : true
  5.         encrypt : false
  6.         backup : false
  7.         autoSync : true, //手動同步、自動同步 
  8.         kvStoreType : 1, //當前只能使用0(默認):表示多設備協同數據庫,1:單版本數據庫 
  9.         securityLevel : 3, 
  10.     }; 
  11.     kvManager.getKVStore('storeId', options).then((store) => { 
  12.         console.log("getKVStore success"); 
  13.         kvStore = store; 
  14.     }).catch((err) => { 
  15.         console.log("getKVStore err: "  + JSON.stringify(err)); 
  16.     }); 
  17. } catch (e) { 
  18.     console.log("An unexpected error occurred. Error:" + e); 

3.4 存、取、刪除、同步

  1. kvStore.put(key: string, value: Uint8Array | string | number | boolean): Promise<void> 
  2. kvStore.get(key: string): Promise<Uint8Array | string | boolean | number> 
  3. kvStore.delete(key: string): Promise<void> 
  4. kvStore.sync(deviceIdList: string[], mode: SyncMode, allowedDelayMs?: number): void 

3.5 注冊事件通知回調

SubscribeType 描述訂閱類型。

  • 0: SUBSCRIBE_TYPE_LOCAL 表示訂閱本地數據變更。
  • 1: SUBSCRIBE_TYPE_REMOTE 表示訂閱遠端數據變更。
  • 2: SUBSCRIBE_TYPE_ALL 表示訂閱遠端和本地數據變更。
  1. kvStore.on(event: 'dataChange', type: SubscribeType, observer: Callback<ChangeNotification>): void 
  2. kvStore.on(event: 'syncComplete', syncCallback: Callback<Array<[string, number]>>): void 

4 小結

以上步驟,均已在DevEco Studio 3.0.0.600 x64中編寫成功,并且在兩臺Hi3516D設備間成功運行,附代碼(分布式任務調度和分布式數據測試.zip)。

再次提醒,分布式數據底層依賴ARK JS引擎,目前發現字符串處理有BUG,如運行出現問題,請先合并PR,然后重新編譯全系統并刷機后再運行DEMO。

想了解更多內容,請訪問:

51CTO和華為官方合作共建的鴻蒙技術社區

https://harmonyos.51cto.com

 

責任編輯:jianghua 來源: 鴻蒙社區
相關推薦

2021-11-10 16:10:18

鴻蒙HarmonyOS應用

2021-12-20 15:44:28

ShardingSph分布式數據庫開源

2023-12-05 07:30:40

KlustronBa數據庫

2022-03-10 06:36:59

分布式數據庫排序

2023-07-31 08:27:55

分布式數據庫架構

2023-07-28 07:56:45

分布式數據庫SQL

2023-03-07 09:49:04

分布式數據庫

2020-06-23 09:35:13

分布式數據庫網絡

2024-09-09 09:19:57

2022-08-01 18:33:45

關系型數據庫大數據

2023-11-14 08:24:59

性能Scylla系統架構

2024-03-11 08:57:02

國產數據庫證券

2012-09-29 13:18:23

分布式數據庫Google Span

2018-05-25 13:12:10

UCloud數據庫UDDB

2024-03-15 07:33:02

分布式數據庫索引數據結構

2023-04-26 06:56:31

分布式數據庫偽需求

2022-06-09 10:19:10

分布式數據庫

2011-05-19 09:18:48

分布式數據庫

2011-03-24 17:15:06

分布式數據庫系統

2024-07-25 07:55:37

點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 色综合99| av网站观看 | 在线欧美一区 | 久久精品国产一区二区电影 | 日韩精品一区二区三区视频播放 | 欧美一级视频免费看 | a欧美| 九九综合| 中文字幕在线视频一区二区三区 | 欧美三级三级三级爽爽爽 | 国产日韩精品一区 | 热久久免费视频 | 91麻豆精品国产91久久久更新资源速度超快 | 国产重口老太伦 | www.887色视频免费 | 91美女在线观看 | 中文字幕一区二区三区精彩视频 | av高清 | 久久精品国产久精国产 | 精品国产一区二区三区久久 | 老头搡老女人毛片视频在线看 | 国产精品久久久久久吹潮 | 久久久噜噜噜久久中文字幕色伊伊 | 中文字幕在线观看一区二区 | 91精品国产91久久久久久不卞 | 99国产精品99久久久久久 | 日本精品一区二区三区视频 | 国产区在线| 九色av| 久久中文网 | 91精品国产91久久久久久最新 | 黄色免费网站在线看 | 欧美成人hd | 国产精品爱久久久久久久 | 天天插天天狠天天透 | 日日干夜夜操 | 久久99这里只有精品 | 国产成人久久精品一区二区三区 | 亚洲一区二区三区免费观看 | 免费在线视频精品 | 久久在视频 |