En un post anterior te mostramos como migrar tu base de datos por SSH, gracias a una pregunta que hizo uno de nuestros lectores, hemos decidido crear este post, MyISAM vs InnoDB, elige tu motor de almacenamiento MySQL, para mostrar un pequeño bosquejo de diferencias sobre estos motores de almacenamiento, y que de acuerdo a los requerimientos de la plataforma puedas elegir el que mejor se adapte.
MyISAM vs InnoDB, elige tu motor de almacenamiento MySQL
El motor de almacenamiento (storage-engine) se encarga de almacenar, manejar y recuperar información de una tabla. Los motores más conocidos son MyISAM e InnoDB. La elección de uno u otro dependerá mucho del escenario donde se aplique, pero Arsys quiere ayudarnos a conocer mejor estos conocidos motores de almacenamiento. En la elección se pretende conseguir la mejor relación de calidad acorde con nuestra aplicación. Si necesitamos transacciones, claves foráneas y bloqueos, tendremos que escoger InnoDB. Por el contrario, escogeremos MyISAM en aquellos casos en los que predominen las consultas SELECT a la base de datos.
InnoDB dota a MySQL de un motor de almacenamiento transaccional (conforme a ACID) con capacidades de commit (confirmación), rollback (cancelación) y recuperación de fallos. InnoDB realiza bloqueos a nivel de fila y también proporciona funciones de lectura consistente sin bloqueo al estilo Oracle en sentencias SELECT. Estas características incrementan el rendimiento y la capacidad de gestionar múltiples usuarios simultáneos. No se necesita un bloqueo escalado en InnoDB porque los bloqueos a nivel de fila ocupan muy poco espacio. InnoDB también soporta restricciones FOREIGN KEY. En consultas SQL, aún dentro de la misma consulta, pueden incluirse libremente tablas del tipo InnoDB con tablas de otros tipos.
MyISAM es el motor por defecto. Para crear una tabla InnoDB se debe especificar la opción ENGINE = InnoDB o TYPE = InnoDB en la sentencia SQL de creación de tabla:
CREATE TABLE customers (a INT, b CHAR (20), INDEX (a)) ENGINE=InnoDB; CREATE TABLE customers (a INT, b CHAR (20), INDEX (a)) TYPE=InnoDB;
Ventajas MyISAM:
Las principales ventajas de MyISAM son:
- Mayor velocidad en general a la hora de recuperar datos.
- Recomendable para aplicaciones en las que dominan las sentencias SELECT ante los INSERT /UPDATE.
- Ausencia de características de atomicidad ya que no tiene que hacer comprobaciones de la integridad referencial, ni bloquear las tablas para realizar las operaciones, esto nos lleva como los anteriores puntos a una mayor velocidad.
Desventajas InnoDB:
- Como desventaja, señalamos que no realiza bloqueo de tablas, esto puede ser un problema si como se ha mencionado anteriormente hay un acceso simultáneo al mantenimiento de registros por parte de varios usuarios.
Ventajas InnoDB:
Las principales ventajas de InnoDB son:
- Soporte de transacciones
- Bloqueo de registros
- Nos permite tener las características ACID (Atomicity, Consistency, Isolation and Durability: Atomicidad, Consistencia, Aislamiento y Durabilidad en español), garantizando la integridad de nuestras tablas.
- Es probable que si nuestra aplicación hace un uso elevado de INSERT y UPDATE notemos un aumento de rendimiento con respecto a MyISAM.
Desventajas InnoDB:
- Como desventaja, marcamos que al ser un tipo de motor que define un sistema más complejo de diseño de tablas, reduce el rendimiento en velocidad para desarrollo que requieren de un elevado número de consultas.
¿Aún tienes dudas de qué motor es el que necesitas?
Te ayudamos a tomar tu decisión respondiendo a una serie de preguntas:
- ¿Tu tabla va a recibir INSERT, UPDATE y DELETE mucho más tiempo de lo que será consultada?: InnoDB
- ¿Necesitarás hacer búsquedas full-text?: MyISAM
- ¿Prefieres o requieres diseño relacional de bases de datos?: InnoDB
- ¿Es un problema el espacio en disco o memoria RAM?: MyISAM
- Un solo gestor de mantenimiento para una plataforma que requerirá muchas consultas o visitas: MyISAM
- Necesitas velocidad y mínimo consumo de recursos en servidor, espacio, RAM, etc.: MyISAM
- Varios o muchos gestores de mantenimiento: InnoDB
- Desarrollo donde se prioriza el diseño relacional de bases de datos: InnoDB
Independientemente del sistema que se elija, hay que hacer un buen diseño de la estructura y funcionalidad de la base de datos.
La información o datos no deben almacenarse de cualquier manera. Hay que buscar el mayor aprovechamiento de los recursos que tenemos a nuestra disposición, tanto a nivel de almacenamiento como de rendimiento.
Hay que mantener la consistencia de la información durante todo el ciclo de vida de la base de datos, más aún si los datos que se manejan son críticos, por ejemplo los salarios de una organización.
Y eso es todo por el momento, si te ha gustado este post, no olvides compartir y contárselo a tus amigos, ¡Hasta la próxima!