¿Qué es Couchbase?
Couchbase es una base de datos de documentos NoSQL distribuida que proporciona una solución de gestión de datos flexible, de alto rendimiento y escalable. Combina las mejores características de las bases de datos de documentos con los almacenes de valores clave, lo que la hace muy adecuada para el desarrollo de aplicaciones modernas.
Entre las principales características de Couchbase se incluyen:
-
- Almacenamiento orientado a documentos: Couchbase almacena los datos como documentos JSON, lo que permite un diseño flexible del esquema.
- Arquitectura "Memory-First: El enfoque memory-first de Couchbase garantiza un alto rendimiento al mantener en memoria los datos a los que se accede con frecuencia.
- Escalado multidimensional (MDS): Couchbase MDS mejora el rendimiento y reduce los costes al permitirte escalar tus servicios de consulta, índice y datos por separado.
- Capa de caché integrada: Las funciones de caché integradas permiten acceder rápidamente a los datos más utilizados.
- Lenguaje de consulta similar a SQL (SQL++): Couchbase ofrece un lenguaje de consulta compatible con SQL para facilitar la recuperación y manipulación de datos.
- Indexación avanzada: Múltiples opciones de indexación, incluidos índices primarios, secundarios, espaciales y de búsqueda de texto completo.
- Capella Columnar: Base de datos analítica NoSQL nativa de JSON con capacidades GenAI. Utilícela para reunir datos de múltiples fuentes y ejecutar consultas analíticas complejas para obtener información oportuna a partir de los datos.
¿Por qué Couchbase con Fabric?
Tejido Hyperledger ya soporta CouchDB como una opción de base de datos de estado más allá de la predeterminada LevelDB. Sin embargo, integrar Couchbase proporciona varias ventajas:
-
- Escalabilidad mejorada: La arquitectura distribuida de Couchbase permite un mejor escalado horizontal que CouchDB, esencial para las redes empresariales de blockchain con volúmenes de datos crecientes.
- Mejora del rendimiento: El diseño memory-first de Couchbase ofrece un mejor rendimiento para redes blockchain de alto rendimiento. Esto es particularmente importante para consultas complejas y consultas ricas en el estado del mundo.
- Características de la empresa: Couchbase proporciona características de nivel empresarial como:
- Herramientas avanzadas de supervisión y gestión
- Recuperación en caso de catástrofe integrada
- Replicación entre centros de datos (XDCR)
- Índices de memoria optimizada
- Captura de datos de cambios (CDC), registra y conserva los cambios a nivel de documento para procesarlos en tiempo real.
- Soporte de consultas enriquecidas: Couchbase soporta consultas ricas contra el estado del mundo, pero con mejores características de rendimiento para consultas complejas.
- Mejor concurrencia: Couchbase gestiona las operaciones concurrentes de forma más eficiente que CouchDB, lo que es importante para las redes de blockchain con muchas transacciones.
- Integración del SDK nativo: Couchbase proporciona un SDK robusto en múltiples lenguajes de programación, lo que facilita la integración con diversas aplicaciones y servicios.
- Analítica: Ejecute análisis en sus datos de Fabric utilizando el almacenamiento columnar de Couchbase Enterprise Analytics para un procesamiento más rápido de grandes conjuntos de datos, lo que permite obtener información en tiempo real sobre las transacciones de blockchain sin afectar al rendimiento operativo.
Configuración rápida
Esta es una configuración rápida sólo para propósitos de prueba. En esta configuración utilizaremos tejido-muestras. También puede ver esto Vídeo de demostración 🔗
1. Configuración de Couchbase Server
-
- Instale Couchbase Server, siga las instrucciones aquí
- Abra la consola web de Couchbase (normalmente en http://localhost:8091)
- Configurar credenciales de administrador para el usuario: Administrador y contraseña: Contraseña@123
- Cree dos cubos denominados tela-1 y tela-2 (al crear un cubo se creará Por defecto por sí solo)
2. Configuraciones de tejido
- Clona el repositorio fabric-samples:
12git clonar https://github.com/hyperledger/fabric-samplescd tela-muestras - Descargue los binarios adecuados para su máquina y extráigalos del repositorio fabric-samples:
- https://github.com/jaykumar-cb/fabric/releases
- https://github.com/hyperledger/fabric-ca/releases
123rizo -L https://github.com/jaykumar-cb/fabric/releases/download/v3.1.0/hyperledger-fabric-[TU_ARCH]-3.1.0.tar.gz | tar -xz -C .rizo -L https://github.com/hyperledger/fabric-ca/releases/download/v1.5.15/hyperledger-fabric-ca-[SU_ARCH]-1.5.15.tar.gz | tar --strip-components=1 -xz -C bin
- Si estás en MacOS ejecuta el siguiente comando para eliminar los binarios de la cuarentena:
1xattr -rd com.manzana.cuarentena papelera - Abra las muestras de tejido en su editor de texto preferido
- Crea estos archivos:
1234567891011121314151617181920212223242526272829303132333435363738# fabric-samples/test-network/compose/compose-couchbase.yamlversión: '3.7'redes:prueba:nombre: fabric_testservicios:par0.org1.ejemplo.com:imagen: cbjaykumar/fabric-peer:latestmedio ambiente:- CORE_LEDGER_ESTADO_STATEDATABASE=Couchbase # Establece el statedb en couchbase- CORE_LEDGER_ESTADO_COUCHBASECONFIG_COUCHBASEADDRESS=couchbase://host.docker.internal # utilice su host de despliegue- CORE_LEDGER_ESTADO_COUCHBASECONFIG_USERNAME=Administrador Nombre de usuario # para su clúster- CORE_LEDGER_ESTADO_COUCHBASECONFIG_CONTRASEÑA=Contraseña@123 Contraseña # para su cluster- CORE_LEDGER_ESTADO_COUCHBASECONFIG_BUCKET=tejido-1 # nombre del cubo- CORE_LEDGER_ESTADO_COUCHBASECONFIG_ÁMBITO=_por defecto Nombre del ámbito #- CORE_LEDGER_ESTADO_COUCHBASECONFIG_LIMITE INTERNO DEQUERYL=1000- CORE_LEDGER_ESTADO_COUCHBASECONFIG_MAXBATCHUPDATESIZE=1000- CORE_LEDGER_ESTADO_COUCHBASECONFIG_CACHESIZE=64- CORE_LEDGER_ESTADO_COUCHBASECONFIG_ISCAPELLAINSTANCE=false # en false, ya que no utilizamos Capellaextra_hosts:- "host.docker.internal:host-gateway"par0.org2.ejemplo.com:imagen: cbjaykumar/fabric-peer:latestmedio ambiente:- CORE_LEDGER_ESTADO_STATEDATABASE=Couchbase- CORE_LEDGER_ESTADO_COUCHBASECONFIG_COUCHBASEADDRESS=couchbase://host.docker.internal- CORE_LEDGER_ESTADO_COUCHBASECONFIG_USERNAME=Administrador- CORE_LEDGER_ESTADO_COUCHBASECONFIG_CONTRASEÑA=Contraseña@123- CORE_LEDGER_ESTADO_COUCHBASECONFIG_BUCKET=tejido-2- CORE_LEDGER_ESTADO_COUCHBASECONFIG_ÁMBITO=_por defecto- CORE_LEDGER_ESTADO_COUCHBASECONFIG_LIMITE INTERNO DEQUERYL=1000- CORE_LEDGER_ESTADO_COUCHBASECONFIG_MAXBATCHUPDATESIZE=1000- CORE_LEDGER_ESTADO_COUCHBASECONFIG_CACHESIZE=64- CORE_LEDGER_ESTADO_COUCHBASECONFIG_ISCAPELLAINSTANCE=falseextra_hosts:- "host.docker.internal:host-gateway"
123# fabric-samples/test-network/compose/docker/docker-compose-couchbase.yaml# Sí, esto es sólo un archivo vacíoversión: '3.7' - Modifique su archivo network.sh para utilizar el nuevo archivo docker-compose-couchbase.yaml:
1rizo -o prueba-red/red.sh https://gist.githubusercontent.com/jaykumar-cb/328d23f20f572df3951f37a5c4545160/raw/ - Iniciar la red textil
12cd prueba-red./red.sh arriba crearCanal -s couchbase - Ahora puedes desplegar cualquier chaincode que quieras, y hacer operaciones como siempre, necesitarías cambiar las consultas e índices para usar SQL++ en lugar de consultas Mango. La siguiente sección contiene la guía para ello.
Cambios en la consulta del código de la cadena
Las consultas de su código de cadena cambiarán para utilizar SQL++ en lugar de Mango Queries. Ejemplo:
|
1 2 3 4 5 6 7 |
// Consulta para CouchDB { "Args": [ "Activos de consulta", "{\"selector\":{\"docType\":\"asset\",\"owner\":\"tom\"}, \"use_index\":[\"_design/indexOwnerDoc\", \"indexOwner\"]}" ] } |
|
1 2 3 4 5 6 7 |
// Consulta equivalente para Couchbase { "Args": [ "Activos de consulta", "SELECT a.* FROM {{ .Source }} as a WHERE a.docType=\"asset\" AND a.owner=\"tom\"" ] } |
Cambios en el índice
Habrá cambios similares en sus índices. La estructura de carpetas seguirá siendo la misma, sólo cambiará la parte de consulta.
|
1 2 3 4 5 6 7 8 9 10 11 12 |
// index Owner.json para CouchDB { "índice": { "campos": [ "objectType", "propietario" ] }, "ddoc": "indexOwnerDoc", "nombre": "indexOwner", "tipo": "json" } |
|
1 2 3 4 |
// IndexOwner.json equivalente para Couchbase { "índice": "CREAR ÍNDICE index_meow ON {{ .Source }} (owner, objectType)" } |
💡 Nota: Couchbase soporta múltiples tipos de índices para diferentes patrones de consulta y escenarios de optimización de rendimiento. Al integrar Couchbase con Hyperledger Fabric, estas opciones de indexación flexibles proporcionan ventajas de rendimiento significativas para consultas complejas contra la base de datos de estado de blockchain.
💡 Consejo: Para un entorno de producción se recomienda que cada peer tenga su propia instancia dedicada de Couchbase. Deberías crear una instancia por cada par.
💡 Consejo: A continuación se muestran las opciones de configuración que puede poner en su core.yaml para cada par:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 |
Libro mayor: estado: stateDatabase: Couchbase couchbaseConfig: dirección: couchbase://<couchbase-host> nombre de usuario: <nombre de usuario> contraseña: <contraseña> cubo: <nombre-cubo> alcance: <nombre-ámbito> isCapellaInstance: falso internalQueryLimit: 1000 maxBatchUpdateSize: 1000 cacheSize: 64 |
Interfaces implementadas en el base estatal paquete
En base estatal implementa varias interfaces clave que le permiten servir como una base de datos de estado basada en Couchbase para Hyperledger Fabric. Estas interfaces definen el contrato para las operaciones de la base de datos de estado y proporcionan la base para la funcionalidad del libro mayor de Fabric.
Principales interfaces de bases de datos
1. statedb.VersionedDBProvider
Ejecutado por: VersionedDBProvider
Esta interfaz sirve como fábrica y gestor del ciclo de vida de las bases de datos de estado versionado. Es responsable de la creación, gestión y eliminación de instancias de bases de datos para diferentes canales. El proveedor actúa como punto de entrada para el subsistema de bases de datos de estado y se encarga de la coordinación entre las bases de datos de varios canales.
Propósito:
-
- Gestión de instancias de bases de datos en varios canales
- Gestión del ciclo de vida de los recursos
- Funciones de importación y exportación de instantáneas
- Configuración y limpieza a nivel de proveedor
2. statedb.VersionedDB
Ejecutado por: VersionedDB
Esta es la interfaz principal para las operaciones de la base de datos de estados y representa la funcionalidad central requerida para la gestión de estados de Fabric. Proporciona las operaciones esenciales de lectura/escritura necesarias para la ejecución de códigos de cadena, la validación de transacciones y la confirmación de bloques.
Propósito:
-
- Acceso y manipulación de datos básicos
- Seguimiento de versiones para MVCC (Control de concurrencia multiversión)
- Procesamiento por lotes de transacciones
- Capacidades de ejecución de consultas
- Coherencia de la base de datos y gestión de puntos de guardado
Interfaces de optimización del rendimiento
3. statedb.BulkOptimizable
Ejecutado por: VersionedDB
Esta interfaz proporciona optimizaciones de rendimiento para operaciones por lotes durante el procesamiento de bloques. Está diseñada para mejorar la eficiencia de las fases de validación y confirmación de transacciones mediante la habilitación de operaciones por lotes y mecanismos de almacenamiento en caché.
Propósito:
-
- Carga masiva de versiones para la validación de transacciones
- Almacenamiento en memoria caché de los datos de versiones a los que se accede con frecuencia
- Optimización del rendimiento durante el procesamiento de bloques
- Reducción de los viajes de ida y vuelta a la base de datos durante la validación
4. statedb.IndexCapable
Ejecutado por: VersionedDB
Esta interfaz permite realizar consultas avanzadas mediante índices de base de datos personalizados. Permite a los códigos de cadena definir y utilizar consultas complejas más allá de las simples búsquedas clave-valor, lo que es especialmente importante para las aplicaciones empresariales que requieren una funcionalidad de consulta enriquecida.
Propósito:
-
- Creación y gestión de índices personalizados
- Soporte para consultas complejas de códigos de cadena
- Funciones de optimización específicas de la base de datos
- Mejora del rendimiento de las consultas de lógica empresarial
Interfaces de iterador
5. ResultsIterator, QueryResultsIterator, FullScanIterator
Ejecutado por: queryScanner, dbsScanner
Estas interfaces proporcionan diferentes tipos de capacidades de iteración sobre la base de datos de estados. Permiten recorrer eficazmente los resultados de las consultas, los rangos y toda la base de datos, y admiten funciones como la paginación y los marcadores.
Propósito:
-
- Iteración eficaz de grandes conjuntos de resultados
- Procesamiento de datos eficiente desde el punto de vista de la memoria
- Paginación para consultas extensas
- Generación de instantáneas y exportación de datos
- Capacidad de escaneado por alcance
Composición y diseño de interfaces
En base estatal demuestra una implementación bien estructurada de la arquitectura de la base de datos de estado de Fabric mediante la composición de interfaces. El sitio VersionedDB implementa múltiples interfaces simultáneamente, proporcionando:
-
- Funcionalidad por capas: Operaciones básicas mediante VersionedDBcon optimizaciones opcionales mediante BulkOptimizable y IndexCapable
- Separación de preocupaciones: Operaciones a nivel de proveedor separadas de las operaciones a nivel de base de datos
- Extensibilidad: Se pueden añadir funciones adicionales a través de nuevas interfaces sin romper la funcionalidad existente.
- Flexibilidad de rendimiento: Las interfaces de optimización opcionales permiten mejorar el rendimiento de las implementaciones cuando son compatibles.
Este diseño permite que la implementación de Couchbase proporcione una rica funcionalidad a la vez que mantiene la compatibilidad con la capa de abstracción de base de datos de Fabric, lo que permite cambiar sin problemas entre diferentes implementaciones de base de datos de estado en función de los requisitos de implementación.
💡 Nota: Los pares que utilizan Couchbase como StateDB son compatibles con los pares que utilizan CouchDB como StateDB.
Conclusión
Los despliegues empresariales de blockchain de Hyperledger Fabric se enfrentan a un dilema crítico de bases de datos: LevelDB ofrece un alto rendimiento pero elimina las capacidades de consulta enriquecidas esenciales para las aplicaciones modernas, mientras que CouchDB proporciona consultas JSON pero introduce graves limitaciones, incluida la consistencia eventual de los datos, cuellos de botella en el rendimiento debido a su arquitectura de almacenamiento de documentos pura que limita las consultas y ralentiza el rendimiento, y un soporte empresarial limitado como proyecto de código abierto con entornos rígidos.
Couchbase Server aborda directamente estos retos proporcionando una fuerte consistencia con transacciones ACID distribuidas que eliminan los problemas de reconciliación, un rendimiento de consulta avanzado mediante SQL (alias N1QL) que supera la limitada API de búsqueda de CouchDB, y un completo soporte empresarial con servicios profesionales, opciones de implantación flexibles y herramientas de gestión avanzadas.
Las organizaciones que cambian a Couchbase suelen experimentar tiempos de respuesta inferiores a un milisegundo, un mayor tiempo de actividad de la aplicación y una tecnología superior de replicación entre centros de datos, lo que la convierte en la solución ideal para las implementaciones empresariales de blockchain que requieren tanto un alto rendimiento de las transacciones como sofisticadas capacidades de consulta sin forzar compromisos entre rendimiento y funcionalidad.
-
- Para una comparación más exhaustiva, véase Couchbase frente a CouchDB
- Documentación sobre Hyperledger Fabric
- Inscríbete para empezar a utilizar gratuitamente Couchbase Capella DBaaS