Memorizzazione dei termini di ricerca dell'utente

3

Ho un'applicazione php come airbnb. Voglio memorizzare i valori di ricerca ogni volta che l'utente cerca gli elenchi.

la mia soluzione numero 1 lo avrebbe memorizzato nella tabella mysql, ma non sono sicuro che sia saggio farlo, se il sito ha molte ricerche non rallenterebbe le cose.

dovrei usare mysql o qualcos'altro?

    
posta Basit 13.11.2016 - 02:08
fonte

2 risposte

1

In generale, le prestazioni della tabella MySQL dipenderanno da alcuni fattori, come il motore di tabella (InnoDB, MyISAM, ...) e la quantità di aggiornamenti o di selezioni. Se selezioni principalmente sarai sorpreso di quanti milioni di file puoi gettare in una tabella con hardware modesto.

Per il tuo caso d'uso specifico, ti viene in mente un'idea: deduplica i tuoi termini di ricerca, poiché spesso verranno utilizzati gli stessi valori (supponiamo).

Una tabella crea una mappatura per un bigint con incremento automatico ai termini di ricerca univoci. Questa tabella ha il bigint come chiave primaria e anche un vincolo univoco sui termini di ricerca.

L'altra tabella tiene traccia di ciascun uso specifico dei termini di ricerca. Questa tabella avrebbe una chiave esterna bigint per la prima tabella. Tieni presente che questa tabella potrebbe essere costituita da righe di dimensioni fisse, il che può aiutare un po '.

Quindi, fondamentalmente:

  1. INSERT IGNORE nella prima tabella (termini di ricerca)
  2. seleziona dalla prima tabella per ottenere la chiave
  3. inserisci nella seconda tabella

Tre round trip per query.

Se sapessimo di più su cosa intendi per valori di ricerca, potremmo fornire un modello di tabella, che potrebbe finire con una terza tabella se hai bisogno di relazioni molti-a-molti. Ma volevo solo presentare l'idea di deduplicare i dati che potrebbero essere ridondanti.

Inoltre, non sottovalutare l'importanza della dimensione delle piccole righe in MySQL per le tabelle a cui si accede frequentemente. Non ha nulla di simile a TOAST di PostgreSQL, per quanto ne so. Quindi tirare fuori meno frequentemente aggiornato o accedere a valori con contenuti lunghi in una tabella separata one-to-one o one-to-many può essere una grande vittoria.

    
risposta data 13.12.2016 - 08:04
fonte
0

Se la tua preoccupazione è costituita da molte ricerche, la mia prima inclinazione è semplicemente quella di essere sicuro di conservare questa crescita illimitata in un volume separato rispetto all'applicazione in esecuzione. Puoi farlo come un file di registro o un DB separato da quello principale.

Naturalmente ci sono modi più eleganti per limitare la crescita (file di registro progressivi, ecc.) ma mi piace prendere in considerazione il primo brutalmente semplice.

    
risposta data 13.11.2016 - 06:07
fonte

Leggi altre domande sui tag