Mecanismos de almacenamiento (MySQL)
MySQL -y sus derivados MariaDB y drizzle- es una base de datos relacional de licencia GPL. Como tal base de datos relacional, desde un punto de vista lógico usa tablas para guardar los datos. Internamente un mecanismo de almacenamiento (storage engine) será el encargado de guardar en último término los datos de las tablas en dispositivos físicos, para que éstos tengan durabilidad. El mecanismo es totalmente clave a la hora de evaluar la rapidez y las funcionalidades que puede tener el SGBD. MySQL ofrece la opción de incluir dinámicamente -desde MySQL versión 5.1- los distintos mecanismos para soportar el almacenamiento de las tablas.
Factores diferenciadores de los mecanismos[editar]
Todo mecanismo de funcionamiento tiene unas características particulares. Las características en las que podemos encontrar diferencias entre los distintos mecanismos de almacenamiento son principalmente:
- Almacenamiento físico: aquí se incluye desde consideraciones del tamaño de página de tablas e índices, el soporte de almacenamiento hasta el formato de almacenamiento en disco.
- Características varias: aquí se puede incluir soporte para operaciones geo-espaciales y restricciones de seguridad para ciertas operaciones de manipulación de datos.
- Caché de memoria: diferentes aplicaciones responden mejor a ciertas estrategias de caché que otras, por lo que aunque algunos caché de memoria son comunes a todos los mecanismos (como los usados para conexiones de usuario o al caché de sentencias de alta velocidad), otros son particulares a cada uno de ellos.
- Concurrecia: algunas aplicaciones necesitan granularidad de bloqueo más fina (i.e. bloqueo a nivel de fila) que otras. La elección de la estrategia de bloqueo adecuada puede reducir tiempos de espera y aumentar la prestación general. Este factor incluye las capacidades concurrencia multi-versión (MVCC) o toma de "instantáneas".
- Integridad referencial: característica que responde a la necesidad de que el servidor asegure la integridad referencial de la base de datos mediante claves externas.
- Particionado: algunos mecanismos permiten que diferentes secciones de una misma tabla pueden ser almacenadas en diferentes porciones de disco. Las reglas por las que se realiza este particionado se denominan funciones, que en MySQL pueden ser el módulo, lista de rangos o valores, una función de hash interna o una función lineal.
- Prestaciones: las diferencias pueden estar causadas por los hilos múltiples para operaciones en paralelo, la concurrencia de hilos, la toma de puntos de control y el manejo de inserciones masivas.
- Soporte de índices: diferentes aplicaciones necesitan diferentes estrategias en cuanto a índices. Cada mecanismo de almacenamiento tiene sus propios métodos de indexación -aunque los B-tree son comunes a casi todos ellos- aunque algunos carecen de índices.
- Soporte de transacciones: no todas las aplicaciones necesitan transacciones, pero aquéllas que las necesitan tienen definidos de manera precisa los requisitos ACID que deben satisfacer los mecanismos a emplear.
Tipos de mecanismos[editar]
La comunidad MySQL ha desarrollado una gran variedad de «Motores de almacenamiento». Algunos tienen propósito general, mientras que otros fueron desarrollados para cubrir necesidades especiales y han sido puestos a disposición pública posteriormente.
Cada mecanismo puede presentar limitaciones en cuanto a índices, tipos de los atributos, particionado, funciones SQL soportadas... por lo que es preciso consultar la documentación detallada antes de utilizarlos.
Dada la dificultad de encontrar criterios que permitan agrupar los mecanismos, se describen a continuación siguiendo el orden alfabético.
Archive[editar]
El mecanismo Archive está concebido para almacenar gran volumen de datos. Soporta INSERT y SELECT, pero no DELETE, REPLACE o UPDATE. Soporta el operador ORDER BY, atributos tipo BLOB y casi todos los demás, excepto los espaciales. Implementa bloqueo a nivel de fila (tupla).
Aria[editar]
El mecanismo Aria nació como una alternativa a MyISAM pero resistente a caídas del sistema. Viene incorporado en la distribución MariaDB.[1] No tiene todavía capacidad transaccional pero está planeado añadirla en el futuro. Entre sus objetivos de diseño figuran:
- Crear un nuevo mecanismo de almacenamiento transaccional, ACID y MVCC que forme la base tanto de MariaDB como de MySQL.
- Reemplazar directamente a MyISAM (gracias a que Aria puede funcionar en modo no transaccional y soporta los mismos formatos que MyISAM).
- Formar parte de manera estándar de MySQL 6.0.
Originalmente se llamó María y luego se cambió el nomnbre por Aria, para evitar confusiones con MariaDB, la base de datos sucesora de la original MySQL y realizada por el mismo creador, Monty Widenius.
Ultima versión: 1.5
AWSS3[editar]
Simple Storage Service (S3) es un mecanismo de almacenamiento sobre Internet proporcionado como servicio web por Amazon. Este mecanismo permite crear un almacenamiento para MySQL sobre S3 a través de la web.
Amazon S3 proporciona una sencilla interfaz de servicios web que puede utilizarse para almacenar y recuperar la cantidad de datos que desee, cuando desee, y desde cualquier parte de la web. Concede acceso a todos los usuarios a la misma infraestructura a un precio económico, altamente escalable, fiable, segura y rápida que utiliza Amazon para tener en funcionamiento su propia red internacional de sitios web. Este servicio tiene como fin maximizar las ventajas del escalado y trasladar estas ventajas a los usuarios finales.
Ultima versión: 0.06 (descontinuado, continúa con ClouSE)
BDB[editar]
Motor de almacenamiento transaccional desarrollado por Sleepycat y adquirido posteriormente por Oracle, conocido como Berkeley DB.[2] Se incluye soporte para BDB en distribuciones fuentes de MySQL y en distribuciones binarias MySQL-Max.
Las tablas BDB pueden sobrevivir a fallos del sistema. Es una base de datos transaccional (COMMIT y ROLLBACK). La distibución fuente MySQL/MariaDB incluye un código BDB preparado para funcionar con MySQL, ya que no se puede usar una versión de BDB cualquiera.
Soportado sólo hasta MySQL 5.0.
Blackhole[editar]
El mecanismo de almacenamiento BLACKHOLE actúa como un agujero negro que acepta todo pero no lo almacena en ningún sitio. Todo intento de recuperación de información resultará infructuoso.
Al crear una tabla con el mecanismo BLACKHOLE el servidor sí crea la definición del formato en el directorio de datos -un fichero con extensión.frm- pero no aparece ningún fichero más. Los datos de la tabla los envía todos a /dev/null. Soporta la definición de todo tipo de índices.
Cassandra SE[editar]
El principal objetivo del mecanismo de almacenamiento Cassandra SE[3] es la integración de datos entre el mundo SQL y el NoSQL al que pertenece la base de datos Cassandra. Permite:
- capturar datos de Cassandra desde el frontal web o sentencia SQL
- insertar registros en Cassandra desde una aplicación
La base de datos Cassandra utiliza el lenguaje CQL, pero en MariaDB 10.0 será posible interrogarla utilizando SQL. Esto permite que las columnas de Cassandra aparezcan como tablas en las que se pueden realizar INSERT, UPDATE o SELECT. Es posible también escribir JOIN incluyendo tablas que usen otros mecanismos de almacenamiento.
El mecanismo viene enlazado estáticamente en la versión preliminar 5.5.25 de MariaDB y está confirmado para la futura versión 10.0.
ClouSE[editar]
ClouSE[4] es un mecanismo de altas prestaciones y alta fiabilidad que usa el servicio web de Amazon S3 para almacenar los datos.
Presenta estas características:
- transaccional con características ACID, permitiendo commit, rollback y recuperación frente a caídas
- utiliza almacenamiento en cloud
- proporciona cifrado de datos con AES-256
- permite el acceso directo a contenido blob
Ultima versión: 1.0b.1.6
Connect[editar]
El objetivo principal de este mecanismo es el de conectar a MariaDB a una gran cantidad de datos no relacionales -generalmente en ficheros planos- objeto de procesos BI sin necesaidad de necesitar complejas soluciones ETL.
Este mecanismo cubre todas las funcionalidades de CSV + FEDERATED + MERGE sin ninguna de sus limitaciones. También abarca más fuentes de datos (XML, dbase, ODBC...). La implementación usa características avanzadas para indización, compresión y filtrado de condiciones. Está por ello enfocado a BI, más que a OLTP.
Puede acceder a tablas localizadas en cualquier servidor local o remoto, y el tipo de datos de las columnas puede ser convertido sobre la marcha.
CSV[editar]
Este mecanismo de almacenamiento almacena los datos en ficheros de texto separados por comas. Este mecanismo está disponible en todas las versiones del servidor MySQL.
Cuando se crea una tabla con el mecanismo CSV el servidor crea una tabla de formato en el directorio de datos con extensión.frm. También se crea un fichero de datos con extensión.CSV, en el que se guardan los datos en ASCII separados por comas.
DDE-GAN[editar]
El mecanismo DDE-GAN[5] optimiza el acceso a los datos sobre una red global (GAN). La localización de los datos se basa en métodos estadísticos de predicción para optimizar el acceso por los nodos. Cada nodo sólo contiene un subconjunto de los datos. Optimizando la localización de los datos en el cluster se minimizan los costes de comunicación. Permite construir una based de datos distribuida a nivel mundial.
Ultima versión: 0.2-alpha
Example[editar]
Mecanismo de almacenamiento vacío, no hace nada. Muestra la arquitectura de programación para el desarrollo de nuevos mecanismos de almacenamiento. Tiene interés para desarrolladores.
Federated[editar]
El mecanismo Federated permite guardar los datos de una tabla en otro servidor MySQL remoto, a través de la red. Al realizar una consulta los datos se extraen de ese servidor. No se guardan datos en el servidor local, sólo el fichero de formato.frm. El mecanismo de almacenamiento usado por el servidor remoto puede ser cualquiera de los que soporte éste.
(descontinuado, continúa con FederatedX)
Federated/X[editar]
Es un proyecto que continúa el desarrollo del mecanismo de almacenaiento Federated. Se basa en el código de este último disponible en la versión MySQL 5.1.
Cuenta con muchas peticiones de características y corrección de errores de Federated que llevaban algún tiempo esperando. El mecanismo Federated/X intenta acometer estos requisitos:
- Conexiones múltiples
- Transacciones
- Permitir restricciones como LIMIT, columnas no indexadas
- Soportar conexiones de otros protocolos además de libmysql
IBMDB2I[editar]
IBM proporciona un mecanismo de almacenamiento para IBM serie i (antiguo AS/400). Con ese mecanismo las aplicaciones escritas para MySQL pueden correr en la serie i IBM, almacenando datos en DB2. Esto permite implementar aplicaciones MySQL transaccionales y en línea almacenando los datos en un entorno DB2 único y fácil de gestionar.[6]
InfiniDB[editar]
Desarrollado por Calpont,[7] el mecanismo de almacenamiento InfiniDB no se halla disponible por separado, sinó que utiliza MySQL como frontal formando un RDBMS completo. Consigue así una base de datos analítica orientada a columnas, especializada de data warehouse y aplicaciones de lectura intensiva.
InfiniDB usa el frontal MySQL para el proceso sintáctico de SQL (parsing), seguridad y otras tareas administrativas. Todo el entorno gráfico, gestión de comandos, herramientas de desarrollo, complementos BI, IDEs, conectores y drivers que funcionen con MySQL también lo harán con InfiniDB.
Ultima versión: 2.2.11
Infobright[editar]
Infobright ha desarrollado una base de datos analítica de altas prestaciones orientada al manejo de grandes volúmenes de datos de negocio. La versión 4.0 con tecnología DomainExpert permite analizar en tiempo real "Big Data" con optimizadores específicamente diseñados para datos generados automáticamente.
Infobright implementa una base de datos analítica orientada a columnas, rápida y eficiente. Proporcionando una compresión media de 10:1, permite el tratamiento multidimensional de los datos. Es fácil de instalar y gestionar, y existe tanto una Community Edition (ICE) como una Enterprise Edition (IEE).
Su integración como mecanismo de almacenamiento en MySQL permite el acceso a los usuarios de este SGBDR a herramientas avanzadas de BI.
Ultima versión: 4.0.7
InnoDB[editar]
InnoDB es un mecanismo de almacenamiento transaccional -con características ACID- para MySQL que permite COMMIT, ROLLBACK y recuperación frente a caídas. Esto aumenta la seguridad de los datos. Realiza bloqueo a nivel de filas y lecturas no bloqueantes MVCC tipo Oracle que aumentan la concurrencia y las prestaciones.
InnoDB almacena los datos agrupados para reducir el flujo de entrada/salida de consultas habituales basadas en claves primarias. Para mantener la integridad de los datos, InnoDB también soporta restricciones FOREIGN KEY para integridad referential. Se pueden mezclar tablas InnoDB con tablas de otros mecanismos de almacenamiento, incluso en la misma consulta.
Mdbtools[editar]
Mecanismo de almacenamiento que permite acceso de sólo lectura a bases de datos MicroSoft Access (ficheros con extensión.mdb). Ver detalles del proyecto en «Sourceforge».
MemcacheDB[editar]
Se trata de un mecanismo de almacenamiento persistente para pares clave-valor distribuido, que se ajusta al protocolo memcached, por lo que es accesible por cualquier cliente que cumpla ese protocolo.
MemcacheDB usa Berkeley DB como base de almacenamiento, por lo que soporta las características de transacción y replicación.
Ultima versión: 1.2.1-beta
Memory[editar]
Como indica la palabra, el mecanismo de almacenamiento Memory archiva las tablas en memoria volátil. Usa índices hash por defecto, lo que las hace muy rápidas de recorrer y muy útiles para crear tablas temporales. Sin embargo, cuando el servidor se apaga éstas se borran. La definición de las tablas se guarda en ficheros con extensión.frm, de modo que al rearrancar el servidor las tablas estarán definidas pero vacías de datos.
Merge[editar]
El mecanismo de almacenamiento Merge -anteriormente conocido como MRG_MyISAM- agrupa un conjunto de tablas MyISAM idénticas y las presenta como una sola. Las tablas que se agrupan han de ser idénticas tanto en campos como en índices.
Mroonga[editar]
Un mecanismo de almacenamiento para caracteres CJK (chino, japonés & coreano) basado en groonga,[8] un motor de búsqueda textual.
A partir de que se introdujeran los mecanismos de almacenamiento enchufables en MySQL 5.1, se puede usar Mroonga fácilmente desde MariaDB 5.3.
MyBS[editar]
El mecanismo MyBS transforma a MySQL en un servidor escalable de contenidos digitales capaz de almacenar películas, vídeos, sonido y cualquier otro objeto binario (BLOB) directamente en la base de datos.
MyISAM[editar]
Implementación de MySQL del original ISAM. El mecanismo MyISAM almacena cada tabla en tres ficheros:
- .frm con el formato de la tabla
- .MYD con los datos
- .MYI con los índices
Ha sido el mecanismo de almacenamiento por defecto hasta la versión 5.1 de MySQL, y sigue siendo utilizado por la versión actual (5.5) para muchas tablas internas de metadatos.
NDB[editar]
NDBCLUSTER es una base de datos desarrollada originalmente por Ericcson para uso en sus redes de telefonía basadas en la central AXE.[9] En su origen estaba pensada como una base de datos distribuida geográficamente a nivel regional.
Aunque puede funcionar de manera autónoma, NDB fue adaptada para su uso por MySQL Cluster como otro mecanismo de almacenamiento y así distribuir tablas entre varios ordenadores. Está disponible desde la versión binaria de MySQL 5.0, y soportado en muchas plataformas Unix. En modo experimental se distribuye para Windows a partir de Cluster NDB 7.0.
Ultima versión: 7.2
OQGraph[editar]
El mecanismo de almacenamiento OQGraph (Open Query GRAPH) permite manejar estructuras jerárquicas -en árbol- y también grafos genéricos. OQGraph está especialmente indicado para manejar relaciones n:m.
Ultima versión: Mk.II
PBXT[editar]
PrimeBase XT (PBXT) es un mecanismo de almacenamiento transaccional para MySQL. Usa una arquitectura basada en logs de escritura única que proporciona prestaciones óptimas en un amplio rango de situaciones. El mecanismo es enchufable, que significa que puede ser instalado dinámicamente en tiempo de ejecución en MySQL versión 5.1 o posterior.
Q4M[editar]
Implementa una cola de mensajes que funciona como un mecanismo de almacenamiento enchufable a Mysql 5.1 o posteriores, diseñado pensando en la robustez, rapidez y flexibilidad. Está en fase de producción y es empleado en multitud de servicios web
Ultima versión: 0.9.5
RitmarkFS[editar]
Permite trabajar con sistemas de ficheros directamente desde MySQL. Puede también acceder discos sin formato.
ScaleDB[editar]
ScaleDB es un mecanismo de almacenamiento enchufable para MySQL, que lo escala para poder disponer de la potencia del cloud computing, ya sea ésta pública, privada o interna a la empresa. Es un mecanismo pionero del NewSQL, que ofrece las ventajas de SQL y NoSQL, al mismo tiempo que permite el funcionamiento in the cloud.
Proporciona:
- Indexación a alta velocidad
- Simplicidad Plug-and-Cluster™
- Recuperación automática de datos
- Características ACID
- Arquitectura con todo compartido
- Altas prestaciones en el proceso de transacciones
- Tolerancia a fallos
- Bloqueo a nivel de filas
- Control de concurrencia multi-nodo
- Elimina el requisito de particionar los datos
Ultima versión: beta
SphinxSE[editar]
Existe una base de datos textual llamada Sphinx que funciona como un DBMS independiente. Esta base de datos fue diseñada especialmente para integrarse de modo fácil con bases de datos SQL que contuvieran los textos, y poderse emplear con lenguajes de scripting.
Los dos componentes principales de sphinx son:
- indexer: utilidad para crear índices de texto completo
- searchd: proceso que permite la conexión de programas externos
SphinxSE es un mecanismo que conecta sphinx con MySQL u otras bases de datos SQL, y que puede ser incorporado en los servidores MySQL a partir de la versión 5.1 mediante su arquitectura de módulos enchufables. SphinxSE no almacena datos por sí mismo, funciona como un cliente integrado que permite al servidor MySQL comunicarse con el componente de sphinx searchd para realizar búsquedas y obtener los resultados. La búsqueda e indexación la realiza el cliente Sphinx de SphinxSE para MySQL.
Ultima versión: 2.0.5
Spider[editar]
El mecanismo de almacenamiento Spider[10] ofrece las siguientes características:
- permite usar tablas en otros servidor MySQL como tablas locales
- potencia las características de otros mecanismos de almacenamiento por cooperación
- soporta transacciones XA
- puede particionar tablas de otros servidores MySQL
Ultima versión: 2.28
TokuDB[editar]
TokuDB[11] es un mecanismo de almacenamiento altamente escalable y sin mantenimiento que que permite acelerar la indexación de las sentencias SQL y la modificación en caliente de los esquemas. Proporciona altas prestaciones en entornos con carga intensiva de escritura.
Se instala como plugin y no requiere efectuar cambios en la aplicación. Tiene las características ACID implementadas mediante MVCC, con el que consigue transacciones con el nivel de aislamiento Serializable. Puede soportar la implementación de cualquier tabla, con las mismas limitaciones en cuanto a tipos soportados que MyISAM o InnoDB.
Ultima versión: 7.0.1
XtraDB[editar]
Versión mejorada del mecanismo de almacenamiento InnoDB, y mecanismo de almacenamiento por defecto en el clon de MySQL desarrollado por «Percona». Tiene mejores prestaciones que InnoDB y mejor escalabilidad en hardware moderno, útil en entornos con carga alta. Es compatible con InnoDB, de modo que lo puede reemplazar directamente.
Desarrollado por Percona, XtraDB incluye las características ACID de InnoDB basadas en una arquitectura MVCC avanzada. Se caracteriza por su adaptabilidad, métricas y escalabilidad. En particular está diseñado para escalar mejor que InnoDB en CPU con núcleos múltiples, hacer un más eficiente uso de memoria y tener más usabilidad.
Este mecanismo no está disponible para descarga independiente, sólo se halla incorporado en MariaDB y Percona Server.
Tabla comparativa[editar]
Se comparan los mecanismos de almacenamiento más utilizados, en esta tabla adaptada de MySQL[12]
| Característica | MyISAM | Memory | InnoDB | Archive | NDB |
|---|---|---|---|---|---|
| Límite de almacenamiento | 256 TB | Sistema[nota 1] | 64 TB | Dispositivos[nota 2] | 384 EB |
| Soporta transacciones | No | No | Sí | No | Sí |
| Granularidad de bloqueo | Tabla | Tabla | Fila | Fila | Fila |
| MVCC | No | No | Sí | Sí | No |
| Claves externas | No | No | Sí | No | No |
| Soporta tipos espaciales | Sí | No | Sí | Sí | Sí |
| Soporta índices espaciales | Sí | No | No | No | No |
| Índices binarios | Sí | Sí | Sí | No | Sí |
| Índices hash | No | Sí | No | No | Sí |
| Índices texto completo | Sí | No | No | No | No |
| Agrupación de índices | No | No | Sí | No | No |
| Cache de datos | No | N/A | Sí | No | Sí |
| Cache de índices | Sí | N/A | Sí | No | Sí |
| Compresión de datos | Sí[nota 3] | No | Sí[nota 4] | Sí | No |
| Soporta cluster | No | No | No | No | Sí |
| Recuperación frente a caídas | No | No | Sí | No | Sí |
| Cache de consultas | Sí | Sí | Sí | Sí | Sí |
| Estadísticas del diccionario de datos | Sí | Sí | Sí | Sí | Sí |
En todos los casos el cifrado de datos, la replicación y las operaciones de Backup/recuperación puntual se realizan por el servidor y son independientes del mecanismo de almacenamiento.
Notas a la tabla[editar]
- ↑ Limitado por la memoria direccionable por el HW/sistema operativo
- ↑ Limitado por la capacidad de los dispositivos de almacenamiento externos y el sistema operativo
- ↑ Se comprimen mediante la aplicación myisampack, quedando la tabla disponible en modo sólo lectura
- ↑ Requiere el formato Barracuda y la opción fichero por cada tabla
Referencias[editar]
- ↑ «MariaDB 5.3.4 Release Notes» (en inglés). Monty program. Consultado el 23 de febrero de 2012.
- ↑ «Berkley DB» (en inglés). Oracle. Consultado el 19 de octubre de 2012.
- ↑ «Cassandra storage engine» (en inglés). Ask Monty. Consultado el 12 de octubre de 2012.
- ↑ «Oblaksoft» (en inglés). Oblaksoft. Consultado el 11 de octubre de 2012.
- ↑ «DDE-GAN» (en inglés). DDE engine. Consultado el 12 de octubre de 2012.
- ↑ «Using IBM DB2 for i as a Storage Engine of MySQL» (en inglés). IBM red books. Consultado el 19 de enero de 2012.
- ↑ «Data Warehousing with InfiniDB» (en inglés). Calpont. Consultado el 17 de octubre de 2012.
- ↑ «Groonga, an open-source fulltext search engine and column store» (en inglés). Groonga. Consultado el 27 de enero de 2012.
- ↑ «The Ericsson Network Database (NDB) Cluster» (en inglés). Ericsson. Consultado el 6 de noviembre de 2012.
- ↑ «Spider for MySQL» (en inglés). Kentoku SHIBA. Consultado el 12 de octubre de 2012.
- ↑ «TokuDB Release Notes» (en inglés). Tokutek. Consultado el 28 de enero de 2013.
- ↑ «Storage Engines – MySQL 5.6. reference manual» (en inglés). Oracle. Consultado el 29 de enero de 2013.