Получить все ключи и значения подузлов от 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. Кажется, есть только один способ сделать это:

  1. Перечислите все дочерние узлы и следите за изменениями дочерних узлов.
  2. Для каждого дочернего узла читайте данные и отслеживайте изменения данных.
  3. Обновите соответствующие значения для каждого дочернего изменения, произошедшего после того, как вы начали обход.

Это можно легко сделать за ezk, но я не предоставил пример кода, потому что он сильно зависит от гарантий атомарности, которые требовала логика вашего приложения.

Другие вопросы по тегам