¿Por qué querrías almacenar datos en Blockchain?
La primera pregunta que debes hacerte es: "¿Por qué quieres usar una cadena de bloques?"
Si no sabe la respuesta en este momento, no necesita una cadena de bloques. Período. ¡No dejes que la gente te confunda con todo este bombo!
¿Por qué soy tan duro con esto?
Bueno, déjame ponerlo de esta manera. Blockchain apesta. Excepto en 2 o 3 casos de borde.
Es lento, complejo, costoso y difícil de trabajar.
Elegir blockchain porque es moderno y moderno es como llevar un tanque a una carrera.
Puede parecer impresionante y eres a prueba de balas, pero después de todo, perderás la carrera a lo grande.
Mira, todo lo que quiero decir es que siempre debes elegir la herramienta adecuada para el trabajo.
¡Despotricar sobre!
Donde Blockchain realmente brilla
Solo debe usar blockchain si uno o más puntos se aplican a su caso de uso:
Tamper-Evidence Desea saber cuándo un conjunto de datos ha cambiado. Necesita pruebas de que / cuando fue (no) cambiado.
Descentralización No quieres tener una autoridad central. En cambio, desea otorgar el control sobre los datos a la red, porque no puede confiar en las partes involucradas.
Transparencia Desea que sus datos sean visibles para todos para establecer confianza.
Uso de transacciones para almacenar datos en Blockchain
Blockchain, especialmente las diseñadas para alojar una moneda, están utilizando un modelo de transacción.
Por ejemplo, "Alice envía dinero a Bob" es una transacción. Esta transacción contiene la dirección del remitente (Alice), la dirección del receptor (Bob), la cantidad de dinero transferido.
Este enfoque es muy intuitivo cuando se trata de transacciones de dinero, pero ¿cómo se supone que debemos almacenar datos con este concepto?
Para almacenar nuestros datos personalizados en la cadena de bloques, necesitamos empaquetar nuestros datos en transacciones para poder almacenarlos.
Usando el protocolo
Algunas cadenas de bloques ofrecen la posibilidad de agregar datos a una transacción dentro de sus protocolos. En este caso, simplemente podemos agregar nuestros datos a nuestra transacción.
Si ese no es el caso, necesitamos ser un poco más creativos.
Ser creativo
Algunas cadenas de bloques no tienen esa característica.
En este caso, todavía podemos almacenar una pequeña cantidad de datos en la cadena mediante el uso de direcciones.
Para guardar algunos datos, simplemente los codificamos (si es necesario) y los usamos como una dirección para enviar una transacción. Al hacerlo, los datos se almacenan en la cadena de bloques. En lugar de utilizar algún campo de carga útil dentro de la transacción, los datos se codifican en la dirección de recepción.
La desventaja de esta técnica es que la cantidad de datos no puede ser mayor que el tamaño de la dirección de las cadenas de bloques (que es muy pequeña). Además, no solo tenemos que pagar la tarifa de transacción, sino que también tenemos que quemar un poco de dinero.
Es decir, porque no poseemos la dirección a la que enviamos la transacción, por lo que se pierde el dinero que transferimos.
¿Por qué es un problema almacenar datos en cadena?
El mayor problema de almacenar datos en una cadena de bloques es la cantidad de datos que puede almacenar. Esto se debe a que la cantidad está limitada por el protocolo o debido a las enormes tarifas de transacción que tendría que pagar.
El costo de almacenar datos
Entonces, ¿por qué es tan costoso almacenar datos en la cadena? Porque la cantidad de datos que almacena tiene que ser almacenada por cada nodo completo en este planeta. Todos los que descargan blockchain también descargan su información.
Es por eso que incluso almacenar kilobytes puede costarle una fortuna.
Al almacenar datos en la cadena de bloques, la mayoría de las veces pagamos un precio base por la transacción en sí más un monto por byte que queremos almacenar. Si hay contratos inteligentes involucrados, también pagamos el tiempo de ejecución del contrato inteligente.
¿Cuántos datos se pueden almacenar en una Blockchain?
Sin embargo, la cantidad de datos que podemos almacenar es bastante limitada. Para darle una sensación, la mayoría de las cadenas permiten algo en el rango de kilobytes o menos.
Teóricamente, podríamos eludir esa limitación dividiendo nuestros datos en muchos fragmentos pequeños. Eso nos permitiría almacenar archivos / datos más grandes, pero también aumentaría significativamente nuestros costos. Esto se debe a que tendríamos que pagar el precio base (grande) de la transacción varias veces.
Entonces, después de todo, la cantidad de datos que podemos almacenar es bastante limitada.
Almacenar información sensible en Blockchain
Surge otro problema al almacenar datos en la cadena de bloques, cuando consideramos guardar datos personales o confidenciales.
En realidad hay dos problemas aquí:
Si elegimos una cadena de bloques pública como ethereum, los datos que almacenamos estarían disponibles para todos. Esto se debe a que en una red blockchain, (casi) cada participante tiene una copia de toda la cadena. Pero incluso si decidiera construir nuestra propia cadena privada, cada participante obtendría una copia. La diferencia aquí es que tenemos control sobre quién se une a la red y obtiene una copia.
La mayoría de la información personal o confidencial debe eliminarse en algún momento. Especialmente teniendo en cuenta el nuevo GDPR. Desafortunadamente, la eliminación de datos de la cadena no es posible por diseño.
Una solución a este problema podría ser el cifrado de los datos. La desventaja de este enfoque es que ahora tenemos que lidiar con las claves de cifrado (que deben almacenarse en otro lugar) y su distribución.
Otra solución podría ser almacenar hashes de los datos en lugar de los datos en sí. Discutiremos este enfoque en un capítulo posterior con más detalle.
¿A dónde fueron mis datos? Consultando datos de Blockchain
Bien. A pesar de los problemas descritos anteriormente, de alguna manera logramos obtener nuestros datos en la cadena de bloques ...
¿Cómo conseguimos la espalda, en caso de que la necesitemos?
Un blockchain no es un servidor SQL donde podríamos consultar nuestros datos.
De hecho, la mayoría de las blockchains solo permiten descargar transacciones por su id (hash).
Entonces, ¿cómo resolvemos todos estos problemas?
Cómo almacenar grandes conjuntos de datos en Blockchain
Entonces, si almacenar datos en la cadena de bloques tiene tantos inconvenientes, ¿tiene sentido almacenar algo en la cadena de bloques?
Si lo hace!
Resulta que hay muchas formas de almacenar datos en la cadena de bloques. Almacenar los datos en bruto es uno de ellos.
¿Pero cuáles son las otras opciones?
Almacenar hashes en la blockchain
Una forma de obtener los beneficios de una cadena de bloques sin pagar una fortuna por las transacciones es solo almacenar el hash de los datos en la cadena de bloques.
¿Qué es un hash? Un hash es una cadena generada, que se calcula utilizando nuestros datos de entrada. Con la misma entrada, el hash de salida siempre será el mismo. Otra entrada da como resultado otro hash.
De esa manera podemos saber si nuestros datos fueron modificados simplemente mirando el hash.
Uso de mecanismos de almacenamiento tradicionales Lo único que almacenamos en la cadena de bloques es el hash de nuestros datos. En comparación con nuestros datos, el hash es muy pequeño, por lo que el costo de una transacción es relativamente bajo.
Los datos sin procesar se pueden almacenar de la forma que queramos. Por ejemplo, podríamos usar una base de datos relacional o simplemente un sistema de archivos.
Todo lo que necesitamos hacer es asegurarnos de que asignamos el id (hash) de la transacción blockchain a nuestros datos sin procesar. En una base de datos relacional, agregaríamos otra columna para almacenar la identificación de la transacción.
De esa manera, podemos utilizar las ventajas de los mecanismos de almacenamiento tradicionales (como consultas) mientras obtenemos la evidencia de manipulación de la cadena de bloques.
En cualquier momento, hay dudas sobre los datos, podemos analizar los datos sin procesar y compararlos con el hash en la transacción asignada en la cadena de bloques.
Dependiendo de su mecanismo de almacenamiento, se pierden beneficios como la descentralización y la transparencia.
Almacenar un subconjunto de datos en Blockchain
Podemos recuperar esos beneficios hasta cierto punto, almacenando el hash de los datos y partes de los datos en la cadena de bloques.
Dependiendo de las partes de los datos, recuperamos cierta transparencia, porque los datos ahora son accesibles de nuevo públicamente.
Además, el subconjunto de datos se almacena descentralizado en lugar de almacenarse en una base de datos central.
Opciones para almacenar datos fuera de la cadena
Como ya descubrimos, probablemente sea una buena idea usar algún tipo de mecanismo fuera de la cadena para almacenar grandes cantidades de datos.
Como siempre, hay muchas opciones para elegir. Algunos son totalmente de la vieja escuela y otros se desarrollaron en los últimos años para funcionar especialmente con blockchain.
Base de datos tradicional
Comencemos con la elección obvia. Una base de datos tradicional como MySQL o incluso un MongoDB, un poco más moderno.
Pros
Contras
Base de datos distribuida
En una base de datos distribuida, los datos se replican en muchos nodos en muchas ubicaciones. Esto crea una redundancia en caso de falla de una sola máquina. También puede reducir la latencia para aplicaciones a escala mundial. Ejemplos podrían ser MongoDB con conjuntos de réplicas habilitados o soluciones en la nube como Azure CosmosDB.
Pros
Contras
Sistema de archivos distribuido
Los sistemas de archivos distribuidos también almacenan sus archivos en muchas máquinas. Nuevamente, esto es para crear redundancia en caso de falla. La diferencia con las bases de datos distribuidas es que un sistema de archivos no tiene las capacidades de consulta fuertes. En cambio, solo se puede acceder a los archivos conociendo el nombre / ruta del archivo.
Además, algunos sistemas de archivos distribuidos como IPFS (Inter-Planetary File System) se consideran un esfuerzo comunitario. Al igual que con blockchain, hay una red pública donde todos pueden almacenar sus archivos. La diferencia aquí es que no todos tienen que almacenar una copia de los datos. Una redundancia de x copias se considera suficiente.
Pros
Contras
Conclusión
En este tutorial obtuvimos una visión general de los problemas y soluciones para almacenar (grandes cantidades de) datos en la cadena de bloques.
Espero que ahora tenga una idea de la situación y las posibles direcciones. Después de todo, depende de usted elegir la solución adecuada para su caso de uso especial.
Si te gustó este resumen, ¡considera compartirlo!