Wie implementiert man eine effiziente Facettensuche bei Millionen von Produktattributen ohne Performance-Einbußen im Index?

Die Implementierung einer performanten Facettensuche bei Millionen von Attributen erfordert den Wechsel von relationalen Datenbanken hin zu Inverted Indices wie Elasticsearch oder OpenSearch. Das Hauptproblem bei großen Attributmengen ist die sogenannte „Mapping Explosion“. Wenn jedes Produktattribut als eigenes Feld im Index angelegt wird, wächst das Cluster-State-Objekt überproportional an, was zu massiven Performance-Einbußen und Instabilitäten führt.

Wir lösen dieses Problem durch die Abkehr von dynamischen Field-Mappings. Statt jedes Attribut als Spalte zu definieren, nutzen wir ein flaches Key-Value-Schema. Dabei werden Attribute in einem Array von Objekten gespeichert, die jeweils nur zwei Felder besitzen: attr_name und attr_value.

AnsatzPerformance (Aggregation)FlexibilitätIndex-Stabilität
Flat MappingSehr hochGeringNiedrig (Mapping Explosion)
Nested ObjectsMittelHochMittel (Memory Overhead)
Key-Value PairsHochSehr hochSehr hoch

Um die Aggregationsgeschwindigkeit zu maximieren, setzen wir auf Doc Values. Diese spaltenorientierten Datenspeicher liegen auf der Festplatte und ermöglichen es, Facetten-Counts zu berechnen, ohne den JVM-Heap-Speicher durch Field-Data-Caching zu überlasten. Im Rahmen unseres Data Engineering optimieren wir zudem die Sharding-Strategie, um die Last der Aggregations-Requests gleichmäßig über die Knoten zu verteilen.

Für die Abfrage nutzen wir Global Ordinals, die die Begriffe in den Facetten-Feldern in numerische IDs übersetzen. Dies reduziert die Rechenlast bei der Schnittmenge von Filtern erheblich. Bei extrem hohen Datenvolumina implementieren wir zudem eine Caching-Schicht für die häufigsten Facetten-Kombinationen, um die Latenz im Millisekundenbereich zu halten.

Die technische Herausforderung besteht darin, die Balance zwischen der Granularität der Filter und der Größe des Index-States zu finden. Ein falsch konfiguriertes Mapping führt bei Millionen von Attributen unweigerlich zum Absturz des Clusters.

Wir empfehlen den konsequenten Verzicht auf dynamische Field-Mappings zugunsten eines flachen Key-Value-Paar-Ansatzes in Kombination mit Doc Values, da dies die einzige skalierbare Methode ist, um die Index-Stabilität bei Millionen von Attributen zu garantieren.

Sergej Wiens

Sergej Wiens

Gründer & Software Architekt