分散データベースの OpenHarmony ソースコード分析

分散データベースの OpenHarmony ソースコード分析

[[440154]]

詳細については、以下をご覧ください。

51CTOとHuaweiが共同で構築したHongmengテクノロジーコミュニティ

https://harmonyos..com

1 はじめに

この記事は、OpenHarmonyOS 3.0 LTS に基づいて、異なるデバイス間でデータベース データの分散を提供する分散データ サービス (DDS) の機能について説明します。アーキテクチャの観点から見ると、分散データ サービスはオープン ソースの Hongmeng 基盤サービスの基本サービスであり、分散タスク スケジューリングと同じレベルにあります。ただし、分散タスクスケジューリング機能を使用する場合、完全な分散機能を実現するために、基本的にはさらにデータ連携機能が必要になります。したがって、分散タスク スケジューリングを学習する際には、分散データ サービスに関連する機能と基盤となるサービスを学習することが不可欠です。

この記事を書いているときに、JS DEMO をデバッグしているときに、下位レベルの Ark JS ランタイム レイヤーにバグがあることを発見しました。問題を提出し、PR を提出しようとしました。 DEMO の実行中に問題が発生した場合は、上記の PR をマージし、システム全体を再コンパイルしてマシンをフラッシュしてから、もう一度試してください。

1.1 配布関連

  • 《OpenHarmony ソースコード分析: 分散タスクスケジューリング》
  • 《分散データベースのOpenHarmonyソースコード解析》

1.2 OpenHarmony アーキテクチャ図


2 基本

2.1 概要

まず、オープンソースの Hongmeng 公式ドキュメントにある分散データ サービスの説明を見てみましょう。

分散データ サービス (DDS) は、異なるデバイス間でデータベース データを分散する機能を提供します。分散データ サービスは、アカウント、アプリケーション、データベースの 3 つを組み合わせることでデータを分離します。分散データ サービスは、信頼できる認証済みデバイス間のデータ同期をサポートし、複数の端末デバイスで一貫したデータ アクセス エクスペリエンスをユーザーに提供します。

現在、オープンソースの Hongmeng にはまだアカウント機能が統合されていないため、テスト時にはアカウントを自由に選択し、一貫して情報を入力することができます。完全な分散データ分離を実現し、複数の端末デバイスで一貫したデータ アクセス エクスペリエンスを提供するには、アプリケーションとデータベースの一貫性を維持する必要があります。

2.2 ソースコードの構造

  1. ├──ビルド.gn
  2. ├── 数字
  3. │ ├── en-us_image_0000001162536643.png
  4. │ └── zh-cn_image_0000001162536643.png
  5. ├── フレームワーク
  6. │ ├── インナーキットシンプル
  7. │ │ └──distributeddatafwk # フレームワーク層の実装
  8. │ │ ├── 含む
  9. │ │ ├── 出典
  10. │ │ └── テスト
  11. │ └── jskitsimpl
  12. │ └── 分散データ # JSインターフェース実装
  13. │ ├── 含む
  14. │ └── 出典
  15. ├── インターフェース
  16. │ ├── innerkits # 内部インターフェース、主にヘッダーファイル
  17. │ │ ├── app_distributeddata
  18. │ │ │ §── BUILD.gn
  19. │ │ │ └── 含む
  20. │ │ └── 分散データ
  21. │ │ ├── ビルド.gn
  22. │ │ └── 含む
  23. │ └── jskits # BUILD用JSインターフェース
  24. │ └── 分散データ
  25. │ └── ビルド.gn
  26. ├── ライセンス
  27. ├── OAT.xml
  28. ├── ohos.build
  29. ├── README.md
  30. ├── README_ja.md
  31. ├── サービス
  32. │ └── 分散データサービス
  33. │ ├── アダプタ # アダプタの実装
  34. │ │ ├── アカウント # アカウント適応
  35. │ │ ├── autils # タスク、スレッド、ディレクトリなどを含むユーティリティライブラリ。
  36. │ │ ├── ブロードキャスト # ブロードキャストを送信
  37. │ │ ├── ビルド.gn
  38. │ │ ├── コミュニケータ # 通信アダプタ
  39. │ │ ├── dfx # ログ、統計、エラー、その他関連処理
  40. │ │ ├── 含む
  41. │ │ ├── ライセンス
  42. │ │ ├── 許可
  43. │ │ ├── セキュリティ # セキュリティ関連
  44. │ │ ├── テスト
  45. │ │ └── ユーティリティ
  46. │ ├── app # ユーザープログラムの実装
  47. │ ├── ライブラリ
  48. │ │ └── 分散データベース
  49. │ │ ├── ビルド.gn
  50. │ │ ├── 共通
  51. │ │ ├── コミュニケータ # デバイス間の通信
  52. │ │ ├── 含む
  53. │ │ ├── インターフェース
  54. │ │ ├── ストレージ # シングルバージョン KV、マルチバージョン KV、SQLITE3 などを含むストレージ実装。
  55. │ │ ├── syncer # 同期
  56. │ │ └── テスト
  57. │ ├── sa_profile
  58. │ └── テスト
  59. └── テスト

