125

InnoDB y MyISAM: El ying yang de MySQL ☯🐬

44895Puntos

hace 4 años

Cuando de bases de datos relacionales se habla, es indiscutible que uno de los RDBMS (Relational Database Management System) líderes es MySQL. Fue tan importante en la historia de la tecnología que hasta el día de hoy permanece como un estándar. Alojó los datos de Facebook en sus inicios, y a día de hoy sirve de modelo para aplicaciones web mundialmente famosas, como Joomla, Wordpress o Drupal.

Sin embargo, esconde dentro de sí una variedad enorme para construir el corazón de cualquier aplicación: el esquema. Acompañame a ver como podemos diseñar con una exactitud quirúrgica la implementación de nuestras entidades y relaciones, utilizando los dos potentes motores que ofrece MySQL en su core: <ins>InnoDB</ins> y <ins>MyISAM</ins>

El diseño, el gran cuello de botella

Antes de comenzar cualquier tutorial sobre bases de datos vale la pena recordar algunos conceptos básicos del diseño de las mismas, el cual es tan importante que dependiendo de su calidad puede dejar a una empresa en la bancarrota o convertirla en una startup.

Supongamos que vamos a construir un blog sobre autos deportivos 🚗🏁. Vamos a tener usuarios que publican posts, cada uno perteneciente a una categoría y con una o muchas etiquetas. Además, pueden escribir comentarios en cada artículo. Cada cosa remarcada en negrita es lo que llamamos entidad, la cual posee atributos que la caracterizan y relaciones con algunas otras.

En MySQL nosotros llamamos a las entidades tablas y a las bases de datos que alojan a estas entidades esquemas. Las tablas a veces reciben muchos registros en un tiempo corto, pero también muchas consultas en segundos. Por ejemplo, todas las semanas se registran nuevos usuarios, pero cada día se leen más de 10000 veces los posts del sitio. Y aquí está el quid de la cuestión…

Los desconocidos, InnoDB y MyISAM

Resulta que dentro de un Sistema Gestor de Bases de Datos existen también motores internos que se encargan de manejar, almacenar y recuperar información de las tablas que ya mencionamos. Se denominan storage-engine o motores de almacenamiento.

Lo importante es lograr encontrar el funcionamiento predominante de una tabla en nuestro sistema. ¿Vamos a escribir datos muy seguido? ¿Necesitamos hacer consultas constantemente? ¿Es importante cumplir con ACID (Atomicidad, Consistencia, Aislamiento y Durabilidad)?

Todas estas preguntas deben ser respondidas antes de crear la estructura de cada entidad. Una vez que lo hayamos hecho, es hora de escoger el engine correcto para construir nuestras tablas:

InnoDB, el rey de la escritura

Es un motor diseñado exclusivamente para fortalecer la Atomicidad, Consistencia, Aislamiento y Durabilidad en una base de datos. ¿Queremos hacer una gran cantidad de Transacciones? InnoDB. ¿Queremos una integridad formidable en nuestros datos? InnoDB. Y lo más importante, ¿Vamos a hacer un fuerte uso de las sentencias INSERT y UPDATE? Definitivamente InnoDB.

Un caso ideal para este storage-engine sería nuestra tabla de usuarios, cuya sentencia SQL de creación podría ser algo parecido a esto:

CREATETABLEIFNOTEXISTS`users` (
    idINTUNSIGNED PRIMARY KEY AUTO_INCREMENT,
    username VARCHAR(100) NOTNULL,
    passwordVARCHAR(64) NOTNULL,
    email VARCHAR(150) NOTNULLUNIQUE,
    active TINYINT NOTNULLDEFAULT1,
) ENGINE=InnoDB;

MyISAM, el rey de la lectura

Si estamos hablando de velocidad para hacer consultas, el claro ganador es MyISAM. Siendo optimistas (y buenos copywriters) nuestro blog recibirá miles y miles de vistas todos los días por fanáticos del automovilismo de todo el mundo. Sería un desastre que todo nuestro esquema de datos tardara más de lo esperado en responder a nuestro backend. Muchos usuarios se irían, y no queremos eso. Por ende, como van a producirse múltiples sentencias SELECT, MyISAM debe formar parte del core de nuestra tabla.

Una vez más, un nominado excelente para un ejemplo es la tabla de posts:

