¿Por qué usar el almacenamiento en caché de MySQL DB?

Actualmente estoy en el proceso de desarrollar dos aplicaciones iOS que dependen en gran medida de bases de datos MySQL. Cada uno tiene su propia API que solicita la aplicación respectiva, que ejecuta consultas relevantes que solicitan datos de las bases de datos MySQL.

Las consultas varían desde ser simples, basadas en usuarios o en 'objetos':

SELECT `username`, `id`, `full_name` FROM `users` WHERE `id` = 1
INSERT INTO `users` (`full_name`, `username`, `email`, `password`, `signup_method`, `latitude`, `longitude`) VALUES (?, ?, ?, ?, ?, ?, ?)"
SELECT q.*, (SELECT COUNT(a.qid) FROM answers as a WHERE qid=q.id) AS a_count FROM questions as q ORDER BY a_count DESC LIMIT 1, 10

según la ubicación:

SELECT ( 6371 * acos( cos( radians(?) ) * cos( radians( latitude ) ) * cos( radians( longitude ) - radians(?) ) + sin( radians(?) ) * sin( radians( latitude ) ) ) ) AS distance FROM `users` HAVING distance <= 5 ORDER BY points DESC

SELECT * , (6371 * acos(cos(radians(latitude)) * cos(radians({$values['latitude']})) * cos(radians({$values['longitude']}) - radians(longitude)) + sin(radians(latitude)) * sin(radians({$values['latitude']})))) AS distance FROM `questions` HAVING distance <= ? ORDER by distance LIMIT ?,?

Estas consultas obviamente toman tiempo. Sobre todo este último por la intensidad de rendimiento que provoca.

Muchos servicios utilizan capas de almacenamiento en caché junto con sus bases de datos para mejorar el rendimiento. P.ej:

  • Memcachd
  • Redis
  • y más.

Mi pregunta es cuándo, con respecto a las consultas, se debe usar el almacenamiento en caché y cuáles son los beneficios de usar el almacenamiento en caché.

Gracias,

¡máximo!

preguntado el 28 de julio de 12 a las 00:07

2 Respuestas

Debe almacenar en caché simplemente cuando es más barato almacenar en caché que generar los resultados desde cero.

Este costo depende de cosas como:

  • potencia de procesamiento de varios servidores y software. Tal vez tenga capacidad limitada en su servidor db, pero exceso de capacidad en otro servidor.
  • dinero: ¿es más barato comprar hardware más potente que construir un sistema de caché?
  • Costo de CPU de generar los resultados desde cero versus costo de RAM de caché. La mayoría de las veces, los servidores de base de datos están vinculados a la CPU, mientras que los servidores de caché están vinculados a la memoria. Depende de usted decidir cuál es más barato actualizar en su caso.
  • velocidad de recuperación de la memoria caché frente a la velocidad de recuperación de la base de datos. Si, como dice, las consultas requieren mucho tiempo y obtenerlas de un caché es más económico, el almacenamiento en caché acelerará sus solicitudes.
  • con qué frecuencia deben actualizarse los elementos almacenados en caché. Si solo duran unos segundos, puede que no valga la pena la molestia.
  • tener un método para caducar y actualizar los elementos almacenados en caché. Esto es a menudo un problema muy difícil.
  • tener el conocimiento técnico y el tiempo para manejar la complejidad adicional.

Pero siempre, empieza por la fuente. ¿Ha examinado el registro de consultas lentas de MySQL para ver qué consultas son costosas? Puede ayudarlo a ver dónde faltan índices importantes y qué consultas tardan inesperadamente. [pt-query-digest]1 del Percona-Toolkit puede ayudar resumiendo este archivo de registro. Optimice sus bases de datos antes de comenzar a almacenar en caché.

Mirando sus tipos de consultas, me parece que vale la pena almacenar en caché los resultados e incluso precalentar el caché.

La elección del caché es importante, por supuesto. Supongo que ya está utilizando el caché de consultas incorporado de MySQL. Asegúrese de que esté habilitado y de que tenga suficiente memoria asignada. Las consultas simples como 'SELECCIONAR nombre de usuario' son baratas de todos modos, pero MySQL también las almacena fácilmente en caché. Sin embargo, hay muchos límites para el almacenamiento en caché de consultas integrado, y muchas razones por las que las consultas no se almacenan en caché o se vacían. Por ejemplo, las consultas con funciones (como las consultas basadas en la ubicación) simplemente se omiten. Lea los documentos.

El uso de un caché como Redis permite tener mucho más control sobre qué almacenar en caché, por cuánto tiempo y cómo caducar. Hay muchas ideas sobre cómo implementar esto y también dependen de su aplicación. Echa un vistazo por la red.

Sugeriría habilitar el caché de consulta, simplemente porque es fácil y económico y ayudará un poco, y definitivamente consideraría implementar una capa de almacenamiento en caché en memoria para su base de datos. Tal vez valga la pena considerar un servidor de indexación, como Solr, que tiene métodos integrados para consultas de bases de ubicación. Lo usamos junto con MySQL.

Memcached y Redis son buenas opciones para el almacenamiento en caché. Personalmente, elegiría Redis porque tiene más casos de uso y persistencia opcional en el disco, pero eso depende totalmente de usted. Tal vez su marco de trabajo de elección tenga algunos componentes existentes que puede usar en su aplicación.

Otro consejo: mide todo. Solo sabe qué optimizar o almacenar en caché si sabe qué lleva tiempo. Además, los resultados de sus optimizaciones solo serán claros si vuelve a medir. implementar algo como estadísticas y mida los diversos eventos y tiempos en su aplicación. Mejor demasiado que no lo suficiente. Grafique los resultados y analícelos a lo largo del tiempo. Te sorprenderá lo que aparece.

Respondido 28 Jul 12, 03:07

Gracias. Sin embargo, lo amplió un poco más. :-)- Martijn Heemels

Respuesta brillante, increíblemente detallada y al grano. ¡Muchas gracias por tomarte el tiempo de responderla! - max_

El almacenamiento en caché le permite acceder a la base de datos mucho más rápido que simplemente usando consultas MySQL, ya que consumen mucho tiempo. En la mayoría de los casos, cuando una aplicación web crece, la base de datos será su mayor cuello de botella, lo que generará una gran cantidad de copias de seguridad debido a la velocidad de las consultas. Como resultado, muchos sitios web y empresas recurren al almacenamiento en caché como una forma rápida y sencilla de aumentar la velocidad de acceso a la información de su base de datos. Yo diría que no se preocupe por eso en las primeras etapas de desarrollo, más bien, pruébelo cuando tenga un sitio web alfa en funcionamiento.

Respondido 28 Jul 12, 03:07

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.