Объясните деревья Merkle для использования в конечной последовательности

Дерево Меркле используются в качестве антиэнтропийного механизма в нескольких распределенных, реплицированных хранилищах ключей / значений:

без сомнения, антиэнтропийный механизм-хорошая вещь-переходные сбои просто случаются, в производстве. Я просто не уверен, что понимаю, почему Merkle деревьев популярные подход.

  • отправка полного дерева Merkle одноранговому узлу включает отправку локального пространства ключей этому одноранговому узлу вместе с хэши каждого значения ключа, хранящиеся на самых низких уровнях дерева.

  • сравниваете дерево Меркле отправлено от сверстников требует наличия дерево Меркле самостоятельно.

поскольку оба одноранговых узла уже должны иметь отсортированное хэш-пространство ключа / значения, почему бы не выполнить линейное слияние для обнаружения расхождения?

Я просто не уверен, что древовидная структура обеспечивает какую-либо экономию, когда вы учитываете расходы на содержание, и тот факт это линейные проходы над листьями дерева уже выполняются только для сериализации представления по проводу.

чтобы заземлить это, альтернативой соломенного человека может быть обмен массивами узлов хэш-дайджестов, которые постепенно обновляются и букетируются по модулю ring-position.

Что же Я пропал?

1 ответов


Merkle деревья ограничивают количество данных, передаваемых при синхронизации. Общие предположения:

  1. сетевой ввод-вывод дороже, чем локальный ввод-вывод + вычисление хэшей.
  2. перенос всего отсортированного пространства ключей дороже, чем постепенное ограничение сравнения в течение нескольких шагов.
  3. ключевые пространства имеют меньше расхождений, чем сходства.

обмен Merkle Tree будет выглядеть так это:

  1. начните с корня дерева (список одного хэш-значения).
  2. источник отправляет список хэшей на текущем уровне.
  3. назначение различает список хэшей против своих собственных, а затем запрашивает поддеревья, которые отличаются. Если нет различия, запрос может завершиться.
  4. повторите шаги 2 и 3, пока не будут достигнуты листовые узлы.
  5. источник отправляет значения ключей в результирующем набор.

в типичном случае сложность синхронизации ключевых пространств будет log(N). Да, в крайнем случае, когда нет общих ключей, операция будет эквивалентна отправке всего отсортированного списка хэшей, O (N). Можно амортизировать расходы на создание деревьев Меркла, создавая их динамически по мере поступления записей и сохраняя сериализованную форму на диске.

Я не могу говорить о том, как Динамо или Кассандра используют деревья Меркла, но РИАК перестал использовать их для внутрикластерной синхронизации (в большинстве случаев достаточно намеков на handoff и read-repair). Мы планируем добавить их позже, после того, как некоторые внутренние архитектурные биты изменились.

для получения дополнительной информации о Riak мы рекомендуем вам присоединиться к списку рассылки:http://lists.basho.com/mailman/listinfo/riak-users_lists.basho.com