2.3 分散データサービスアーキテクチャ設計図


2.4 データ同期

公式ドキュメントでは次のように説明されています:

分散データベースの作成、アクセス、およびサブスクリプション機能は、分散データ サービス インターフェイスを呼び出すことによって実装されます。サービス インターフェイスは、サービス コンポーネントによって提供される機能を操作して、ストレージ コンポーネントにデータを格納します。ストレージ コンポーネントは同期コンポーネントを呼び出してデータを同期します。同期コンポーネントは、通信適応層を使用してデータをリモート デバイスと同期します。リモート デバイスは同期コンポーネントを介してデータを受信し、それをローカル ストレージ コンポーネントに更新します。

2.5 分散データ

最終的な一貫性: これは、デバイスがデータの追加、削除、または変更を正常に実行した後、ネットワーク内のデバイスは更新されたデータを読み取ることができない可能性があるが、一定の時間枠が経過すると、ネットワーク内のデバイスのデータは一貫した状態になる可能性があることを意味します。

強力な一貫性には、分散サーバーのシナリオで発生する可能性のある分散データの管理に対する非常に高い要件があります。モバイル デバイスは常にオンラインであるとは限らず、分散型の性質を持つため、分散データ サービスは強力な一貫性をサポートせず、結果的な一貫性のみをサポートします。

現在、分散データのデータモデルは KV データモデルのみをサポートしており、外部キーやトリガーなどのリレーショナルデータベースにおける技術的なポイントはサポートされていません。オープンソースの Hongmeng 基盤レイヤーは SQLITE3 に基づくリレーショナル データベースをサポートしていますが、分散データ レベルではサポートしていません。

現在の KV データ モデルの制限:

  • デバイス コラボレーション データベースは、最大 896 バイトのキー サイズと最大 4 MB の値のサイズをサポートします。
  • 単一バージョンのデータベースの場合、サポートされるキーの最大サイズは 1 KB、サポートされる値の最大サイズは 4 MB です。
  • 各プログラムは、同時に開くことができる最大 16 個の DB をサポートします。
  • 現在のフロー制御メカニズムでは、KvStore インターフェイスへのアクセスの最大数が 1 秒あたり 1,000 回、1 分あたり 10,000 回に制限されています。
  • KvManager インターフェイスには、1 秒あたり最大 50 回、1 分あたり最大 500 回アクセスできます。

2.6 使用の前提条件

オープンソースのHongmengの​​配布データソースコードから、現在は携帯電話(phone)、ウェアラブルデバイス(wearable)、車載システム(ivi)のみに搭載されることがわかります。その他の軽量デバイスは、当面サポートされないか、サポートするために調整およびカスタマイズが必要になる場合があります。

