PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Perché Solr è molto più veloce di Postgres?

Innanzitutto, Solr non usa B-trees. Un indice Lucene (la libreria sottostante utilizzata da Solr) è costituito da un segmenti . Per ogni segmento, Lucene mantiene un dizionario dei termini, che consiste nell'elenco dei termini che compaiono nel segmento, ordinati lessicograficamente. La ricerca di un termine in questo dizionario di termini viene effettuata utilizzando una ricerca binaria, quindi il costo di una ricerca di un singolo termine è O(log(t)) dove t è il numero di termini. Al contrario, l'utilizzo dell'indice di un RDBMS standard costa O(log(d)) dove d è il numero di documenti. Quando molti documenti condividono lo stesso valore per alcuni campi, questa può essere una grande vittoria.

Inoltre, Uwe Schindler, committente di Lucene, ha aggiunto il supporto per query intervallo numerico alcuni anni fa. Per ogni valore di un campo numerico , Lucene memorizza diversi valori con diverse precisioni. Ciò consente a Lucene di eseguire query di intervallo in modo molto efficiente. Poiché il tuo caso d'uso sembra sfruttare molto le query dell'intervallo numerico, questo potrebbe spiegare perché Solr è molto più veloce. (Per ulteriori informazioni, leggi i javadoc che sono molto interessanti e fornisci collegamenti a documenti di ricerca pertinenti.)

Ma Solr può farlo solo perché non ha tutti i vincoli di un RDBMS. Ad esempio, Solr non riesce ad aggiornare un singolo documento alla volta (preferisce gli aggiornamenti batch).