ZooKeeper データモデル・znode構造の詳細な説明

データ・モデル

zookeeperでは、zookeeperに格納されるすべてのデータはznodeで構成され、ノードはznodeとも呼ばれ、key/valueの形式でデータを格納します。

全体的な構造はLinuxファイルシステムの構造と似ており、ツリー構造で保存されます。 ルートパスは/で始まります。

zookeeperによってインストールされたbinディレクトリに入り、sh zkCli.shからコマンドラインターミナルを開き、”ls /”コマンドを実行します。

$ ls /
$ ls /zookeeper
$ ls /zookeeper/quota

この時点で格納されているデータには、ルートディレクトリにceodataとzookeeperの2つのノードがあり、zookeeperノードにはquotaという名前のノードがあることが直感的に分かります。

ceodataノードは前の記事で作成され、Javaクライアントによって値を0に設定しました。次に、コマンドラインターミナルでget /ceodata を実行して、このノードのプロパティを表示します。

$ get /ceodata

1行目に示されている0は、ノードのvalueです。

Znode 状態属性値の説明

cZxidノード作成時のトランザクションID
ctimeノードが作成された時刻
mZxid最後にノードが変更された時のトランザクションID
mtime最後にノードが変更された時刻
pZxidノードの子ノードリストの最後に変更されたトランザクションIDを示します。子ノードの追加または削除は子ノードリストに影響しますが、子ノードのデータの変更はIDに影響しません(子ノードリストが変更されたことを限りにPzxidが変更され、子ノードのデータを変更してもpzxidには影響しないことに注意してください)
cversion子ノードのバージョン番号。子ノードがバージョン番号を変更するたびに1ずつ増加します。
dataversionデータバージョン番号。データがバージョン番号を変更するたびに1ずつ増加します。
aclversion権限のバージョン番号。権限がバージョン番号を変更するたびに1ずつ増加します。
ephemeralOwner一時ノードのセッションのsessionIDを作成します。 **(このノードが永続ノードの場合、属性値は0です)**
dataLengthノードのデータの長さ
numChildrenノードには子ノードの数があります。(直接の子ノードの数のみをカウントします)

上記の状態属性値に対して、一応 /ceodata ノードを変更し、コマンドset /ceodata 1を実行します。次には例を挙げます。

$ set /ceodata 1

上記の結果を比較すると、mZxid、mtime、およびdataVersionがすべて変更されています。

/ceodata ノードに、別の子ノードを追加して実行します。

$ create -e  /ceodata/child  0
$ get /ceodata

ヒント:その他のコマンドについては、次の記事で詳しく説明します。

ターミナルコマンドラインを実行した後、次の内容が表示されます:

/ceodataノードのpZxid、cversion、およびnumChildrenがすべてそれに応じて変更されています。

Share

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です