Me acaban de pasar un proyecto ya desarrollado que tiene problemas de rendimiento y el soporte de su servidor les dice “El cuello de botella parece venir del acceso a disco. Creemos que en este caso puede deberse a la saturación de MySQL, ya que vemos que tienen tablas con más de 1 millón de registros, lo que puede ocasionar problemas.”
He navegado por la red, y veo que efectivamente esto puede suponer un problema para MySQL, pero también tengo entendido que sistemas cómo Twitter o Facebook que pueden manejar millones de registros en sus inicios al menos usaban MySQL. Entonces mi duda es, ¿cuál sería el planteamiento? He leído a cerca de NoSQL al respecto..
Me estoy mirando la ayuda de MySQL y diversas opiniones y comentarios que hay en la red, pero quiero consultarlo con vosotros, que hasta ahora habéis sido un aporte valiosísimo. También lo quiero dejar aquí, por si el día de mañana le vale a otro.
Bueno, vayamos al grano:
1.- Tengo claro la importancia de revisar el esquema de la BD, las consultas, así como índices y claves, etc. (sql query log, y explain me vienen de maravilla)
2.- La cache de página, de base de datos, etc.. para no sobrecargar la base de datos si hay muchas visitas concurrentes.
Hasta ahí bien (avisadme si no me dejo nada importante).
¿Ahora por dónde seguir? ¿Me dejo algo?
Y por ponernos en un ejemplo real, en este caso veo una tabla “productos” con casi 1/2 millón de filas, y una relacionada que es “imagenes”, que tiene 5 millones de imágenes. Un producto tiene de 1 a N imágenes, siendo la media por lo veo aproximadamente 10. Por cada imagen solo se guarda un id, y una ruta al archivo físico.
¿Sería más eficiente para la base de datos pasar las imágenes de cada producto a una columna de la tabla productos? ¿Cuál es vuestra opinión? (estoy haciendo pruebas con este ejemplo)
Y por otro lado veo estos libros/recursos veo:
http://shop.oreilly.com/product/0636920022343.do
http://shop.oreilly.com/product/0636920026907.do
http://shop.oreilly.com/product/0636920000136.do
¿Alguien me recomienda más?
Y sobre todo, gracias de antemano!