現在、この機能は 2 つの標準デバイスのオープン ソース システム Hongmeng にデフォルトで統合されており、直接使用できます。

オープンソース Hongmeng の分散データが単一のマシンでのみ使用される場合、前提条件は必要ありません。分散機能が必要な場合は、デバイス間でネットワークを構築する必要があります。ネットワーク接続の前提条件は、デバイス認証を完了することです。具体的な手順については、分散タスク スケジューリングの OpenHarmony ソース コード分析を参照してください。

3 プログラミングインターフェース

3.1 モジュールのインポート

  1. 分散データインポートする  '@ohos.data.distributedData' ;

次のインターフェースのほとんどには、コールバックとプロミスという 2 つの非同期メソッドがあります。この記事では、promise メソッドを例に説明します。コールバックメソッドは似ています。ご自身でドキュメントを参照してください。

3.2 マネージャーの作成

  1. 分散データ.createKVManager
  2. KVManagerを作成します(設定: KVManagerConfig、コールバック: AsyncCallback<KVManager>): void
  3. KVManagerを作成します(config: KVManagerConfig): Promise<KVManager>

データベース オブジェクトを管理するための KVManager オブジェクト インスタンスを作成し、それを Promise を通じて返します。このメソッドは非同期メソッドです。

例:

  1. kvManager を実行します。
  2. 試す {
  3. 定数kvManagerConfig = {
  4. バンドル名: 'com.example.datamanagertest'
  5. ユーザー情報: {
  6. ユーザーID: '0'
  7. ユーザータイプ: 0
  8. }
  9. }
  10. 分散データ。KVManager を作成します (kvManagerConfig)。それから((マネージャー) => {
  11. console.log( "createKVManager が成功しました" );
  12. kvManager = マネージャー;
  13. }).catch((エラー) => {
  14. console.log( "createKVManager エラー: " + JSON.stringify(err));
  15. });
  16. } キャッチ (e) {
  17. console.log( "予期しないエラーが発生しました。エラー:" + e);
  18. }

3.3 ストレージインスタンスを取得する

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

Options と storeId を指定して、KVStore データベースを作成および取得し、Promise モードで返します。このメソッドは非同期メソッドです。

例:

  1. kvStore を実行します。
  2. 試す {
  3. 定数オプション = {
  4. 作成しない場合: true
  5. 暗号化: false
  6. バックアップ: false
  7. autoSync : true 、 //手動同期、自動同期
  8. kvStoreType : 1, //現在は0(デフォルト)のみ使用可能: 複数デバイスの共同データベースを示す、1: 単一バージョンのデータベース
  9. セキュリティレベル: 3,
  10. };
  11. kvManager.getKVStore( 'storeId' , オプション)。それから((ストア) => {
  12. console.log( "getKVStore 成功" );
  13. kvStore = ストア;
  14. }).catch((エラー) => {
  15. console.log( "getKVStore エラー: " + JSON.stringify(err));
  16. });
  17. } キャッチ (e) {
  18. console.log( "予期しないエラーが発生しました。エラー:" + e);
  19. }

3.4 保存、取得、削除、同期

  1. kvStore.put(キー: 文字列、値: Uint8Array | 文字列 | 数値 | ブール値): Promise<void>
  2. kvStore.get(キー: 文字列): Promise<Uint8Array |文字列 |ブール値 |番号>
  3. kvStore.delete (キー: 文字列 ): Promise<void>
  4. kvStore.sync(デバイスIdList: 文字列[]、モード: SyncMode、allowedDelayMs?: 数値): void

3.5 イベント通知コールバックの登録

SubscribeType はサブスクリプションの種類を説明します。

  • 0: SUBSCRIBE_TYPE_LOCAL は、ローカル データの変更をサブスクライブすることを意味します。
  • 1: SUBSCRIBE_TYPE_REMOTE は、リモート データの変更をサブスクライブすることを意味します。
  • 2: SUBSCRIBE_TYPE_ALL は、リモートとローカルの両方のデータ変更をサブスクライブすることを意味します。
  1. kvストア。 on (イベント: 'dataChange' 、タイプ: SubscribeType、オブザーバー: Callback<ChangeNotification>): void
  2. kvストア。 on (イベント: 'syncComplete' 、syncCallback: Callback<Array<[string, number]>>): void

