Los árboles Merkle se utilizan como un mecanismo anti-entropía en varios almacenes de clave / valor replicados y distribuidos:
Sin duda, un mecanismo anti-entropía es algo bueno: las fallas transitorias simplemente ocurren en la producción. Simplemente no estoy seguro de entender por qué Merkle Trees es el enfoque popular.
Enviar un árbol Merkle completo a un par implica enviar el espacio de claves local a ese par, junto con los valores hash de cada valor de clave, almacenados en los niveles más bajos del árbol.
Para diferenciar un árbol Merkle enviado por un compañero, es necesario tener un árbol Merkle propio.
Dado que ambos pares ya deben tener un espacio ordenado clave / valor-hash a mano, ¿por qué no realizar una fusión lineal para detectar discrepancias?
Simplemente no estoy convencido de que la estructura del árbol proporcione algún tipo de ahorro cuando se tienen en cuenta los costos de mantenimiento, y el hecho de que ya se están realizando pases lineales sobre las hojas del árbol solo para serializar la representación sobre el cable .
Para fundamentar esto, una alternativa de hombre de paja podría ser hacer que los nodos intercambien matrices de resúmenes de hash, que se actualizan y clasifican de forma incremental según la posición del anillo de módulo.
¿Qué me estoy perdiendo?
Respuestas:
Los árboles Merkle limitan la cantidad de datos transferidos al sincronizar. Los supuestos generales son:
Un intercambio de Merkle Tree se vería así:
En el caso típico, la complejidad de sincronizar los espacios de claves será log (N). Sí, en el extremo, donde no hay claves en común, la operación será equivalente a enviar toda la lista ordenada de hashes, O (N). Uno podría amortizar el gasto de construir árboles Merkle construyéndolos dinámicamente a medida que ingresan las escrituras y manteniendo la forma serializada en el disco.
No puedo hablar de cómo Dynamo o Cassandra usan los árboles Merkle, pero Riak dejó de usarlos para la sincronización intra-clúster (la transferencia insinuada y la reparación de lectura son suficientes en la mayoría de los casos). Tenemos planes de volver a agregarlos más tarde, después de que hayan cambiado algunos bits arquitectónicos internos.
Para obtener más información sobre Riak, lo alentamos a unirse a la lista de correo: http://lists.basho.com/mailman/listinfo/riak-users_lists.basho.com
fuente