Поясніть дерева Меркле для використання у випадковій послідовності


79

Дерева Merkle використовуються як механізм проти ентропії в декількох розподілених, тиражованих сховищах ключів / вартості:

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

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

  • Щоб відрізняти дерево Меркле, надіслане від однолітка, потрібно мати власне дерево Меркле.

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

Я просто не впевнений, що деревоподібна структура забезпечує будь-яку економію, якщо врахувати витрати на утримання, і той факт, що лінійні переходи над листям дерева вже робляться лише для серіалізації подання по дроту .

Щоб обгрунтувати це, альтернативою солом'яної людини може бути наявність вузлів, що обмінюються масивами хеш-дайджестів, які поступово оновлюються і групуються за модулем позиції кільця.

Чого мені не вистачає?


2
Дерева Меркле тепер мають власну тему у Вікіпедії: en.wikipedia.org/wiki/Merkle_tree
Трентон,

Відповіді:


88

Дерева Меркле обмежують обсяг переданих даних під час синхронізації. Загальними припущеннями є:

  1. Мережевий ввід-вивід дорожчий, ніж обчислювальні хеші локального вводу-виводу +.
  2. Передача всього відсортованого простору ключів дорожча, ніж поступове обмеження порівняння протягом декількох кроків.
  3. Ключові простори мають менше розбіжностей, ніж подібності.

Обмін Merkle Tree виглядатиме так:

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

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

Я не можу говорити про те, як "Динамо" чи "Кассандра" використовують дерева Меркле, але Ріак перестав використовувати їх для внутрішньокластерної синхронізації (в більшості випадків достатньо натякнутої передачі та відновлення читання). Ми маємо плани додати їх пізніше після того, як змінились деякі внутрішні архітектурні елементи.

Щоб отримати додаткову інформацію про Riak, радимо вам приєднатися до списку розсилки: http://lists.basho.com/mailman/listinfo/riak-users_lists.basho.com


1
А-а-а, взаємно-обмінний обмін був тим, чого мені не вистачало. Дякую.
Johnny Graettinger

4
Вони були повторно введені в реалізацію AAE Riak 1.3.
Кодероші
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.