4 まとめ

上記の手順は、DevEco Studio 3.0.0.600 x64 で正常に記述され、2 つの Hi3516D デバイス間で正常に実行されます。コード(分散タスクスケジューリングおよび分散データテスト.zip)が添付されています。

もう一度言いますが、基盤となる分散データは ARK JS エンジンに依存していることにご注意ください。現在、文字列処理にバグが見つかりました。操作中に問題が発生した場合は、まず PR をマージし、システム全体を再コンパイルしてマシンをフラッシュしてから、DEMO を実行してください。

詳細については、以下をご覧ください。

51CTOとHuaweiが共同で構築したHongmengテクノロジーコミュニティ

https://harmonyos..com

<<:  2022年以降に注目すべきエッジコンピューティングの5つのトレンド

>>:  HarmonyOS 分散アプリケーション農業温室データ監視の解釈

推薦する

Baidu の重量をチェックするウェブサイトが多すぎます。どれを信頼すればよいでしょうか?

Baidu ウェイトはしばらく前からリリースされており、誰もが自分のウェブサイトの Baidu ウェ...

BAT31 PR: さまざまな特徴と強みが国内のインターネットを非常に活発にしている

インターネット企業は、ネットユーザーが毎日利用し、そのサービスにはより高い広報能力が求められる百度、...

クラウドネイティブ PostgreSQL クラスター - PGO: 5 分で開始

前提条件ホストに次のユーティリティがインストールされていることを確認してください。 kubectlギ...

Vancl は「帰路」で何をしたいのでしょうか?

昨年第4四半期に黒字を達成したヴァンクルにとって、今年のプレッシャーは依然として非常に大きい。チュー...

すごい: Bluehost が月額 1 ドルのサーバーを開始

Bluehost の仮想ホストは世界的に有名で、プライベート エクイティ コンソーシアム EIG の...

Weiboマーケティングを利用するTaobao販売者への提案

ショートビデオ、セルフメディア、インフルエンサーのためのワンストップサービスSEO担当者として、ウェ...

スマートマーケティングのウルトラブック詐欺!

2018年最もホットなプロジェクト:テレマーケティングロボットがあなたの参加を待っています最近、多く...

中国のSaaS企業:追いつくことから加速し共に走ることへ

経済活動のやり方におけるあらゆる大きな変化は、大きな技術的変化の機会を生み出すでしょう。製品経済から...

SEO 担当者は外部リンクをどのように見るべきでしょうか?

SEO の継続的な発展に伴い、競争はますます激しくなっています。今後の SEO は、テクノロジー、コ...

ライブストリーミングが福利厚生の分野に商品をもたらす

ライブストリーミングで商品を販売するのは、霧の中に花が咲き、水の中に月が浮かぶようなものです。羅永浩...

クラウド セキュリティ: 2023 年の 5 つの予測

COVID-19 パンデミックの間、企業の働き方は根本的に変化し、パブリック クラウド環境とプライベ...

フォグコンピューティング: 現代のスマートホーム技術の陰の立役者

フォグ コンピューティングは、テクノロジーの世界では比較的知られていない概念ですが、スマート ホーム...

Baidu 入札に関する FAQ: クリック数に影響を与える要因は何ですか?

2018年最もホットなプロジェクト:テレマーケティングロボットがあなたの参加を待っていますBaidu...

【専用VPS】今年最も速い日本のVPSおすすめ、登録不要の日本のクラウドサーバー

2019 年に最も速い日本の VPS は何ですか?最も高速な日本の VPS/日本の高速 VPS はど...

Google Cloudは長年失われていた

クラウドコンピューティングの分野では、Google は常に恥ずかしい存在であったようです。 Goog...