分散データベースの 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 分散アプリケーション農業温室データ監視の解釈

推薦する

ケータリングO2Oで良い仕事をする:料理、サービス、管理、インターネットマーケティングモデルを更新し、試行錯誤を続ける

話せば話すほど、当初の意図を忘れやすくなります。飲食O2O分野で起業した沙水氏は、関連する話題と議論...

オリジナルコンテンツ VS ユーザーエクスペリエンス: 優れたコンテンツとは?

2013年にBaiduアルゴリズムが継続的に導入されたことにより、「コンテンツが王、外部リンクが女王...

budgetvm: 安価なクラウド サーバー、月額 12 ドルから、1.8Tbps の高度な防御、月間 33T のトラフィック、日本と米国のデータ センター

budgetvmは、アメリカの老舗ブランドenzuコンピュータルームのブランドで、主に物理サーバーの...

Kubernetes デプロイメントの 10 のアンチパターン

コンテナの採用と使用が増加し続けるにつれて、Kubernetes (K8s) はコンテナ オーケスト...

ウェブサイトのトラフィック量を決定するために、サイトにはいくつのキーワードを配置しますか?

SEO に携わる人なら、トラフィックがどのように発生するかを知っています。ユーザーがキーワードを検索...

王通:ネガティブリスクコミットメントの性質と応用スキルについて

ショートビデオ、セルフメディア、インフルエンサーのためのワンストップサービス10年以上前、私が初めて...

いつでも、どこでも、何でもお望み通りに! IBM Cloud Paksは、企業のアプリケーション最新化の取り組みを支援します

[51CTO.com からのオリジナル記事] 今日、デジタル化は新たな常態となり、伝統的な経済からデ...

licloud 香港 VPS の簡単なレビュー - 香港合理化ネットワーク 100M 帯域幅、その仕組みを説明します

数日前、licloud の香港 VPS がリリースされました。これは、100Mbps の帯域幅を年間...

クラウドコンピューティングがデジタル変革の原動力となる

私たちは絶えず進化する世界に住んでおり、すべての組織は新しいタイプのイノベーションに向けて行動を推進...

また認められました! Jiuzhou Cloud が「2020 エッジコンピューティングパワー TOP20」に選出

11月7日、エッジコンピューティングコミュニティが主催する「グローバルエッジコンピューティングカンフ...

電子商取引を行う伝統的な業界: イベント マーケティングを実施して Web サイトを収益性の高いものにする方法を教える 6 つのヒント

伝統的な業界の電子商取引サイトの場合、短期間で自社、製品、サイトの知名度と評判を迅速に高め、優れたブ...

恥ずかしい状況に直面しながら、Witkey の Web サイトはどのように前進できるでしょうか?

先月、Witkeyのウェブサイトを引き継ぎました。過去2年間、Witkeyのウェブサイトの市場影響力...

gotechperu-$7/KVM/Win/1g メモリ/30g ハードディスク/1T トラフィック/ロサンゼルス

gotechperu は比較的新しいホスティング会社で、3 年の歴史があると主張しています。公式 W...

Baidu Webmaster Tools の被リンク分析から見たリンク移転のポイント

皆さんは、もう百度ウェブマスターツールを使い始めていると思います。百度ウェブマスターツールのアップグ...

gcorelabs: クラウド サーバー (クラウド シリーズ) モスクワ データ センター 簡易評価

gcorelabs は、誰もが知っている VPS 事業だけではなく、クラウド(クラウドサーバー)事業...