CREATETABLEIFNOTEXISTS`posts` (
    idINTUNSIGNED PRIMARY KEY AUTO_INCREMENT,
    title VARCHAR(150) NOTNULL,
    contentTEXTNOTNULL,
    author_id INTNOTNULL,
    category_id INTNOTNULL,

Al ser el motor por defecto, no debemos aclararlo en la sentencia.

Conclusión

A partir de ahora sería un verdadero pecado como arquitectos de software o administradores de bases de datos no pensar en esta característica, que como dije en un principio puede a futuro determinar el éxito o fracaso de un proyecto. ¿Tienes alguna idea en mente que involucre datos que quieras hacer realidad? ¿Ya decidiste el storage-engine ideal para cada tabla? Házmelo saber en los comentarios, y no te pierdas el curso de SQL y MySQL de Platzi para profundizar en el tema y convertirte en un verdadero experto 😉

Facundo Nicolás
Facundo Nicolás
facmartoni

44895Puntos

hace 4 años

Todas sus entradas
Escribe tu comentario
+ 2
Ordenar por:
20
18213Puntos

¡Muchas gracias por tu aporte! Lo acabo de leer y ahora me queda mucho más claro el concepto

2
44895Puntos
4 años

De nada eduardo! 😉

3
3 años

Concuerdo con Eduardo, a pesar de haber llevado 3 semestres bases de Datos jamás me habían dicho esto y creo que como Ing en software es súper importante. Ya que si seré líder de proyectos debo saber que opciones pueden existir.

0
42878Puntos
3 años

Hola lorerli cervances, yo tengo algo de tiempo laborando y no sabía sobre estos conceptos, así que siempre se aprende algo nuevo.

5
785Puntos

MyISAM es el motor por defecto, InnoDB si se tiene que declarar. Pequeño gran detalle.

4
6492Puntos

gracias por el articulo

4
27858Puntos

Muy buen articulo, para tener en cuenta.

La tabla MyISAM esta en memoria?

Que otro tipo de tablas son importantes para crear en un base de datos enfocada al rendimiento y a la integridad de los datos?

3
68263Puntos

Bien por el articulo, desconocía que habían dos tipos de motores.

2
9082Puntos

Gracias, después de leer este artículo es más clara la diferencia.

2
69143Puntos

Muy claro todo, una herramienta más al tool de ingeniero de datos 😄

2
3895Puntos

Excelente Facundo, la de cosas que no sabía que existían.

2
6318Puntos

Muchas gracias, excelente manual y me despejo las dudas de los 2 tipos de motores.

2
18648Puntos

Muchas gracias por la info

2
31781Puntos

Gracias Facundo!! Excelente complemento

2
9519Puntos

Es muy bueno aprender acerca de esto. Esta genial este aporte!!!

2
7478Puntos

Excelente descripción de estos engine. Gracias

2
23533Puntos

Sabía más o menos las diferencias, de lo que no estaba consciente era de que pueden variar de tabla en tabla en un mismo esquema, fabuloso.

2
13734Puntos

Hola, una consulta, que debería realizar en el caso que tenga una tabla que recibirá gran cantidad de inserts y updates. Sin embargo, también deberá ser cargar rapido?

2
44895Puntos
4 años

Recomendaría que uses InnoDB si quieres mantener tu información lo más estable y a prueba de fallas posible. Si es información muy volátil, como por ejemplo sobre transacciones que van a borrarse en algún tiempo o llevarse a un Data Warehouse, usaría MyISAM. Espero haber resuelto tu duda 😉

2
16474Puntos

Excelente contenido, gracias por tu aporte 😄

2
193Puntos

Excelente articulo! Segun yo entiendo InnoDB, el rey de la escritura para hacer un fuerte uso de INSERT & UPDATE y MyISAM, el rey de la lectura, que darà una respuesta rápida hacia las lecturas de datos.
Y por què no los dos?

1
4720Puntos

Excelente artículo, muy útil para comprender estos dos motores y aprender a discriminar su pertinencia de uso en diferentes escenarios. Muchas gracias.

1
1571Puntos

Hola muchas gracias por tu aporte.

1
17822Puntos

gracias por el post , aclare muchas dudas.

1

Increíble aporte del Gran Facundo,
Enorme Teacher!!
Enorme Hater!!

1
6342Puntos

Un aporte muy valioso, me quedo claro y terminaré de aclarar el concepto con la práctica. Pero ya de lleno esta nformación ayuda bastante

1
9924Puntos

Muy claros los conceptos, muchas gracias!

1
21288Puntos

Muy buen post. De hecho, que exista este comentario en la clase me enseñó cómo se escriben los nombres de los motores. El profesor lo pronuncia, pero no hay forma de saber cómo se escribe sólo escuchándolo.

1
14851Puntos

excelente, no entendí nada lo q se dicto en la clase hasta q leí tu tutorial, gracias

1
1667Puntos

Muchas gracias, todo esta muy bien estructurado que queda muy claro =D.

1
1770Puntos

Ojala hubiera tenido conocmiento de esta info hace unos 3 años, me hubiera resuelto muchos dolores de cabeza. Gracias bro

1
94424Puntos

Creo que apenas habia escuchado los nombres, gracias por ayudarme a aclarar los ocnceptos

1
2263Puntos

Gracias por el aporte, complementa mucho la clase en donde vi el post.

1
7738Puntos

Tengo una pregunta
¿Cuando ya la tabla está creada hay una consulta que me muestre si es InnoDB o MyIsam?
¿Una vez está creada la tabla se puede cambiar?

1

A pesar de que MongoDb y otras tecnoogias no relacionales estan en auge, sigo pensando que MySQL es bastante poderoso y bastante fácil de manejar.

Soy de la vieja escuela por lo que adaptarme a estas nuevas teconologías, despues de aaaaños de manejar MySQL ha sido un poco complejo, sin embargo no por esto dejo de aprender cosas nuevas, no se, tal vez en un futuro cercano pueda decir que Mongo es mejor que MySql 😄 jeje

1
12492Puntos

Excelente, gracias por el aporte

1
6492Puntos

gracias por el aporte

0
4935Puntos

Gracias, es un buen aporte y complemento para el curso de SQL y MySQL

0
9289Puntos

Excelentísimo aporte 😃. Gracias

0
10887Puntos

excelente aporte.

0
16519Puntos

Gracias por el aporte 😃 me ayudó mucho a comprender mejor el tema.

0
8180Puntos

Genial de los mejores tutoriales, justo vengo del curso de SQL