PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Warum ist Solr so viel schneller als Postgres?

Erstens verwendet Solr keine B-Bäume. Ein Lucene-Index (die von Solr verwendete zugrunde liegende Bibliothek) besteht aus einem schreibgeschützten Segmente . Für jedes Segment verwaltet Lucene ein Begriffswörterbuch, das aus der lexikografisch sortierten Liste der Begriffe besteht, die im Segment vorkommen. Das Nachschlagen eines Begriffs in diesem Begriffswörterbuch erfolgt mithilfe einer binären Suche, sodass die Kosten für eine Einzelbegriffssuche O(log(t)) betragen wobei t die Anzahl der Terme ist. Im Gegensatz dazu kostet die Verwendung des Index eines Standard-RDBMS O(log(d)) wobei d die Anzahl der Dokumente ist. Wenn viele Dokumente denselben Wert für ein Feld haben, kann dies ein großer Gewinn sein.

Darüber hinaus fügte Lucene-Committer Uwe Schindler Unterstützung für sehr performante Numerische Bereichsabfragen vor einigen Jahren. Für jeden Wert eines Zahlenfeld , speichert Lucene mehrere Werte mit unterschiedlichen Genauigkeiten. Dadurch kann Lucene Bereichsabfragen sehr effizient ausführen. Da Ihr Anwendungsfall numerische Bereichsabfragen stark zu nutzen scheint, könnte dies erklären, warum Solr so viel schneller ist. (Für weitere Informationen lesen Sie die Javadocs, die sehr interessant sind und Links zu relevanten Forschungsarbeiten enthalten.)

Aber Solr kann dies nur, weil es nicht alle Einschränkungen hat, die ein RDBMS hat. Beispielsweise ist Solr sehr schlecht darin, jeweils ein einzelnes Dokument zu aktualisieren (es bevorzugt Stapelaktualisierungen).