Модель данных
В zookeeper можно сказать, что все хранимые данные в zookeeper состоят из znodes. Узлы также называют znodes, и данные хранятся в форме ключ/значение.
Общая структура похожа на шаблон файловой системы Linux, хранится в виде древовидной структуры. Корневой путь начинается с/в начале.
Перейдите в каталог bin установки zookeeper, откройте терминал командной строки с помощью sh zkCli.sh и выполните команду "ls /", чтобы отобразить:$ ls / $ ls /zookeeper $ ls /zookeeper/quota

Мы можем наглядно видеть, что в настоящее время в хранимых данных есть два узла, example и zookeeper, в корневом каталоге, и под узлом zookeeper есть узел с именем quota.

Узел example был создан в нашей предыдущей главе, и его значение было установлено в 0 через Java-клиент. Теперь мы выполняем в терминале командной строкиget /example, чтобы отобразить атрибуты этого узла.
$ get /example

0, отображаемый в первой строке, — это значение этого узла.
Атрибуты состояния Znode
| cZxid | Идентификатор транзакции при создании узла |
|---|---|
| ctime | Время создания узла |
| mZxid | Идентификатор транзакции при последнем изменении узла |
| mtime | Время последнего изменения узла |
| pZxid | Указывает идентификатор транзакции последнего изменения списка дочерних узлов данного узла. Добавление или удаление дочерних узлов влияет на список дочерних узлов, но изменение содержимого данных дочернего узла не влияет на этот идентификатор.(Примечание: только изменения в списке дочерних узлов изменяют pzxid; изменения содержимого дочернего узла не влияют на pzxid) |
| cversion | Номер версии дочернего узла; номер версии увеличивается на 1 при каждом изменении дочернего узла |
| dataversion | Номер версии данных; номер версии увеличивается на 1 при каждом изменении данных |
| aclversion | Номер версии прав доступа; номер версии увеличивается на 1 при каждом изменении прав доступа |
| ephemeralOwner | Идентификатор сессии (session ID) той сессии, которая создала этот эфемерный узел.(**Если узел является постоянным узлом, то значение этого атрибута равно 0)** |
| dataLength | Длина данных этого узла |
| numChildren | Количество дочерних узлов у данного узла(Учитывается только количество прямых дочерних узлов) |
Разобравшись с приведёнными выше значениями атрибутов состояния, мы/exampleвнесём изменение в узел, выполнив командуset /example 1, как показано на рисунке ниже:
$ set /example 1

Сравнив приведённые выше результаты, можно заметить, что mZxid, mtime и dataVersion изменились.
В узел/exampleмы добавляем ещё один дочерний узел, выполняем:
$ create -e /example/child 0 $ get /example
Примечание:Более подробно использование команд будет рассмотрено в последующих главах.
После выполнения командная строка терминала выводит:

Видно, что у узла/exampleсоответствующим образом изменились pZxid, cversion и numChildren.