22 Punkte von xguru 2024-08-14 | 3 Kommentare | Auf WhatsApp teilen

Volltextsuche (Full Text Search)

  • Volltextsuche ist eine Technik, um in einer Textsammlung Einträge anhand des Vorkommens bestimmter Keywords und Phrasen zu finden
  • Die meisten Suchmaschinen wie Elasticsearch verwenden den BM25-Algorithmus, um Suchergebnisse zu bewerten
    • BM25 berücksichtigt, wie häufig ein Begriff vorkommt und wie einzigartig dieser Begriff über alle Dokumente hinweg ist
  • Volltextsuche unterscheidet sich von Ähnlichkeitssuche oder Vektorsuche, die Ergebnisse anhand semantischer Bedeutung finden und ranken
  • Viele moderne Anwendungen kombinieren Volltextsuche und Ähnlichkeitssuche; das wird als Hybrid Search bezeichnet und kann zu präziseren Ergebnissen führen

Postgres FTS

Vorteile

  1. Einfachheit

    • Postgres FTS benötigt keine zusätzliche Infrastruktur und kann auf allen verwalteten Postgres-Diensten wie AWS RDS verwendet werden
    • Langfristig spart das erheblich Zeit und Aufwand, da kein externer Such-Engine-Stack orchestriert und verwaltet werden muss
  2. Echtzeitsuche

    • Mit Postgres FTS können Daten sofort nach dem Commit durchsucht werden
    • Das kann für Unternehmen, die Sucherlebnisse für Endnutzer oder latenzsensible Sucherlebnisse aufbauen, sehr nützlich sein, etwa für E-Commerce-Seiten oder FinTechs
  3. Postgres-Transaktionen und MVCC

    • Die ACID-Transaktionen und die Multiversion Concurrency Control (MVCC) von Postgres gewährleisten die Zuverlässigkeit von FTS-Ergebnissen bei gleichzeitigem Zugriff und häufigen Updates

Nachteile

  1. Unvollständiger Funktionsumfang

    • Der begrenzte Funktionsumfang von Postgres FTS kann für manche Unternehmen ein Ausschlusskriterium sein
    • Fehlende Funktionen sind unter anderem BM25-Scoring, Relevanz-Tuning, benutzerdefinierte Tokenizer und Facettierung
  2. Schlechtere Performance bei großen Datensätzen

    • Postgres FTS funktioniert gut bei Tabellen mit Millionen von Zeilen, die Performance fällt jedoch bei Tabellen mit zig Millionen Zeilen deutlich ab
  3. Transaktions-Overhead

    • Das Erstellen eines GIN-Index auf einer Spalte fügt Transaktionen, die diese Spalte betreffen, etwas Latenz hinzu, in der Regel im Millisekundenbereich

Kernaussagen

  • Postgres FTS ist ideal für die Suche in kleinen bis mittelgroßen Tabellen, wenn keine ausgefeilten FTS-Abfragen benötigt werden
  • Was genau „mittelgroß“ und „ausgefeilt“ bedeutet, bleibt absichtlich vage, da es von den Performance-Anforderungen abhängt
  • Glücklicherweise sind Tests mit Postgres FTS sowie Migrationen zu oder von Postgres FTS sehr einfach

Elasticsearch

Vorteile

  1. Umfassender Funktionsumfang

    • Elasticsearch kann nahezu jede FTS-Abfrage verarbeiten
    • Die Elastic Query DSL (Domain Specific Language) ist der Standard für Volltextsuchfunktionen
  2. Hohe Performance

    • Benchmarks zufolge kann Elasticsearch dank der battle-tested Lucene-Suchmaschine im Kern und seiner verteilten Architektur Milliarden von Zeilen in Millisekunden abfragen
  3. Mehr als nur Suche

    • Neben FTS ist Elasticsearch auch eine analytische Query Engine, eine Vektordatenbank sowie eine Plattform für Sicherheit und Observability
    • Viele Organisationen schätzen die Einfachheit, mehrere Dienste innerhalb von Elasticsearch zu konsolidieren

