Couchbase 7.0 es un hito importante para las bases de datos.
En la última versiónEl resultado es un producto innovador pero familiar para los desarrolladores y los ingenieros de DevOps.
Lo que hemos conseguido con esta versión es que, por primera vez, se puedan intercalar transacciones SQL completas con operaciones de alto rendimiento y gran escala, todo en una única base de datos. Esto elimina la necesidad de que los desarrolladores elijan un sistema para las transacciones y otro diferente para la alta velocidad, la baja latencia y la escala.
En este artículo sólo voy a hablar de dos de estas innovaciones. En los próximos días y semanas, verás otros artículos en el blog de nuestro brillante equipo técnico sobre los demás detalles del lanzamiento de Couchbase 7.0
Couchbase 7.0 introduce por primera vez transacciones SQL multi-sentencia en una base de datos documental de esquema flexible. Además, hemos introducido el concepto de Ámbitos y colecciones en 7.0.
Estas dos innovaciones -transacciones multiestado y organización de datos- ofrecen los conceptos familiares de las bases de datos relacionales en un sistema NoSQL. Ahora es más fácil que nunca que los desarrolladores migren sus aplicaciones monolíticas del pasado a microservicios modernos que satisfagan las demandas actuales y futuras de las organizaciones empresariales.
Las limitaciones de las bases de datos relacionales
Desde el punto de vista de la evolución de las bases de datos, los sistemas de gestión de bases de datos relacionales (RDBMS) presentaban dos grandes limitaciones. Una era la escala y la otra la rigidez del esquema.
La naturaleza de escala vertical de los sistemas relacionales que se construyeron en los 80 reflejaba la realidad de la infraestructura de aquellos tiempos. Las redes -incluso las LAN- apenas existían, por no hablar de las WAN e Internet. Por tanto, meter una red en medio de la computación no era posible a menos que se construyera toda la pila de hardware y se gestionara todo de forma propia.
Como resultado, las bases de datos transaccionales se convirtieron esencialmente en bases de datos de un solo servidor. Pero las bases de datos modernas requieren sistemas de escalado horizontal que amplíen y contraigan el uso de hardware en función de la utilización de los recursos. Este es uno de los primeros problemas resueltos por NoSQL.
Bases de datos NoSQL también dio al mundo la flexibilidad de esquemas, que es la razón principal por la que estos sistemas son tan populares. Pero nosotros, como ecosistema tecnológico, olvidamos una de las lecciones más importantes que nos enseñaron 40 años de investigación e innovación en bases de datos.
Esa fue la lección de SQL.
Los puntos fuertes de SQL
Cientos de bases de datos se han sucedido y cada una ha proclamado su propio paradigma de programación, pero sólo SQL ha resistido el paso del tiempo.
La razón de esta resistencia es doble: En primer lugar, las matemáticas que sustentan el modelo relacional (conocidas como cálculo relacional) y, en segundo lugar, la sencillez del lenguaje de programación. El lenguaje de consulta estructurado (SQL) es funcional y está basado en el inglés.
Estos dos puntos fuertes de SQL permiten expresar conceptos complejos de la teoría de conjuntos en una sintaxis que se aproxima a cómo se expresaría en inglés y ocultar todas las complejidades de programación y otras idiosincrasias de manipulación de datos dentro del sistema de base de datos. Esta simplicidad declarativa es lo que ha llevado a la popularidad de las bases de datos relacionales y ha permitido a los equipos de desarrolladores crear algunas de las aplicaciones empresariales más sofisticadas de los últimos 40 años.
A la hora de desarrollar la versión 7.0 de Couchbase, no fue fácil trasladar el cálculo relacional y la simplicidad de programación a una base de datos de esquema flexible. Ha sido un viaje de seis años.
Con el lenguaje de consulta N1QLLa mayoría de los puntos fuertes de SQL ya están cubiertos. N1QL ofrece el "pulgar oponible" de los sistemas relacionales - el JOIN - así como subconsultas y funciones ventana. Es la equivalencia sintáctica de las bases de datos relacionales en una base de datos documental de esquema flexible.
Innovación #1: Transacciones SQL Multi-Statement en N1QL
A lo largo de los años, los documentos de Couchbase han incluido propiedades ACID. Esa oferta ha madurado desde ACID de documento único (en Couchbase 2.0) a ACID distribuido multidocumento (en 6.5) y Couchbase ahora soporta transacciones SQL multi-statement en 7.0.
Se trata de un gran paso en la evolución de las bases de datos modernas.
El modelo de datos de documentos elimina la incompatibilidad de impedancias entre los desarrolladores de aplicaciones, que piensan en términos de objetos, y las bases de datos, que almacenan los datos en términos de filas y columnas.
Para Couchbase, JSON es el modelo de datos. JSON proporciona objetos, jerarquías y matrices. El lenguaje de consulta N1QL y los motores de consulta te ayudan a consultar, transformar y manipular JSON de forma declarativa. No hay necesidad de escribir largos pipelines que son difíciles de escribir y mantener. No hay necesidad de optimizar manualmente. N1QL es SQL para JSON. Tú escribes; Couchbase optimiza.
SQL es muchas cosas. Es un lenguaje de consulta para informes, pero también es un lenguaje de consulta para el procesamiento de transacciones. Couchbase Server 7.0 ahora provee transacciones multi-statement en N1QL, y ofrece Transacciones ACID igual que un RDBMS.
Este tipo de transacciones distribuidas existen desde hace varias décadas. Sin embargo, nunca llegaron a escalarse, ya que se toparon con lo que popularmente se conoce como problemas de bloqueo y atasco.
Couchbase es una base de datos multimodelo y multiacceso. Puedes acceder y manipular el documento JSON a través de la API clave-valor y a través del lenguaje de consulta N1QL. Al introducir transacciones multi-statement, nuestro primer paso fue el soporte para el acceso a datos key-value. Este paso se incluyó en la versión 6.5 con una arquitectura para transacciones multidocumento, pero carecía de un coordinador central.
La versión 7.0 extiende este soporte a transacciones SQL multi-statement en N1QL. Esto requirió un enfoque novedoso, pendiente de patente, que explota la arquitectura scale-out y la concurrencia optimista de Couchbase para implementar transacciones distribuidas.
La reducción de escala se consigue evitando el coordinador central para cada transacción. Los detalles de cada transacción se guardan en múltiples registros de transacciones activas y son utilizados por el protocolo de confirmación. El protocolo de confirmación distribuido se ejecuta en múltiples instancias y en paralelo. Esto hace que los sistemas sean más escalables y rentables.
Este es el aspecto de una transacción SQL de varias sentencias en una base de datos relacional tradicional:
1 2 3 4 5 6 7 8 9 10 |
INICIO TRANSACCIÓN; SET TRANSACCIÓN AISLAMIENTO NIVEL LEA COMPROMETIDO; ACTUALIZACIÓN cliente SET saldo = saldo + 100 DONDE cid = 4872; SELECCIONE cid, nombre, saldo DESDE cliente; GUARDAR PUNTO s1; ACTUALIZACIÓN cliente SET saldo = saldo - 100 DONDE cid = 1924; SELECCIONE cid, nombre, saldo DESDE cliente; ROLLBACK TRABAJO A GUARDAR PUNTO s1; SELECCIONE cid, nombre, saldo DESDE cliente; COMPROMETERSE ; |
Esta misma transacción funciona en Couchbase 7.0 sin ninguna modificación.
Apoyamos COMENZAR
, COMPROMETERSE
, ROLLBACK
y GUARDAR PUNTO
para controlar la transacción. La semántica ACID, como la atomicidad a nivel de sentencia y las escrituras de lectura propia, está soportada para cada sentencia DML dentro de una transacción.
Estas transacciones multiestado son la primera gran innovación a la que me he referido antes. Esta innovación ofrece a los desarrolladores la conocida protección de transacciones en una base de datos que aborda todas las complejidades de un esquema flexible y distribución elástica de datos.
Innovación #2: Organización de datos
La otra gran innovación introducida en la versión 7.0 de Couchbase es la organización de los datos dentro de la base de datos. Aquí es donde entran en juego Scope y Collections.
Los RDBMS tienen base de datos -> esquema -> tabla -> filas -> columnas. Ahora Couchbase tiene Bucket -> Scope -> Collection -> documentos -> campos. Con la introducción de Ámbitos y Colecciones, hay una correspondencia directa entre la ontología de una base de datos relacional tradicional y una base de datos NoSQL.
Unirlo todo
La combinación de estas dos innovaciones establece la equivalencia con un sistema de base de datos relacional tanto a nivel estructural de organización de datos -con Ámbitos y Colecciones- como a nivel funcional -transacciones multiestado-.
Veamos más de cerca lo que significan estas dos innovaciones para una transacción única.
Una base de datos de esquema flexible significa que no tienes que predefinir un esquema antes de almacenar datos en dicha base de datos. Couchbase es una base de datos JSON, así que mientras almacenes datos JSON, no necesitas preocuparte por definir el esquema ya que JSON es auto descriptivo.
Todos sabemos que no existe una aplicación sin esquema. La diferencia con NoSQL es que la base de datos no impone su propio esquema (modelo de datos) por encima y más allá del esquema (modelo de objeto) impuesto e implícito por la aplicación. Como puedes imaginar, este JSON no es más que la parte de datos del objeto. La evolución del esquema no es más que cambios en el propio JSON.
La introducción de Ámbitos y Colecciones te da la capacidad de asignar nombres a los documentos JSON y organizarlos de una manera significativa. Al ser una base de datos de esquema flexible, Couchbase conserva la capacidad de crear, actualizar y modificar Ámbitos y Colecciones, así como crear índices y otros artefactos de esquema asociados. Aún más, permite mover datos entre Colecciones, manejar el escalado elástico de capacidad y añadir o eliminar nodos, todo ello mientras una transacción está en curso.
Dicho de otro modo, la semántica ACID está garantizada, a pesar de todo este movimiento de datos, desde la reorganización física a la lógica en todo el clúster. No tienes que hacer ninguna estructuración administrativa específica de los datos en nodos o shards apropiados para que esto funcione. Cuando emites una transacción SQL multi-estado, Couchbase está precisamente diseñado para manejar esta fluidez de movimiento de datos bajo la superficie.
Esta es la flexibilidad que prometía el movimiento NoSQL. Solo que no se había materializado plenamente hasta ahora.
Las bases de datos relacionales tradicionales le hacen pagar el precio completo de ACID por todas y cada una de las operaciones de la base de datos. Los RDBMS se crearon en una época en la que las aplicaciones sólo utilizaban la base de datos para aplicaciones transaccionales tipo libro mayor, que se ejecutaban en un mainframe con un número limitado de usuarios.
Este enfoque full-ACID ha resultado tan costoso para las aplicaciones actuales que, en los últimos 10 años, los arquitectos de soluciones han tenido que elegir al inicio del diseño de un nuevo microservicio: ¿Este microservicio requiere semántica transaccional? En caso afirmativo, utilice una base de datos relacional. Si no, gracias a Dios, podemos utilizar una base de datos escalable, de alto rendimiento y baja latencia en la que podamos desarrollar rápidamente y escalar con facilidad. Esta elección, que tenía que hacerse al principio de cada nuevo proyecto, aplicación o microservicio, provocaba frustración en los desarrolladores, proliferación de bases de datos, incoherencia de los datos, inseguridad de los datos y problemas de gobernanza de los datos.
Este dilema ha pasado a la historia.
Ahora, ¿qué vas a construir?
Ahora, los desarrolladores pueden utilizar una única base de datos para obtener escala, baja latencia, rendimiento y flexibilidad de esquemas, así como garantías SQL y full-ACID, sin comprometer ninguna de sus necesidades. Usted paga el coste de las transacciones solo cuando es necesario y, de lo contrario, libera el sistema para que funcione a escala.
Couchbase 7.0 es una base de datos en la que puedes realizar tus operaciones clave-valor, tus consultas SQL, tus transacciones ACID completas, tus búsquedas tokenizadas, tu streaming de eventos o tus consultas analíticas ad-hoc, en la nube o en el borde. El poder de llevar todos estos motores sobre esos JSON que escribes una vez en la base de datos permite a tus desarrolladores construir una nueva clase de aplicaciones que aún no se han imaginado.
Estoy entusiasmado con lo que ofrece la versión 7.0 de Couchbase, pero lo estoy aún más cuando oigo hablar de una aplicación que has construido y I preguntan con incredulidad: "Espera, ¡¿has construido eso en Couchbase?!".
Lo estoy deseando,
Ravi