Pregunta

Estoy ejecutando una búsqueda en vivo a través de un cuadro de texto que cuando un usuario escribe, devuelve filas coincidentes de una base de datos mysql.El problema es que esta es una de las características principales del sitio y realmente ha aumentado la carga de memoria en mi base de datos mysql.Porque cada pulsación de tecla envía una solicitud al script php para consultar la base de datos.

Tengo php ignorando cualquier término de búsqueda de menos de 3 caracteres, pero además de eso, ¿qué más puedo hacer?

Aquí hay algunas opciones: Optimización de búsqueda en vivo en Javascript

Pero me preguntaba si debería extraer de una hoja xml almacenada en caché, o hay alguna forma de almacenar en caché mysql.

¿Qué hace Google o algunos de los otros sitios grandes que dependen en gran medida de esta función?

¿Fue útil?

Solución

Intentaría optimizar la consulta SQL tanto como sea posible:

  • sin SELECCIONAR *
  • no UNIRSE
  • use el DÓNDE solo en los campos indexados

Además, en el lado de PHP:

  • almacenar en caché los resultados de búsqueda de los términos buscados con más frecuencia (cuanto más frecuentemente se actualizan los datos buscados, más corta es la vida útil de la caché) en archivos de texto sin formato
  • use redis, memcached si es posible

Además, considere una base de datos NoSQL paralela

Y

Zend_Search_Lucene es ideal para sitios de tráfico medio / bajo (según se informa, tiene problemas al escalar)

Otros consejos

Utilice motores de indexación para indexar sus datos y acelerar sus resultados de búsqueda. Me gusta: http://sphinxsearch.com/ o http://lucene.apache.org/core/

Configure el trabajo cron para indexar datos, hay PHP API para sphinx y Zend Framework Module.Indexación de velocidad uo muchas cosas, si se usa correctamente.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top