Atrás quedaron los días del enfoque de una base de datos para todos.
Con el aumento de los requisitos de velocidad, rendimiento y agilidad, surgieron numerosos almacenes de datos destinados a resolver un problema en particular. Tenemos bases de datos relacionales, almacenes de documentos, bases de datos de series temporales, bases de datos en columnas, motores de búsqueda de texto completo.
Es bastante común ver varios almacenes de datos trabajando juntos en el mismo entorno.
Entonces, ¿cómo encaja MariaDB AX en la imagen? ¿Cómo se compara con MariaDB TX y qué problema resuelve?
En esta publicación de blog, echaremos un vistazo a MariaDB AX y veremos por qué es posible que desee utilizarlo.
¿Qué es MariaDB AX?
Lo primero es lo primero, ¿qué es MariaDB AX?
Es un almacén de columnas y almacena sus datos por ... ¡columna! Se implementa como un motor separado en la base de datos MariaDB 10.3.
Como sabrá, MySQL y MariaDB están diseñados para usar motores de almacenamiento conectables. Cada motor de almacenamiento, ya sea InnoDB, Aria, MyRocks, Spider o cualquier otro motor, son complementos.
De la misma forma, MariaDB AX utiliza el motor ColumnStore:
MariaDB [(none)]> SHOW ENGINES\G
*************************** 1. row ***************************
Engine: Columnstore
Support: YES
Comment: Columnstore storage engine
Transactions: YES
XA: NO
Savepoints: NO
Esto da como resultado una combinación interesante. El análisis de SQL lo realiza MariaDB, por lo que puede esperar trabajar con una sintaxis de consulta que es muy similar a la que está acostumbrado en MariaDB. Esto también facilita combinar el acceso a MariaDB AX y MariaDB TX en la misma aplicación. No se necesitan conectores o bibliotecas específicos para conectarse a dos almacenes de datos. Todo se puede hacer usando la biblioteca de cliente MySQL o MariaDB. También puede utilizar MaxScale para ambos almacenes de datos, lo que puede ayudar a crear una alta disponibilidad para MariaDB AX.
¿Por qué deberíamos usar un almacén de datos en columnas?
Veamos una breve introducción a la idea detrás de los almacenes de datos en columnas.
¿Qué diferencia a MariaDB AX de MariaDB TX?
La principal diferencia es cómo se estructuran los datos. En la base de datos típica, los datos se almacenan como filas.
Id, Product, Price, Code, Warehouse
1, Door, 10, 12334, EU1
2, Window, 9, 9523, EU1
3, Glass, 12, 97643, EU2
Como puede ver, tenemos tres filas, cada una de las cuales contiene todos los datos sobre una entrada de producto.
El problema es que esta forma de almacenar datos no es realmente eficiente cuando desea obtener solo un subconjunto de estos datos. Supongamos que desea obtener solo las columnas "Producto" y "Precio":para hacerlo, debe leer filas completas, todos los datos y luego descartar las columnas innecesarias. También es complicado ordenar los datos. Si desea ordenar el conjunto de datos del producto más caro al más barato, debe leer todo y luego ordenar.
Todos sabemos que las bases de datos utilizan índices para acelerar el acceso. Un índice está estructurado de manera que contiene el contenido de la columna indexada, así como un puntero a la fila completa (en InnoDB, esa es la clave principal). Por ejemplo, un índice en la columna "Producto", suponiendo que "Id" sea la clave principal, puede tener el siguiente aspecto:
Product, Id
Door, 1
Window, 2
Glass, 3
Esto acelera el acceso a los datos ya que no es necesario leer la fila completa solo para encontrar un valor en la columna "Producto". Una vez que la base de datos lo encuentra, puede leer el resto de la fila (si es necesario) siguiendo el puntero.
En una tienda de columnas, las cosas son diferentes. Los datos no se estructuran como filas sino como columnas. Hasta cierto punto, esto es similar a index. Nuestra tabla en el almacén de datos en columnas puede verse así:
Id: 1, 2, 3
Product: Door, Window, Glass
Price: 10, 9, 12
Code: 12334, 9523, 97643
Warehouse: EU1, EU1, EU2
En MariaDB AX, las columnas se almacenan en archivos separados, cada entrada para una "fila" determinada comienza en el mismo desplazamiento.
La principal ventaja aquí es que si desea ejecutar una consulta que funcionará solo con un subconjunto de datos, solo necesita leer los datos de las columnas que son relevantes para la consulta.
En nuestro ejemplo anterior, en lugar de leer el conjunto de datos completo, solo podemos cargar datos para las columnas "Producto" y "Precio". Reduce los datos necesarios para acceder en el disco y acelera el proceso.
Lo que también es importante, almacenar datos en columnas los hace menos distintos, lo que hace que se comprima mejor. Por ejemplo, en nuestra columna "Almacén" tenemos solo dos tipos de entradas. Incluso en el escenario del mundo real, es muy probable que terminemos con una pequeña cantidad de almacenes en comparación con la cantidad de productos. Esto hace que la columna "Almacén" sea un buen objetivo para la compresión.
Como resultado de todo esto, los almacenes de datos en columnas pueden manejar mejor grandes conjuntos de datos y pueden consultarlos de una manera más eficiente que las bases de datos centradas en OLTP "estándar".
¿Por qué debo usar MariaDB AX?
El acceso al disco es un cuello de botella importante en las bases de datos. Un almacén de datos en columnas mejora el rendimiento al reducir la cantidad de datos que deben leerse del disco. Solo lee los datos necesarios para responder a la consulta.
Por supuesto, MariaDB AX no es el único almacén de datos en columnas que existe. Hay muchos otros como, por ejemplo, Clickhouse o Apache HBase.
La verdad es que ninguna de las otras opciones admite la sintaxis SQL completa que admite MySQL. Requieren diferentes conectores, diferentes enfoques para consultar los datos, mientras que MariaDB AX se puede consultar como lo haría con MariaDB "normal".
Lo que también es importante, dado que MariaDB AX utiliza el motor ColumnStore, está perfectamente bien mezclarlo con otros motores. Puede mezclar y unir tablas InnoDB y ColumnStore en la misma consulta sin ningún problema.
Además de eso, las herramientas que vienen con MariaDB TX, como MaxScale, funcionarán bien con MariaDB AX, lo que facilita la creación de un entorno integrado y fácil de usar. Entonces, cuando ejecuta ClusterControl con MariaDB 10.3 y MaxScale, puede agregar fácilmente MariaDB AX a la mezcla y funcionará con otras partes de la configuración.
MariaDB AX viene con herramientas que están destinadas a ayudar con la transferencia de datos de otras fuentes. Si usa Kafka o Spark, hay conectores para usar al importar datos de esas fuentes a MariaDB AX.
Además, aunque la replicación regular entre MariaDB TX (InnoDB) y MariaDB AX (ColumnStore) no funciona bien debido a las limitaciones de ColumnStore (siempre es mejor hacer inserciones por lotes en almacenes de datos en columnas que inserciones individuales, como se hace en la replicación), es posible construir una canalización que consistiría en MaxScale configurado como servidor binlog y enrutador Avro CDC, MaxScale CDC Data Adapter y MariaDB AX, que recibirán datos del adaptador casi en tiempo real.
Esperamos que esta publicación de blog le brinde una idea de qué es MariaDB AX y cómo se puede utilizar junto con el entorno MariaDB TX implementado y administrado por ClusterControl (¡descárguelo gratis!).