sql >> Base de Datos >  >> RDS >> Mysql

Rincón de la base de datos:guía para principiantes de los motores de almacenamiento Mysql

Cuando se crea una base de datos, un factor que a menudo se pasa por alto pero que es crítico en el rendimiento es el motor de almacenamiento (particularmente a medida que crece la base de datos). En muchos casos, la tentación es simplemente aceptar el valor predeterminado y continuar con el desarrollo de su proyecto. Esto puede generar impactos negativos inesperados en el rendimiento, las copias de seguridad y la integridad de los datos más adelante en el ciclo de vida de la aplicación, como cuando su equipo implementa análisis y paneles MySQL.

Para evitar estos peligros potenciales, vamos a echar un vistazo más de cerca a algunos de los motores de almacenamiento compatibles con MySQL más utilizados (a partir de la versión 5.7).

Motores de almacenamiento compatibles

¿Cuáles son mis opciones?

De forma predeterminada, MySQL 5.7 admite diez motores de almacenamiento (InnoDB, MyISAM, Memory, CSV, Archive, Blackhole, NDB, Merge, Federated y Example). Para ver cuáles están disponibles y compatibles con su servidor, use este comando:

mysql> MOSTRAR MOTORES\G

Esto generará una lista de motores de almacenamiento y le indicará cuáles están disponibles, no disponibles o cuál está actualmente configurado como predeterminado. La columna "Soporte:" mostrará 'SÍ', 'NO' o 'DEFAULT', respectivamente.

En algunas aplicaciones, puede surgir la necesidad de tener diferentes motores de almacenamiento para diferentes tablas en la misma base de datos. Este es un ejemplo de por qué necesita planificar cuidadosamente el modelo de datos para su aplicación. En la mayoría de los casos, sin embargo, solo se necesitará un motor de almacenamiento.

Capacidades del motor de almacenamiento

¿En qué son buenos?

Echemos un vistazo más de cerca a algunos de los motores de almacenamiento más utilizados. Esto nos dará una idea de para qué se diseñó cada motor y cómo se pueden utilizar mejor para cumplir con nuestros objetivos comerciales.

InnoDB: La opción predeterminada en MySQL 5.7, InnoDB es un motor de almacenamiento robusto que ofrece:

  • Cumplimiento total de ACID
  • Commit, rollback y crash-recovery
  • Bloqueo a nivel de fila
  • Restricciones de integridad referencial FOREIGN KEY
  • Aumentar la concurrencia multiusuario (a través de lecturas sin bloqueo)

Con la funcionalidad anterior que ofrece InnoDB, es obvio por qué es el motor predeterminado en MySQL. Es un motor que funciona bien y ofrece muchos de los atributos requeridos que necesitaría cualquier base de datos. Sin embargo, una discusión exhaustiva de todas sus capacidades está fuera del alcance de este artículo. Este es el motor que probablemente se utilizará en la mayoría de las aplicaciones.

MiISAM: La funcionalidad que distingue a MyISAM es su capacidad para:

  • índices de búsqueda de texto completo
  • bloqueo a nivel de mesa
  • falta de soporte para transacciones

Aunque es un motor de almacenamiento rápido, es más adecuado para su uso en aplicaciones de lectura intensiva y en su mayoría de lectura, como el almacenamiento de datos y las aplicaciones web que no necesitan compatibilidad con transacciones o conformidad con ACID.

NDB (o NDBCLUSTER):si su base de datos funcionará en un entorno agrupado, NDB es el motor de almacenamiento elegido. Es mejor cuando necesita:

  • Informática distribuida
  • Alta redundancia
  • Alta disponibilidad
  • Los tiempos de actividad más altos posibles

Tenga en cuenta que la compatibilidad con NDB no está incluida en la distribución de los binarios estándar de MySQL Server 5.7. Deberá actualizar a la última versión binaria de MySQL Cluster. Sin embargo, si está desarrollando en un entorno de clúster, probablemente tenga la experiencia necesaria para manejar estas tareas.

