MySQL es un gestor de bases de datos relacional de licencia GPL. Una base de datos relacional desde un punto de vista lógico usa tablas para guardar los datos. Internamente un mecanismo de almacenamiento (storage engine) es el encargado de almacenar en último término los datos de las tablas en dispositivos físicos, para que estos tengan durabilidad. El mecanismo es totalmente clave a la hora de evaluar la rapidez y las funcionalidades que puede ofrecer el SGBD. MySQL tiene la opción de incluir dinámicamente -desde MySQL 5.1- los distintos mecanismos para soportar el almacenamiento de las tablas. La mayoría de estos mecanismos se pueden instalar en desarrollos derivados de MySQL como MariaDB y Percona Server.
Factores diferenciadores de los mecanismos Todo mecanismo de almacenamiento tiene unas características particulares. Las características en las que podemos encontrar diferencias entre los distintos mecanismos 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. 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. Concurrencia: 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 aquellas que las necesiten tendrán definidos de manera precisa los requisitos ACID que deben satisfacer los mecanismos adecuados a ellas. Características varias: aquí se puede incluir soporte para operaciones geo-espaciales y restricciones de seguridad para ciertas operaciones de manipulación de datos.
Tipos de mecanismos La comunidad MySQL ha desarrollado una gran variedad de . 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.
En esta recopilación se han utilizado criterios arbitrarios de agrupación y clasificación de los mecanismos, por lo que queda abierta la cuestión a sugerencias para refinar la taxonomía.
Básicos/teóricos Aquí se incluyen los mecanismos consustanciales al desarrollo de MySQL o que tienen una aplicación académica.
Archive 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).
Blackhole 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.
CSV Este mecanismo de almacenamiento almacena los datos en ficheros de texto separados por comas. Está disponible en todas las versiones del servidor MySQL.
Cuando se crea una tabla con el mecanismo CSV el servidor crea un fichero con el formato de la tabla en el directorio de datos con extensión frm, y crea un fichero para contener los datos con extensión CSV en el que se guardan los datos de cada tupla en una línea ASCII y separados por comas.
Example Mecanismo de almacenamiento vacío, no hace nada. Muestra un ejemplo con la arquitectura de programación adecuada para el desarrollo de nuevos mecanismos de almacenamiento. Tiene interés para desarrolladores.
Memory 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 estas 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.
Sequence Este mecanismo de almacenamiento permite crear secuencias de números ascendentes o descendentes, empezando por uno determinado y con un incremento arbitrario.
Sirve para crear tablas virtuales efímeras cuando se necesiten. Nunca se escriben en disco ni se crean ficheros frm. Estas tablas tiene acceso solo lectura, son transaccionales y soportan XA.
El mecanismo Sequence ha sido introducido en MariaDB 10.0.3.
Tradicionales Aquí incluimos los más o menos convencionales y más difundidos.
Aria El mecanismo Aria nació como una alternativa a MyISAM pero resistente a caídas del sistema. Viene incorporado en la distribución MariaDB. 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.
Este mecanismo originalmente se llamó María, pero más tarde se le cambió el nombre por Aria para evitar confusiones con la base de datos MariaDB, la base de datos sucesora de la original MySQL y realizada por el mismo creador, Monty Widenius. Última versión: 1.5
BDB
La librería de funciones de bases de datos transaccionales Berkeley DB fue desarrollada originalmente por Sleepycat y adquirida posteriormente por Oracle en 2006. Por su naturaleza, DBD ha de ser empotrada en aplicaciones ya que no se suministra interfaz de usuario.
Por ello puede utilizarse como mecanismo de almacenamiento e invocarse desde un gestor de base de datos como MySQL/MariaDB. Se incluye soporte para ella en distribuciones fuentes de MySQL y en distribuciones binarias MySQL-Max.
Las tablas BDB pueden sobrevivir a fallos del sistema. Tiene características transaccionales (COMMIT y ROLLBACK). La distribució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.
Soportada solo hasta MySQL 5.0. Última versión: 6.0
InnoDB
InnoDB es un mecanismo de almacenamiento transaccional -con características ACID- para MySQL. Realiza bloqueo a nivel de filas y lecturas no bloqueantes MVCC tipo Oracle, lo que aumentan la concurrencia y las prestaciones.
InnoDB pertenece a Oracle Corporation tras la adquisición de Innobase Oy en octubre de 2005. Tiene licenciamiento dual: se distribuye bajo licencia GPL, pero también se licencia a empresas que la quieran incluir en su software.
Sigue el modelo ACID con COMMIT, ROLLBACK y recuperación de caídas. Bloquea a nivel de fila (tupla), y proporciona concurrencia multiusuario para lectura. Organiza los datos en disco para optimizar el uso de claves primarias. Mantiene la integridad de datos mediante restricciones FOREIGN KEY, que se aplican en INSERT, UPDATE y DELETE.
InnoDB almacena los datos agrupados para reducir el flujo de entrada/salida de consultas habituales basadas en claves primarias. Se pueden combinar tablas InnoDB con tablas de otros mecanismos de almacenamiento, incluso en la misma consulta.
InnoDB fue el precursor de Falcon (por SUN, abandonado) y de XtraDB (por Percona).
MyISAM
Implementación de MySQL del original ISAM que efectúa el almacenamiento de datos de manera sencilla y robusta, y proporciona una alta velocidad de acceso y un tamaño pequeño de ficheros. 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 MySQL 5.6 para muchas tablas internas de metadatos.
PBXT PrimeBase XT (PBXT) es un mecanismo de almacenamiento transaccional para MySQL. Usa una arquitectura basada en logs y 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. Última versión: 1.0.11
TokuDB TokuDB es un mecanismo de almacenamiento altamente escalable y sin mantenimiento que permite acelerar la indizació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. Última versión: 5.6.26-74.0
XtraDB 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, solo se halla incorporado en MariaDB y Percona.
Distribuidos Aquellos que están distribuidos sobre una serie de nodos.
Columnstore Almacenamiento de columnas basado en InfiniDB 4.6.7. Diseñado para su uso en big data que puede escalar linealmente hasta petabytes y proporciona altas prestaciones, adecuada para proceso analítico. Potencia las ventajas del almacenamiento en columnas, efectúa compresión y permite particionado horizontal y vertical proporcionando buenas prestaciones a la hora de analizar grandes conjuntos de datos. Está disponible en MariaDB 10.1 y 10.2. Última versión: 1.2
Spider