Merkle DAG: Deduplicación | Lección 7 de 8
Aprende cómo podemos usar los CID para crear estructuras de datos direccionables por contenido para la web distribuida.
Last updated
Aprende cómo podemos usar los CID para crear estructuras de datos direccionables por contenido para la web distribuida.
Last updated
Los Merkle DAGs ofrecen una forma directa de lograr la deduplicación de datos, almacenando eficientemente los datos al codificar las secciones redundantes como enlaces. Esto puede ocurrir tanto en escalas pequeñas como grandes.
Para un ejemplo de duplicación de datos a pequeña escala, considera el caso de uso de seguimiento de cambios en archivos en un directorio a lo largo del tiempo (esto a menudo se llama versionado). Un cambio que podríamos hacer en este directorio es eliminar el directorio "fish", reemplazándolo por un directorio llamado "dogs". Estos cambios resultan en un nuevo DAG, representando un estado actualizado del directorio. Sin embargo, todos los nodos que representan el directorio "cats" y sus archivos son comunes a ambos DAGs. Por lo tanto, podemos reutilizarlos, como se muestra a continuación, donde los nodos naranjas representan nodos que solo se usan en el DAG original, los nodos verdes representan aquellos que son comunes a ambos, y los nodos azules representan los nodos adicionales necesarios para el nuevo estado.
Esto significa que podemos almacenar ambas versiones del directorio "pics", ¡sin ocupar el doble de espacio que se necesita para almacenar una sola versión! Git, un sistema común de control de versiones, utiliza los Merkle DAGs de una manera muy similar para rastrear los cambios en el código fuente en proyectos de software.
La deduplicación marca una gran diferencia cuando expandes este concepto a una escala mayor. Por ejemplo, considera el caso de uso de navegar por la web. Cuando una persona visita una página web usando un navegador, el navegador debe primero descargar cualquier recurso asociado con la página, incluyendo imágenes, texto y marcado de estilo. Puede que hayas notado que muchas páginas web se parecen bastante, utilizando variantes ligeramente diferentes de un tema común. A menudo, hay mucha redundancia aquí: los temas son mayormente los mismos, con ajustes aquí y allá en los datos que los describen.
En la web direccionada por ubicación, cada uno de estos temas, a pesar de compartir muchos de los mismos datos, a menudo se descarga completamente de nuevo, ya que no hay una forma fácil de identificar esta redundancia. En contraste, si se usaran Merkle DAGs para distribuir los temas, todos compartirían un núcleo común identificable que permanecería sin cambios de un tema a otro, y así el navegador podría ser lo suficientemente inteligente como para evitar descargar este componente más de una vez. Siempre que un usuario visitara un nuevo sitio web utilizando una variación del tema, el navegador solo necesitaría descargar los nodos de su DAG correspondientes a las partes que son diferentes, ¡habiendo ya descargado previamente el resto! Para recursos que se utilizan extremadamente en todo Internet (piensa en temas de WordPress, la biblioteca CSS de Bootstrap o bibliotecas comunes de JavaScript), esto podría resultar en una tremenda reducción de descargas innecesarias y desperdiciadoras.
La direccionabilidad de contenido nos permite formar algo así como un sistema de archivos global y distribuido. Usando Merkle DAGs , puedes "almacenar" un conjunto de datos masivo sin realmente tener que almacenarlo: mientras tengas conexión a Internet, puedes recuperar las piezas que necesites en cualquier momento dado. De hecho, ¡nadie tiene que almacenar todo el conjunto de datos! Los CIDs nos permiten enlazar y construir colecciones de datos de manera fluida a través de computadoras, ayudando a todos a usar el espacio de almacenamiento de manera más eficiente (aunque, cabe mencionar, a menudo también queremos duplicar datos por redundancia).
También no estamos limitados en la granularidad de nuestros DAGs: en lugar de trabajar con nodos grandes que corresponden a archivos enteros, podemos dividir un archivo en trozos y hacer un DAG con ellos. Cuando hacemos esto, a menudo podemos encontrar formas de deduplicar los contenidos de archivos similares.