Получить все ключи и значения подузлов от zookeeper
Я пытаюсь реализовать zookeeper в качестве движка общего состояния для приложения, которое я создаю в erlang. Структура для государства будет выглядеть следующим образом:
/appRoot
/parent1:{json}
/child1:{json}
/child2:{json}
/parent2:{json}
/child1:{json}
/child2:{json}
Я хотел бы иметь возможность иметь единственный метод, который возвращал бы все родительские узлы, когда предоставляется /appRoot вместе с его данными. Скажите в списке кортежей [{parent1,{json}}, {parent2:{json}}]. Или, если указан /appRoot/parent1, список его подузлов с данными. Пока что все, что я вижу, - это способ получить ключи (getChildren), а затем рекурсивно получить данные с помощью ключа. Кажется, я должен сделать один звонок, чтобы сделать это.
В настоящее время я использую клиентскую библиотеку ezk erlang. Если кто-нибудь знает лучшее решение, это также будет оценено.
ТИА
1 ответ
AFAIK нет способа атомарно перечислить дочерние узлы вместе с их данными в проводном протоколе zookeeper. Кажется, есть только один способ сделать это:
- Перечислите все дочерние узлы и следите за изменениями дочерних узлов.
- Для каждого дочернего узла читайте данные и отслеживайте изменения данных.
- Обновите соответствующие значения для каждого дочернего изменения, произошедшего после того, как вы начали обход.
Это можно легко сделать за ezk
, но я не предоставил пример кода, потому что он сильно зависит от гарантий атомарности, которые требовала логика вашего приложения.