CSV: Un motor de almacenamiento útil cuando los datos deben compartirse con otras aplicaciones que utilizan datos con formato CSV. Las tablas se almacenan como archivos de texto de valores separados por comas. Aunque esto facilita compartir los datos con scripts y aplicaciones, un inconveniente es que los archivos CSV no están indexados. Por lo tanto, los datos deben almacenarse en una tabla InnoDB hasta la etapa de importación/exportación del proceso.

Agujero negro: Este motor acepta pero no almacena datos. Similar a UNIX /dev/null, las consultas siempre devuelven un conjunto vacío. Esto puede ser útil en un entorno de base de datos distribuida donde no desea almacenar datos localmente o en situaciones de rendimiento u otras pruebas.

Archivo: Tal como su nombre lo indica, este motor es excelente para datos históricos rara vez referenciados. Las tablas no están indexadas y la compresión ocurre al insertarlas. Las transacciones no son compatibles. Utilice este motor de almacenamiento para archivar y recuperar datos anteriores.

Federado: Este motor de almacenamiento sirve para crear una única base de datos lógica local mediante la vinculación de varios servidores MySQL físicos diferentes. No se almacenan datos en el servidor local y las consultas se ejecutan automáticamente en el servidor remoto respectivo. Es perfecto para entornos de data mart distribuidos y puede mejorar enormemente el rendimiento cuando se usa MySQL para informes analíticos.

Designación de un motor de almacenamiento

¿Cómo cambio el motor de almacenamiento que se usa?

El motor de almacenamiento que se utiliza se establece al crear la tabla. Como se indicó anteriormente, InnoDB es el motor de almacenamiento predeterminado en las versiones 5.5 y posteriores de MySQL. Si desea utilizar uno diferente, es mejor hacerlo dentro de su instrucción CREATE TABLE. Por ejemplo, supongamos que ha identificado una tabla que necesita usar el motor de almacenamiento CSV. Su declaración CREATE TABLE demasiado simplificada podría verse así:

mysql> CREAR TABLA Shared_Data (
    -> Data_ID INTEGER NOT NULL,
    -> Nombre VARCHAR(50) NO NULO,
    -> Descripción VARCHAR(150)
    -> ) MOTOR='CSV';
Después de lo cual realizaríamos una instrucción INSERT como de costumbre:
mysql> INSERT INTO Shared_Data VALUES
-> (1,'dispositivo uno', 'la última versión de la mejor tecnología'),
-> (2,'dispositivo dos', 'el más rápido del mercado');

Si tiene éxito, si inspecciona el directorio de la base de datos, ahora debería haber un archivo 'Shared_Data.CSV' que contiene los registros que ha insertado en la tabla Shared_Data.

La misma metodología se puede utilizar para cualquiera de los muchos motores de almacenamiento compatibles con MySQL. Aunque es posible cambiar el motor de almacenamiento después de que se haya creado una tabla con ALTER TABLE declaración, es una buena práctica planificar en consecuencia y establecerla desde el principio.

Para cerrar

MySQL tiene muchas opciones

Como puede ver, MySQL ofrece soporte para motores de almacenamiento diseñados para manejar tareas muy diferentes en muchos entornos diferentes. Identificar qué motores usar y cuándo usarlos puede ayudarnos a evitar complicaciones innecesarias y problemas de rendimiento a medida que escalan nuestras aplicaciones.

Ya sea que necesite un 99,999 % de tiempo de actividad y confiabilidad en su clúster de computación distribuida o soporte de transacciones compatible con ACID con restricciones de FOREIGN KEY, MySQL tiene un motor de almacenamiento que se adapta a sus necesidades.

Como siempre, la planificación e identificación adecuadas de los objetivos y requisitos de su proyecto es la mejor manera de identificar con precisión qué motores de almacenamiento son los más adecuados para su aplicación. Con suerte, este artículo sirve como un punto de partida útil para ayudarlo en ese sentido.

Este artículo apareció originalmente aquí. Republicado con permiso. Envíe sus quejas de derechos de autor aquí.