Domanda

Sto eseguendo una ricerca in tempo reale tramite una casella di testo che quando un utente digita restituisce le righe corrispondenti da un database mysql.Il problema è che questa è una delle caratteristiche principali del sito e ha davvero aumentato il carico di memoria sul mio database mysql.Perché ogni pressione di un tasto invia una richiesta allo script php per interrogare il database.

Ho fatto in modo che php ignori qualsiasi termine di ricerca lungo meno di 3 caratteri, ma oltre a questo cos'altro potrei fare?

Ci sono alcune opzioni qui: Ottimizzazione della ricerca in tempo reale in Javascript

Ma mi chiedevo se dovrei estrarre da un foglio xml memorizzato nella cache, o c'è in qualche modo un modo per memorizzare nella cache mysql stesso.

Che cosa fa Google o alcuni degli altri grandi siti che fanno molto affidamento su questa funzione?

È stato utile?

Soluzione

Proverei a ottimizzare il più possibile la query SQL:

  • no SELECT *
  • no JOIN
  • utilizza WHERE solo nei campi indicizzati

Inoltre, nel lato PHP:

  • memorizza nella cache i risultati della ricerca per i termini cercati più di frequente (più frequentemente vengono aggiornati i dati cercati, più breve è la durata della cache) in file di testo normale
  • usa redis, memcached se possibile

Inoltre, considera un database NoSQL parallelo

e

Zend_Search_Lucene è ottimo per i siti a traffico medio / basso (secondo quanto riferito ha problemi durante il ridimensionamento)

Altri suggerimenti

Utilizza i motori di indicizzazione per indicizzare i tuoi dati e velocizzare i risultati di ricerca. Come: http://sphinxsearch.com/ o http://lucene.apache.org/core/

Imposta cron job per indicizzare i dati, c'è l'API PHP per sphinx e il modulo Zend Framework.Velocità di indicizzazione uo cose molto, se usato correttamente.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top