Pergunta

Estou executando uma pesquisa ao vivo em uma caixa de texto que, quando um usuário digita, retorna as linhas correspondentes de um banco de dados mysql.O problema é que este é um dos principais recursos do site e realmente aumentou a carga de memória em meu banco de dados mysql.Porque cada pressionamento de tecla envia uma solicitação ao script php para consultar o banco de dados.

Eu fiz o php ignorar qualquer termo de pesquisa com menos de 3 caracteres, mas além disso, o que mais eu poderia fazer?

Existem algumas opções aqui: Otimização de pesquisa ao vivo em Javascript

Mas eu queria saber se devo puxar de uma folha xml em cache ou se há alguma maneira de armazenar em cache o próprio mysql.

O que o Google ou alguns dos outros grandes sites que dependem muito desse recurso fazem?

Foi útil?

Solução

Eu tentaria otimizar a consulta SQL tanto quanto possível:

  • sem SELECT *
  • sem JOIN
  • use WHERE apenas em campos indexados

Além disso, no lado do PHP:

  • armazenar em cache os resultados da pesquisa para os termos pesquisados com mais frequência (quanto mais frequentemente os dados pesquisados são atualizados, menor será o tempo de vida do cache) em arquivos de texto simples
  • use redis, memcached se possível

Além disso, considere um banco de dados NoSQL paralelo

E

Zend_Search_Lucene é ótimo para sites de baixo / médio tráfego (supostamente tem problemas ao escalar)

Outras dicas

Use mecanismos de indexação para indexar seus dados e acelerar seus resultados de pesquisa. Como: http://sphinxsearch.com/ ou http://lucene.apache.org/core/

Configure o cron job para indexar dados, há PHP API para sphinx e Zend Framework Module.A indexação acelera muito as coisas, se usada corretamente.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top