ホームページ  >  記事  >  Java  >  ZooKeeper データモデル

ZooKeeper データモデル

巴扎黑
巴扎黑オリジナル
2017-06-26 11:12:581218ブラウズ

ZooKeeper には、分散ファイル システムに似た階層名前空間があります。それらの唯一の違いは、名前空間内の各ノードがその子ノードとしてデータ関連付けを持つことができることです。これは、ファイルをファイルのディレクトリにすることができるファイル システムのようなものです。ノード パスは通常、正規のスラッシュで区切られた絶対パスとして表現されます。相対パスはありません。パスに含まれる Unicode 文字は、次の制約に従う必要があります。
1) Null 文字はパス名として使用できません。
2) 次の文字列は、表示が十分にわかりやすくなく、混乱を引き起こしやすいため、上位として使用できません。 u0001 - u001F および u007F - u009F)
3) 以下の文字列は使用できません。 (ud800 - uF8FF、uFFF0 - uFFFF)
4) 「.」文字は名前の一部として使用できますが、ZooKeeper はノードのパスを表すために単独で存在することはできません。相対パスを使用します。次の例は無効な "/a/b/./c" または "/a/b/../c" です
5) "zookeeper" キーワードは予約されています

ZooKeeper ツリー構造内の ZNodes

のノードは znode と呼ばれます。 Znode は、データ変更バージョン番号、ACL 変更、およびタイムスタンプを含むステータス データ構造を維持します。バージョン番号とタイムスタンプにより、ZooKeeper はキャッシュの置換と更新の調整を実行できるようになります。 znode のデータが変更されるたびに、バージョン番号が増加します。たとえば、クライアントはデータを受信するたびに、このデータのバージョンも受信します。同時に、クライアントが更新または削除操作を実行するときは、変更される znode ノードのデータ バージョンを提供する必要があります。 znode によって提供されるバージョン番号が現在のデータの実際のバージョン番号と一致しない場合、更新は失敗します。

注:

分散アプリケーションプロジェクトでは、単語ノードは単一のホスト、サーバー、全体のメンバー、クライアントプロセッサなどと考えることができます。 ZooKeeper のドキュメントでは、znode はデータ ノードとみなされます。サーバーは、ZooKeeper サービスを構成するホストとみなされます。クォーラム ピアは全体を形成するサーバーとみなされ、クライアントは ZooKeeper サービスを使用するホストまたはプロセスとみなされます。

Znode はプログラマがアクセスする主要なエンティティです。これらには、知っておく価値のある多くの機能があります:

ウォッチ (リスナー)

クライアントは znodes でリッスンできます。 znode を変更すると、このリスナーがトリガーされ、その後クリアされます。リスナーがトリガーされると、ZooKeeper はクライアントに通知を送信します。

データアクセス

ネームスペースのznodeに保存されたデータは、アトミックに読み書きされます。読み取り操作は znode に関連付けられたすべてのデータ バイトを読み取り、書き込み操作はすべてのデータを置き換えます。各ノードには、誰が何を実行できるかを制限するアクセス制御リスト (ACL) データ アクセス リストがあります。

ZooKeeper はデータベースやラージ オブジェクト ストレージとして使用するように設計されていません。代わりに、データの管理と調整に使用されます。データのソース形式には、構成情報、ステータス情報、地域情報などが考えられます。さまざまな形式の調整データに共通する特性は、データが KB バイトの範囲で比較的小さいことです。 ZooKeeper クライアントとサーバーの両方には、znode が 1M 未満のデータであることを確認する健全性チェックがありますが、データはこの平均よりもはるかに小さい可能性があります。比較的大きなデータを操作すると、ネットワークまたはストレージ メディアを介したデータの移行が必要になるため、操作に時間がかかり、他の操作の遅延に影響します。ビッグ データのストレージが必要な場合、このデータを処理する通常の方法は、NFS や HDFS などの大規模ストレージ システムにデータを保存し、ZooKeeper にデータ ストレージの場所へのポインタを保存することです。

エフェメラルノード (一時ノード)

ZooKeeper には一時ノードの概念があります。ノードを作成したセッションがアクティブである限り、これらのノードは引き続き存在し、セッションが終了すると、これらのノードも削除されます。この動作のため、一時ノードは子ノードを持つことができません。

シーケンス ノード -- 固有の名前付け (シーケンス ノード - 固有の名前付け)

ノードを作成するとき、パスの最後に単調増加するカウンターを追加するように ZooKeeper に依頼できます。このカウンタは、この親ノードに固有です。カウンタの形式は %010d (10 進数にゼロが埋め込まれます) で、単純な並べ替え用に形式化されています。たとえば、「0000000001」などです。この機能の使用例については、「キュー レシピ」を参照してください。注: 次のシーケンス番号を格納するために使用されるカウンターは、親ノードによって維持される signed int です。このカウンタは、2147483647 を超えるとオーバーフローします (結果は "-2147483647" になります)。

以上がZooKeeper データモデルの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。