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

Uso de diferentes motores de almacenamiento MySQL en el diseño de bases de datos

Cualquier arquitecto de base de datos que diseñe una base de datos MySQL se enfrenta al problema de seleccionar el motor de almacenamiento adecuado. Por lo general, una aplicación usa solo un motor:MyISAM o InnoDB . Pero intentemos ser un poco más flexibles e imaginemos cómo se pueden usar diferentes motores de almacenamiento.

El modelo de datos inicial

Para comenzar, construyamos un modelo de datos simplificado para un sistema CRM (gestión de relaciones con el cliente) que usaremos para ilustrar el punto. El diseño cubrirá las principales funciones de CRM:datos de ventas, definiciones de productos e información para análisis. No contendrá los detalles que normalmente se usan en los sistemas de CRM.




Como puede ver, este modelo de datos tiene tablas que almacenan información transaccional llamada sale y sale_item . Cuando un cliente compra algo, la aplicación creará una nueva fila en la sale mesa. Cada producto comprado se verá reflejado en el sale_item mesa. Una tabla relacionada, sale_status , es para almacenar posibles estados (es decir, pendiente, completo, etc.).

El product tabla almacena información sobre bienes. Define cada producto y sus descriptores básicos. En un diagrama más detallado, agregaría más tablas para manejar la especificación y categorización del producto. Pero para nuestras necesidades actuales, eso no es necesario.

La tabla de clientes guarda datos sobre los clientes. Esta es una parte integral de cualquier sistema de CRM y generalmente rastrea la actividad individual de todos los usuarios. Obviamente, a menudo tiene información muy detallada. Pero como señalé, no necesitamos estos detalles en este momento.

El log table almacena lo que hizo cada cliente dentro de la aplicación. Y el report_sales La tabla está diseñada para el uso de análisis de datos.

A continuación, describiré los motores de almacenamiento MySQL que posiblemente podrían usarse en este diseño. Y más adelante, discutiremos qué motor es adecuado para cada tipo de mesa.

Una descripción general de los motores de almacenamiento de MySQL

Un motor de almacenamiento es un módulo de software que utiliza MySQL para crear, leer o actualizar datos de una base de datos. No se recomienda elegir un motor al azar, pero muchos desarrolladores están felices de usar MyISAM o InnoDB, aunque también hay otras opciones disponibles. Cada motor tiene sus pros y sus contras, y la selección adecuada del motor depende de varios factores. Echemos un vistazo a los motores más populares.

  • Mi ISAM tiene una larga historia con MySQL. Era el motor predeterminado para las bases de datos MySQL antes de la versión 5.5. MyISAM no admite transacciones y solo tiene bloqueo a nivel de tabla. Se utiliza principalmente para aplicaciones de lectura intensiva.
  • InnoDB es un motor de almacenamiento general que equilibra alta confiabilidad y buen rendimiento. Admite transacciones, bloqueo a nivel de fila, recuperación de fallas y control de concurrencia de múltiples versiones. Además, proporciona una restricción de integridad referencial de clave externa.
  • La memoria El motor almacena todos los datos en la RAM. Se puede utilizar para almacenar referencias de búsqueda.
  • Otro motor, CSV , guarda los datos en archivos de texto con valores separados por comas. Este formato se utiliza principalmente para la integración con otros sistemas.
  • Fusionar es una buena opción para los sistemas de informes, como en el almacenamiento de datos. Permite la agrupación lógica de un conjunto de tablas MyISAM idénticas, a las que también se puede hacer referencia como un objeto.
  • Archivo está optimizado para la inserción de alta velocidad. Almacena información en tablas compactas no indexadas y no admite transacciones. El motor de almacenamiento Archive es ideal para mantener grandes cantidades de datos históricos o archivados a los que rara vez se hace referencia.
  • Los Federados El motor ofrece la capacidad de separar servidores MySQL o crear una base de datos lógica a partir de muchos servidores físicos. No se almacenan datos en las tablas locales y las consultas se ejecutan automáticamente en las tablas remotas (federadas).
  • El agujero negro El motor actúa como un "agujero negro" que acepta datos pero no los almacena. Todas las selecciones devuelven un conjunto de datos vacío.
  • El motor Ejemplo se utiliza para mostrar cómo desarrollar nuevos motores de almacenamiento.

Esta no es una lista completa de motores de almacenamiento. MySQL 5.x admite nueve de ellos desde el primer momento, además de docenas más desarrollados por la comunidad MySQL. Se pueden encontrar más detalles sobre los motores de almacenamiento en la documentación oficial de MySQL.