Nachteile

  1. Kein verlässlicher Datenspeicher

    • Viele Unternehmen haben es später bereut, Elasticsearch als primären Datenspeicher zu verwenden
    • Das ist kein empfohlener Ansatz. Elasticsearch fehlen ACID-Transaktionen und MVCC, was zu Dateninkonsistenzen und Datenverlust führen kann; zudem fehlen relationale Eigenschaften und Echtzeitkonsistenz, wodurch viele Datenbankabfragen schwierig werden
  2. ETL-Pipeline erforderlich

    • Da Elasticsearch kein verlässlicher Datenspeicher ist, extrahieren, transformieren und laden Organisationen, die Postgres verwenden, ihre Daten in der Regel von Postgres nach Elasticsearch (ETL)
    • Änderungen am zugrunde liegenden Postgres-Schema müssen sorgfältig gepflegt werden, damit die Pipeline nicht beschädigt wird, denn Ausfälle in der ETL-Pipeline können zu allen Arten von Produktionsstörungen führen
  3. Verlust an Datenaktualität

    • ETL-Jobs sind zeitaufwendig und laufen periodisch
    • Daten, die Elasticsearch erreichen, sind oft um Stunden hinter Postgres zurück
    • Für Anwendungen, die Echtzeitsuche über Postgres-Tabellen durchführen, kann das ein Ausschlusskriterium sein
  4. Kosten

    • Es ist überraschend, wie oft Unternehmen berichten, dass Elasticsearch ihr größter Software-Kostenfaktor geworden ist
    • Als die Kosten für Elasticsearch-Cluster explodierten, wechselten viele dieser Unternehmen von Elasticsearch Cloud zu Self-Hosting, was zwar die Cloud-Ausgaben senkte, aber neue Probleme verursachte
    • Elasticsearch gilt als notorisch schwer zu betreiben, zu tunen und zu verwalten
    • Diese Organisationen stellen teure Engineers ein, um ihre Elasticsearch-Cluster zu verwalten

Kernaussagen

  • Elasticsearch bietet hervorragende Such-Performance auf Kosten von Betriebsaufwand und Datenaktualität
  • Elasticsearch ist zu empfehlen, wenn leichtere Alternativen nicht ausreichen oder ohnehin andere Elasticsearch-Dienste genutzt werden sollen

Alternative Suchmaschinen

  • In den vergangenen Jahren sind moderne Suchmaschinen wie Algolia, Meilisearch und Typesense entstanden
  • Diese Engines werden typischerweise genutzt, um Sucherlebnisse für Endnutzer aufzubauen
  • Auch die Hacker-News-Suche basiert auf Algolia
  • Jeder Dienst unterscheidet sich in Details, aber für Entwickler, die Suche für Postgres suchen, gibt es einen wichtigen Vorbehalt
  • Keine dieser Lösungen wurde speziell für Postgres entwickelt
  • Postgres-Nutzer werden bei diesen Diensten voraussichtlich ähnliche Probleme erleben wie bei Elasticsearch

Ist das Beste aus beiden Welten möglich?

  • ParadeDB ist eine für Postgres entwickelte Volltextsuchmaschine
  • Basierend auf einer Erweiterung namens pg_search bettet ParadeDB mit Tantivy eine in Rust geschriebene Lucene-Alternative direkt in Postgres ein
  • Wie Postgres FTS verbindet sich ParadeDB mit bestehenden selbstverwalteten Postgres-Datenbanken, ohne zusätzliche Infrastruktur zu benötigen
  • Wie Elasticsearch bietet ParadeDB die Funktionen einer fortschrittlichen Volltextsuchmaschine
  • Die Kompatibilität mit verwalteten Postgres-Diensten wie Amazon RDS soll in Kürze verfügbar sein

3 Kommentare

 
galadbran 2024-08-14

Ich habe mich gefragt, was Postgres FTS eigentlich ist, und jetzt ist mir klar, dass damit die eingebaute Funktion gemeint war.

 
xguru 2024-08-14

Diese Leute verbessern das kontinuierlich und veröffentlichen dazu passende Beiträge, deshalb wurde es auch auf GeekNews schon mehrfach geteilt.

ParadeDB - PostgreSQL for Search
pg_bm25 - Full-Text-Sucherweiterung für Postgres, die Qualität auf Elastic-Niveau bietet

 
cometkim 2024-08-14

Die im Artikel erwähnten paradedb, pg_search und pg_bm25 sind alle dasselbe Projekt.