Sistemas de base de datos de cadena de bloques híbridos: diseño y rendimiento (VLDB'2022)



Abstracto

Con el surgimiento de los sistemas de base de datos híbridos de blockchain, nuestro objetivo es analizar en profundidad el rendimiento y las compensaciones entre algunos sistemas representativos. Para lograr esto, implementamos Veritas y BlockchainDB desde cero. Para Veritas, proporcionamos dos tipos de escenarios de aplicación de Crash Fault Tolerance (CFT) y Byzantine Fault Tolerance (BFT). Específicamente, usamos Apache Kafka para implementar Veritas para escenarios de aplicaciones CFT y usamos Veritas y Tendermint para escenarios de aplicaciones BFT. Comparamos estos tres sistemas con implementaciones de código abierto existentes de BigchainDB. BigchainDB usa Tendermint para el consenso y ofrece dos versiones: una implementación predeterminada con canalización de cadena de bloques y una versión optimizada que incluye canalización de cadena de bloques y validación de transacciones paralelas. Nuestro análisis experimental confirma que los diseños CFT comúnmente utilizados por las bases de datos distribuidas exhiben un mayor rendimiento que los diseños BFT específicos de blockchain. Por otro lado, nuestro extenso análisis destaca las diversas opciones de diseño que enfrentan los desarrolladores e ilumina las compensaciones que deben realizarse al diseñar un sistema de base de datos de cadena de bloques híbrida.


提示:以下是本篇文章正文内容,下面案例可供参考

2 antecedentes y trabajos relacionados

En los últimos años, se han publicado varios trabajos que integran blockchain y bases de datos en conferencias de bases de datos [22, 30, 31, 37, 42, 46]. Dicho sistema permite a las empresas realizar negocios con confianza porque el libro mayor distribuido realiza un seguimiento de cada operación de la base de datos. Sin embargo, los diferentes escenarios comerciales tienen diferentes requisitos, por lo que se han creado muchos sistemas de base de datos de blockchain híbridos para diferentes escenarios de aplicación. En esta sección, describimos los sistemas de base de datos híbridos de blockchain existentes y mencionamos brevemente algunos sistemas similares que pueden clasificarse como bases de datos de contabilidad.

2.1 Sistema de base de datos blockchain híbrido

Veritas [22] es un diseño de base de datos compartida que integra la cadena de bloques subyacente (libro mayor) para mantener pruebas auditables y verificables. La interacción entre la base de datos y la cadena de bloques se realiza a través de validadores. Los validadores obtienen registros de transacciones de la base de datos, toman decisiones de verificación de corrección y las envían a otros validadores. La decisión final acordada por todos los validadores se registra en la cadena de bloques. Por lo tanto, la exactitud de los datos se puede verificar con los registros históricos almacenados en la cadena de bloques.
El diseño alternativo de Veritas [22] que elegimos implementar en este documento utiliza una tabla verificable compartida como almacén de claves. En este diseño, cada nodo tiene una copia completa de la tabla compartida y un registro a prueba de manipulaciones en forma de libro mayor distribuido, como se muestra en la Figura 1. El libro mayor almacena un registro de actualizaciones (escrituras) en tablas compartidas. Cada nodo envía sus registros locales y recibe registros remotos a través del servicio de transmisión. El diseño de tabla verificable de Veritas utiliza un control de concurrencia basado en marcas de tiempo. La marca de tiempo de la transacción se usa como el número de secuencia del registro de transacciones, y cada nodo tiene una marca de agua de la secuencia del registro de confirmación. Cuando se envía una solicitud de transacción a un nodo, primero ejecuta la transacción localmente y almacena en caché el resultado en la memoria. Luego envía el registro de transacciones a otros nodos a través del servicio de transmisión. Un nodo vacía el búfer de transacciones y actualiza la marca de agua del registro comprometido tan pronto como recibe la aprobación de todos los demás nodos.

BigchainDB [42] utiliza MongoDB [3] como motor de almacenamiento. Es decir, cada nodo mantiene su propia base de datos MongoDB local, como se muestra en la Figura 2. Se utiliza MongoDB debido a su soporte para activos, que es la principal abstracción de datos en BigchainDB. Tendermint [8] se utiliza para el consenso entre nodos en BigchainDB. Tendermint es un protocolo de consenso BFT, que garantiza que cuando un hacker malicioso controla un nodo, la base de datos MongoDB en otros nodos no se verá afectada. Cuando un nodo recibe la solicitud de actualización de un usuario, primero genera el resultado localmente y propone una propuesta de transacción, que se envía a otros nodos a través de Tendermint. Una vez que la mayoría de los nodos en BigchainDB llegan a un consenso sobre la transacción, los nodos envían los resultados almacenados en búfer y responden al cliente del usuario.
BlockchainDB [30] adopta el diseño de construir una base de datos compartida sobre la cadena de bloques. Se diferencia de otros sistemas porque divide la base de datos en varios fragmentos, como se muestra en la Figura 3, lo que reduce la sobrecarga de almacenamiento general. Si bien ahorra algo de espacio de almacenamiento, este diseño da como resultado una mayor latencia, ya que las solicitudes de datos pueden requerir búsquedas adicionales para ubicar el fragmento apropiado. En BlockchainDB, cada par integra un administrador de fragmentos para ubicar el fragmento donde reside una clave en particular. En términos de verificación, proporciona verificación síncrona (en línea) y asíncrona (fuera de línea), que se realiza por lotes.
FalconDB [46] es un sistema que proporciona auditabilidad y verificabilidad al requerir que tanto los nodos del servidor como los clientes persistan en los resúmenes de datos. Los nodos del servidor de FalconDB contienen la base de datos compartida y la cadena de bloques que registra el registro de actualización de la base de datos compartida. El nodo del cliente solo guarda el encabezado del bloque de la cadena de bloques guardado por el nodo del servidor. Usando estos encabezados, el cliente puede verificar la exactitud de los datos obtenidos del nodo del servidor. Estos nodos de clientes actúan como intermediarios entre los usuarios y la base de datos real.
ChainifyDB [37] propone un nuevo modelo de procesamiento de transacciones llamado "Consenso de cualquier libro mayor" (WLC). A diferencia de otros modelos de procesamiento, WLC no hace suposiciones sobre el comportamiento de la base de datos local. El principio fundamental de WLC es buscar el consenso sobre el efecto de las transacciones, no el orden de las transacciones. Cuando un servidor ChainifyDB recibe una transacción de un cliente, solicita ayuda del servidor de protocolo para verificar la transacción y luego envía la propuesta de transacción al servidor de pedidos. El servidor de pedidos agrupa las propuestas en un bloque en orden FIFO y distribuye el bloque a través de Kafka [20]. Cuando el servidor de consenso aprueba la transacción, se ejecutará secuencialmente en la base de datos subyacente del servidor de ejecución.

En un alto nivel, la base de datos relacional de blockchain [31] es muy similar a Veritas [22]. Sin embargo, en una base de datos relacional de blockchain [31] (BRD), el consenso se utiliza para ordenar bloques de transacciones en lugar de serializar transacciones dentro de un solo bloque. Las transacciones en bloques BRD se ejecutan simultáneamente con el aislamiento de instantánea serializable (SSI) en cada nodo, y se validan y confirman en serie. PostgreSQL [5] admite el aislamiento de instantáneas serializables, que se utiliza como motor de almacenamiento subyacente en BRD. Las transacciones se ejecutan de forma independiente en todas las bases de datos "no confiables", pero luego el servicio de pedidos las confirma en el mismo orden serializable.

2.2 Base de datos del libro mayor

A diferencia de los sistemas híbridos de bases de datos de cadenas de bloques, las bases de datos de libros mayores [6, 12, 26, 44, 48] están centralizadas en el sentido de que el libro mayor lo lleva una sola organización. En este documento, describimos brevemente algunas bases de datos contables existentes. Sin embargo, no evaluamos ni analizamos su desempeño.

Amazon Quantum Ledger Database [6] (QLDB) contiene un registro inmutable que registra cada cambio de datos de manera exacta y secuencial. El registro consta de bloques de solo agregar dispuestos en una cadena hash. Esto significa que los datos solo se pueden agregar al registro, no se pueden sobrescribir ni eliminar. Todo el registro está diseñado como un Merkle Tree, lo que permite a los usuarios realizar un seguimiento y comprobar la integridad de los cambios de datos.

Immudb [12] es una base de datos inmutable ligera y de alta velocidad con prueba y verificación criptográficas integradas. Immudb está escrito en Go puro y utiliza BadgerDB [17] como motor de almacenamiento. Badger es una base de datos clave-valor rápida implementada en Go puro utilizando la estructura de árbol LSM. Immudb garantiza la inmutabilidad mediante el uso interno de una estructura Merkle Tree, donde los datos se codifican mediante SHA-256. Además, immudb crea un verificador de consistencia para verificar periódicamente la exactitud de los datos.

Spitz [48] es una base de datos de contabilidad que admite
registros de transacciones inmutables y a prueba de manipulaciones. Utiliza Forkbase [43] como su almacenamiento subyacente, proporcionando un control de múltiples versiones similar a git para los datos. Spitz proporciona almacenamiento de celdas para almacenar datos y un libro mayor solo para agregar para almacenar registros de transacciones. Además, crea un árbol Merkle basado en el libro mayor para proporcionar verificabilidad.

LedgerDB [44] es la base de datos centralizada de Alibaba Group. Utiliza anclajes de notarización de tiempo TSA para proporcionar auditabilidad. Estos anclajes son generados por el protocolo de clavija bidireccional [41]. En comparación con las bases de datos contables anteriores, LedgerDB es diferente en el sentido de que admite no solo métodos de creación, actualización y consulta, sino también métodos para borrar y ocultar datos verificables. Con estos enfoques, LedgerDB está diseñado para satisfacer las necesidades del mundo real. Sin embargo, puede romper la inmutabilidad al tiempo que proporciona una fuerte verificabilidad. En cuanto al almacenamiento subyacente, LedgerDB es compatible con sistemas de archivos que incluyen HDFS [39], almacenes de valores clave como RocksDB [2], Merkle Patricia Tree [47] y un sistema de archivos de solo anexo estructurado linealmente llamado L-Stream [44]. Está especialmente diseñado para LedgerDB.

2.3 Resumen

Para resumir, las bases de datos híbridas de blockchain son sistemas descentralizados con tres componentes clave, a saber, (1) bases de datos compartidas que utilizan motores de almacenamiento como MySQL, MongoDB, Redis y (2) registros compartidos replicados a través de mecanismos de consenso como Kafka (CFT) y Tendermint ( BFT), etc., y (3) generalmente admiten un almacenamiento simple de clave-valor (KV) y una interfaz de usuario (API) para las operaciones de poner y obtener. En la Tabla 1, resumimos las técnicas utilizadas por los sistemas de base de datos híbridos de blockchain existentes para estos tres componentes clave.

四、Análisis de rendimiento

En esta sección, analizamos el rendimiento de los cinco sistemas descritos en la sección anterior, a saber, Veritas (Kafka), Veritas (TM), BigchainDB, BigchainDB (PV) y BlockchainDB. A continuación, describimos la configuración experimental.

4.1 Configuración de la configuración del experimento

Todos los experimentos se realizaron en una máquina local con el sistema operativo (OS) Ubuntu 18.04. La máquina tiene 256 núcleos de CPU físicos, 8 TB de RAM y 3 TB de almacenamiento en disco duro (HDD). Utilizando la herramienta iostat, el IOPS de la máquina se estima en 5,35. Todos los nodos de servidor y cliente del sistema bajo prueba se ejecutan en contenedores Docker en diferentes núcleos de CPU en esta máquina.

Para evaluar el desempeño de los cinco sistemas bajo prueba, enviamos 100,000 transacciones a cada sistema. Enviamos múltiples transacciones al sistema en paralelo con base en un parámetro de concurrencia que representa el número de clientes. Las transacciones se distribuyen uniformemente a diferentes nodos de servidor en el sistema. Para calcular el rendimiento, registramos la hora de inicio de la primera transacción y la hora de finalización de todas las transacciones. Luego registramos el número de transacciones comprometidas con éxito y calculamos el rendimiento dividiendo este número por el intervalo registrado previamente. Tenga en cuenta que solo consideramos las transacciones exitosas cuando calculamos el rendimiento, pero también puede haber fallas. Repetimos cada experimento 3 veces y reportamos la media. Cargamos 100 000 registros de valores clave de 1000 bytes en cada sistema antes de ejecutar la transacción.

Usamos Yahoo! Conjunto de datos de Cloud Services Benchmark [13] (YCSB) que se usa ampliamente para comparar bases de datos y cadenas de bloques [19, 35]. YCSB admite operaciones comunes de bases de datos, como escribir (insertar, modificar y eliminar) y leer. Aunque el YCSB define seis cargas de trabajo, en nuestros experimentos elegimos tres de estas seis cargas de trabajo. Las tres cargas de trabajo son (i) Carga de trabajo A, que consiste en un 50 % de operaciones de actualización y un 50 % de operaciones de lectura, (ii) Carga de trabajo B, que consta de un 5 % de operaciones de actualización y un 95 % de operaciones de lectura, y (ii) Carga de trabajo C, en un 100 % operaciones de lectura. Además, usamos tres distribuciones clave, a saber (i) una distribución uniforme que opera uniformemente en todas las claves, (ii) una distribución zipfian que opera con frecuencia solo en un subconjunto de claves, y (iii) una distribución reciente que opera en la mayoría de las claves. llave usada recientemente para operar. Predeterminamos la carga de trabajo A y la distribución uniforme a menos que se indique lo contrario.
La herramienta de evaluación comparativa fue desarrollada por nosotros en Go utilizando goroutines [14] y un canal [14] como una cola de solicitud segura simultánea. Los canales permiten que las gorutinas se sincronicen sin bloqueos explícitos o variables de condición. Cada cliente de referencia está representado por una gorutina que obtiene nuevas solicitudes del canal una vez que completa la solicitud actual.

1. ¿Qué son los pandas?

Ejemplo: pandas es una herramienta basada en NumPy creada para resolver tareas de análisis de datos.

2. Usar pasos

1. Importar biblioteca

El código es el siguiente (ejemplo):

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
import warnings
warnings.filterwarnings('ignore')
import  ssl
ssl._create_default_https_context = ssl._create_unverified_context

2. Leer datos

El código es el siguiente (ejemplo):

data = pd.read_csv(
    'https://labfile.oss.aliyuncs.com/courses/1283/adult.data.csv')
print(data.head())

Los datos solicitados por la red url utilizada aquí.


Resumir

提示:这里对文章进行总结:

Por ejemplo: lo anterior es de lo que hablaremos hoy. Este artículo solo presenta brevemente el uso de pandas, y pandas proporciona una gran cantidad de funciones y métodos que nos permiten procesar datos de manera rápida y conveniente.

Supongo que te gusta

Origin blog.csdn.net/weixin_41523437/article/details/124555901
Recomendado
Clasificación