データモデル

zookeeper では、zookeeper に保存されているすべてのデータは znode で構成されていると言えます。ノードは znode とも呼ばれ、データは key/value 形式で保存されます。

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

zookeeper のインストール先の bin ディレクトリに入り、sh zkCli.sh でコマンドライン端末を開き、"ls /" コマンドを実行すると表示されます:
$ ls /
$ ls /zookeeper
$ ls /zookeeper/quota

このとき保存されているデータは、ルートディレクトリに サンプル と zookeeper の2つのノードがあり、zookeeper ノードの下に quota というノードがあることが直感的にわかります。

サンプル ノードは前の章で作成し、Java クライアントを介して値を 0 に設定しました。ここでコマンドライン端末で実行しますget /サンプルこのノードの属性を表示します。

$ get /サンプル

そのうち、最初の行に表示されている 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このノードが持つ子ノードの数(直接の子ノードのみカウントします)

上記の状態属性値を理解したところで、私たちは/サンプルノードに一度変更を加え、コマンドを実行しますset /サンプル 1、下図に示すように:

$ set /サンプル 1

上記の結果と比較すると、mZxid、mtime、dataVersion がすべて変更されたことがわかります。

に/サンプルノードの下に、さらに子ノードを1つ追加し、次を実行します:

$ create -e  /サンプル/child  0
$ get /サンプル

ヒント:その他のコマンドの使い方は、後の章で詳しく説明します。

ターミナルのコマンドラインを実行すると、以下のように表示されます:

見てわかるように、/サンプルノードの pZxid、cversion、numChildren はすべて相応に変更されました。