Respuestas de API de caché a MySQL: ¿es una buena práctica?

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.

preguntado el 12 de junio de 12 a las 13:06

"¿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. -

¿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. -

use memcached o si se usa MySQL - una tabla de MEMORIA -

@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. -

@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. -

1 Respuestas

Asumo:

  • solo necesitas buscar un response de un determinado request_parameters (...WHERE request_parameters = 'some string')
  • request_parameters no son demasiado largos (menos de 1000 caracteres)

Yo aconsejo:

  1. 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.

  2. cambiar su request_parameters tipos de columna a VARCHAR(x), siendo "x" el mayor tamaño esperado de una cadena de parámetros.

  3. Marca request_parameters la clave principal.

  4. 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 or haz tu propia pregunta.