Respuestas de API de caché a MySQL: ¿es una buena práctica?
Frecuentes
Visto 745 veces
0
Estoy usando una API que tiene un límite de solicitudes. La respuesta de la API está en XML y, por lo general, tiene un tamaño de alrededor de 8 kB. Para decirlo brevemente: quiero eliminar para enviar exactamente las mismas solicitudes dos veces a la API.
Puede haber más de 2 millones de solicitudes con sus correspondientes respuestas. Entonces, cuando obtengo esa cantidad de respuestas XML copiadas en registros en MySQL, ¿Responderá lo suficientemente rápido si lo consulto?
Estructura de la mesa:
- id int PK Incremento automático
- request_parameters TEXTO ÚNICO
- respuesta TEXTO
Encontré MySQL Query Cache, pero creo que solo es útil para solicitudes muy solicitadas. ¿El otro tal vez disminuya la velocidad? También encontré Varnish, pero me parece más un caché de HTML/código.
1 Respuestas
1
Asumo:
- solo necesitas buscar un
response
de un determinadorequest_parameters
(...WHERE request_parameters = 'some string'
) request_parameters
no son demasiado largos (menos de 1000 caracteres)
Yo aconsejo:
Suelta la columna de tu ID. Aunque algunas personas recomiendan usar siempre un número entero como clave principal, entiendo que no está tratando de construir una base de datos relacional. Solo necesitas una mesa para el almacenamiento.
cambiar su
request_parameters
tipos de columna aVARCHAR(x)
, siendo "x" el mayor tamaño esperado de una cadena de parámetros.Marca
request_parameters
la clave principal.Según lo recomendado por PLB, almacene la versión serializada de sus respuestas XML.
2 millones de filas de dichos datos requerirán varios Gb, además de algo de espacio para el índice. Si tiene una gran cantidad de memoria disponible en su sistema, y si puede permitirse perder todos sus datos cuando reinicia MySQL, entonces puede probar con la tabla MEMORY.
Respondido el 14 de junio de 12 a las 04:06
Gracias, esa es una respuesta completa a mi pregunta! - DelphiLynx
No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas php mysql caching or haz tu propia pregunta.
"¿Responderá lo suficientemente rápido si lo consulto?" ¿Se romperá si lo miro? Completar una base de datos con un texto aleatorio de 8 KB y algunos parámetros se puede realizar fácilmente, y la respuesta será más precisa de lo que cualquiera de nosotros puede adivinar. - CodeCaster
¿Por qué no simplemente obtiene una matriz de xml (creo que ya lo hizo), serializa esa matriz y la guarda en archivos en el sistema de archivos del servidor? Esta es una manera sucia pero muy rápida. También puede utilizar el almacenamiento en caché de terceros. - Leri
use memcached o si se usa MySQL - una tabla de MEMORIA - Maxim Krizhanovsky
@DelphiLynx No veo ningún problema, además de invalidar los datos en caché: recuerde implementar un método para eliminar registros, ya que la respuesta de la API en caché podría quedar desactualizada. - CodeCaster
@DelphiLynx No, entendiste mal. No sé qué le sucede a tu xml en tu script. Si usa uno para usar su contenido en su secuencia de comandos, debe convertir uno en una matriz. Entonces, si serializa esta matriz y la guarda como
.txt
archivo y volver a leer uno en lugar de intentar obtener xml nuevamente será más rápido. - Leri