MyISAM versus InnoDB [cerrado]
Estoy trabajando en un proyecto que implica muchas escrituras en bases de datos, diría yo ( 70% de inserciones y 30% de lecturas ). Esta proporción también incluiría actualizaciones que considero que son una lectura y una escritura. Las lecturas pueden estar sucias (por ejemplo, no necesito información 100% precisa en el momento de la lectura).
La tarea en cuestión realizará más de 1 millón de transacciones de bases de datos por hora.
He leído un montón de cosas en la web sobre las diferencias entre MyISAM e InnoDB, y MyISAM me parece la opción obvia para las bases de datos/tablas particulares que usaré para esta tarea. Por lo que parece estar leyendo, InnoDB es bueno si se necesitan transacciones ya que se admite el bloqueo a nivel de fila.
¿Alguien tiene alguna experiencia con este tipo de carga (o superior)? ¿Es MyISAM el camino a seguir?
He discutido brevemente esta pregunta en una tabla para que pueda concluir si debe optar por InnoDB o MyISAM .
Aquí hay una pequeña descripción general de qué motor de almacenamiento de base de datos debe usar en cada situación:
MyISAM InnoDB -------------------------------------------------- -------------- Búsqueda de texto completo requerida Sí 5.6.4 -------------------------------------------------- -------------- Requerir transacciones Sí -------------------------------------------------- -------------- Consultas de selección frecuentes Sí -------------------------------------------------- -------------- Inserción, actualización y eliminación frecuentes Sí -------------------------------------------------- -------------- Bloqueo de filas (procesamiento múltiple en una sola tabla) Sí -------------------------------------------------- -------------- Diseño de base relacional Sí
Resumen
- En casi todas las circunstancias, InnoDB es el mejor camino a seguir
- Pero, lectura frecuente, casi nada de escritura, use MyISAM
- Búsqueda de texto completo en MySQL <= 5.5, use MyISAM
No soy un experto en bases de datos y no hablo por experiencia. Sin embargo:
Las tablas MyISAM utilizan bloqueo a nivel de tabla . Según sus estimaciones de tráfico, tiene cerca de 200 escrituras por segundo. Con MyISAM, solo uno de estos podría estar en progreso en cualquier momento . Debe asegurarse de que su hardware pueda mantenerse al día con estas transacciones para evitar que se sobrecargue, es decir, una sola consulta no puede tardar más de 5 ms.
Eso me sugiere que necesitaría un motor de almacenamiento que admita el bloqueo a nivel de fila, es decir, InnoDB.
Por otro lado, debería ser bastante trivial escribir algunos scripts simples para simular la carga con cada motor de almacenamiento y luego comparar los resultados.