Actualización del diseño del modelo de datos

Mire de nuevo nuestro modelo de datos. Obviamente, diferentes tablas se utilizarán de diferentes maneras. La sale la tabla debe admitir transacciones. Por otro lado, el log y report_sales las tablas no requieren esta función. La misión principal del log la tabla está almacenando datos con la máxima eficiencia. La recuperación rápida es el requisito principal para el report_sales mesa.

Tengamos en cuenta los puntos anteriores y modifiquemos el esquema de nuestra base de datos. En Vertabelo, puede configurar el "Motor de almacenamiento" en las Propiedades de la tabla panel. Por favor, eche un vistazo a las imágenes a continuación.


Configuración del motor de almacenamiento

Entonces, veamos el diseño actualizado de la base de datos.




Especifiqué motores de almacenamiento para las tablas existentes y reorganicé el report_sales mesa. Como puede ver, las tablas se dividen en tres grupos:

  • Tablas de transacciones, que se utilizan con la aplicación principal
  • Tablas de informes para análisis de BI
  • Tabla de registro para almacenar toda la actividad del usuario

Hablemos de todos ellos por separado.

Tablas de transacciones

Estas tablas contienen datos ingresados ​​por los usuarios durante las operaciones de rutina diaria. En nuestro caso, habría información de venta, como:

  • qué empleado realizó la venta
  • quién compró el producto
  • lo que se vendió
  • cuánto cuesta

En la mayoría de los casos, InnoDB es la mejor solución para las tablas de transacciones. Este motor de almacenamiento admite el bloqueo de filas y algunos usuarios pueden trabajar juntos. Así mismo InnoDB permite el uso de transacciones y claves foráneas. Pero, como sabes, estos beneficios no son gratuitos; el motor puede realizar declaraciones de selección más lentamente que MyISAM y guardar datos con menos eficacia que Archive.

Todos los motores descritos anteriormente tienen algunas protecciones, por lo que los desarrolladores no tienen que escribir funciones de reversión complejas para cada operación. En una aplicación de ventas típica, mantener la coherencia de los datos es más importante que posibles problemas de rendimiento.

Tablas de informes

En el nuevo diseño, dividí una mesa en un par de mesas más pequeñas. Esto ahorra esfuerzo cuando llega el momento de administrar datos y realizar el mantenimiento de tablas e índices. También nos permite crear la tabla MERGE sale_report para combinar otras tablas de informes. Como resultado, la herramienta de BI sigue recuperando datos de una tabla enorme (para fines analíticos), pero tenemos la ventaja de trabajar con tablas más pequeñas.

El Report_sale_{year} las tablas son tablas MyISAM. Este motor de almacenamiento no admite transacciones y solo puede bloquear la tabla como un todo. Debido a que MyISAM no se preocupa por estos elementos complejos, realiza operaciones de manipulación de datos a gran velocidad. Debido a su estructura de archivos, este motor de almacenamiento lee los datos más rápido que el InnoDB más popular.

La tabla de registro

El motor de almacenamiento de archivos es una buena opción para almacenar datos de registro. Puede insertar filas y comprimir datos almacenados rápidamente. Hay grandes beneficios para mantener la información sobre las actividades del usuario. Sin embargo, Archive tiene algunas restricciones. No admite operaciones de actualización y recupera los datos lentamente. Pero en una tabla de registro, los beneficios descritos son más importantes que los inconvenientes.

Integración de motores de almacenamiento

Cada sistema debe estar integrado con la vida externa. En el caso de las aplicaciones, pueden ser usuarios que rellenan las tablas de transacciones y de referencia. Pueden ser servicios e integración a través de REST, SOAP, WCF o algo así. Y por último, pero no menos importante, puede ser la integración de la base de datos.

MySQL y Oracle han desarrollado dos motores de almacenamiento realmente útiles:Federado y CSV . El primero, Federado , debe usarse para cargar datos desde una base de datos MySQL externa. El segundo motor de almacenamiento, CSV , permite que las bases de datos guarden registros en formato CSV y lean archivos separados por comas en el aire, sin ningún esfuerzo adicional.

Como puede ver, el uso de diferentes motores de almacenamiento para diferentes propósitos le da a su base de datos una mayor flexibilidad. Si un arquitecto de base de datos toma su decisión después de considerar todos los pros y los contras, el resultado puede ser realmente impresionante.

¿Tiene experiencia en el uso de diferentes motores de almacenamiento en el diseño de bases de datos? Me gustaría ver sus consejos y sugerencias. Por favor compártelos en la sección de comentarios.