Elasticsearch ist eine beliebte Technologie für effizientes und skalierbares Speichern und Abrufen von Daten. Um jedoch Leistung und Datenintegrität aufrechtzuerhalten, ist ein wichtiger Vorgang namens Neuindizierung erforderlich. Die Indizierung ist der erste Vorgang zum Hinzufügen von Daten zu Elasticsearch, während die Neuindizierung für die Aufrechterhaltung der Datengenauigkeit und die Optimierung der Suchleistung unerlässlich ist.
Egal, ob Sie ein erfahrener Elasticsearch-Benutzer sind oder gerade erst damit anfangen: Kenntnisse über die Neuindizierung sind wichtig, um einen effizienten Elasticsearch-Cluster aufrechtzuerhalten. In diesem Artikel gehen wir auf die Grundlagen der Neuindizierung von Elasticsearch ein und beantworten die Fragen, wann sie erforderlich ist, wie sie ausgelöst wird und welche Best Practices Sie anwenden, um das Beste aus Ihrem Elasticsearch-Cluster herauszuholen.
In Elasticsearch hilft die Neuindizierung dabei, die Datenintegrität aufrechtzuerhalten und die Leistung zu steigern. Einfach ausgedrückt handelt es sich dabei um den Vorgang des Kopierens von Daten von einem Index in einen anderen. Dies mag zwar einfach klingen, kann aber, wenn es nicht richtig durchgeführt wird, zu Problemen wie einem langsamen Datenabruf oder sogar falschen Ergebnissen führen.
Stellen Sie sich Ihre Elasticsearch-Indizes als gut organisierte Bibliotheken vor. Im Laufe der Zeit müssen Bücher möglicherweise aktualisiert, neu angeordnet oder sogar ersetzt werden. Die Neuindizierung ist vergleichbar mit dem Umstellen der Bibliotheksregale oder dem Aktualisieren der Bücher, um alles in Ordnung zu halten. Ohne sie kann Ihre Bibliothek unorganisiert werden, was zu langsameren Suchvorgängen und potenziellen Ungenauigkeiten in Ihren Daten führt.
Diese Analogie unterstreicht, wie wichtig es ist, die Neuindizierung in Elasticsearch zu verstehen. Es geht nicht nur darum, Daten zu kopieren; es geht darum, die Integrität Ihrer „Bibliothek“ für effizientes Suchen und Abrufen aufrechtzuerhalten. Sehen wir uns an , wann eine Neuindizierung erforderlich ist und wie Sie den Überblick behalten.
Eine Neuindizierung ist unerlässlich, wenn sich Ihre Elasticsearch-Datenmodelle oder -Zuordnungen ändern oder Sie die Leistung verbessern möchten. In diesem Abschnitt werden wir uns diese Szenarien genauer ansehen, um die Nuancen zu verstehen, die eine Neuindizierung erforderlich machen.
Strukturelle Änderungen in Datenmodellen beziehen sich auf Änderungen in der Datenstrukturierung in Elasticsearch. Diese Änderungen können Dinge wie das Hinzufügen oder Entfernen neuer Felder oder das Ändern von Datentypen vorhandener Felder umfassen.
Das Einführen neuer Felder erfordert häufig eine Neuindizierung, um sicherzustellen, dass Elasticsearch effizient nach in diesem Feld gespeicherten Daten suchen kann. Das Ändern von Datentypen erfordert einen komplett neuen Index, da Sie Datentypen nicht an Ort und Stelle ändern können. Sobald die neue Zuordnung für den geänderten Datentyp erstellt wurde, müssen die Daten neu indiziert werden.
Diese strukturellen Änderungen erfordern aufgrund des Schema-on-Write-Ansatzes von Elasticsearch eine Neuindizierung. Elasticsearch indiziert Daten beim Einlesen, und alle Änderungen an der Datenstruktur können zu Inkonsistenzen zwischen vorhandenen Daten und Daten führen, die mit dem neuen Schema geschrieben wurden. Ohne Neuindizierung können Suchanfragen daher aufgrund der Schema-Nichtübereinstimmung von Datenelementen zu unerwarteten oder ungenauen Ergebnissen führen. Dies kann sich sowohl auf die Datengenauigkeit als auch auf die Suchleistung auswirken.
Zuordnungen dienen als Vorlage für die Indizierung und Abfrage von Daten in Elasticsearch. Wenn diese Zuordnungen geändert werden, ist normalerweise eine Neuindizierung erforderlich.
Zuordnungen definieren die Datentypen und Eigenschaften von Feldern in Elasticsearch. Jede Änderung dieser Zuordnungen wirkt sich darauf aus, wie Daten indiziert, gespeichert und abgerufen werden. Wenn beispielsweise ein Textfeld in ein Datumsfeld geändert wird, ändert sich die Art und Weise, wie Daten verarbeitet und abgefragt werden, grundlegend. Elasticsearch erzwingt Datenkonsistenz basierend auf Zuordnungsdefinitionen. Änderungen an Zuordnungen können zu Inkonsistenzen zwischen vorhandenen Daten und dem aktualisierten Schema führen, wenn die Daten nicht neu indiziert werden.
Wenn Zuordnungen geändert werden, insbesondere wenn dabei Datentypen oder Feldeigenschaften geändert werden, ist auch das Auffüllen wichtig. Beim Auffüllen werden vorhandene Daten nachträglich aufgefüllt oder aktualisiert, um sie an ein neues Schema oder eine neue Datenstruktur anzupassen. Dies bedeutet, dass die vorhandenen Daten auch nach der Zuordnungsänderung noch effizient und genau abgefragt werden können.
Die Neuindizierung ist nicht nur eine routinemäßige Wartungsaufgabe, sondern ein leistungsstarkes Tool zur Optimierung der Suchleistung in Elasticsearch. Durch die Neuindizierung können Sie beispielsweise die Anzahl der Shards in einem Index ändern. Durch Anpassen der Shard-Anzahl oder Resharding können Daten gleichmäßiger verteilt werden, wodurch ungleichmäßige Arbeitslasten auf bestimmten Knoten vermieden und die Suchleistung verbessert werden.
Die Neuindizierung kann auch dazu verwendet werden, Indizes zusammenzufassen. Angenommen, Sie haben mehrere kleine Indizes, die dieselbe Datenstruktur verwenden und häufig zusammen abgefragt werden. Durch die Neuindizierung können Sie diese zu einem einzigen, größeren Index zusammenfassen. Dies verringert den Verwaltungsaufwand für zahlreiche kleine Indizes, was wiederum die Suchgeschwindigkeit verbessern kann.
Schließlich kann die Neuindizierung zur Verbesserung des Routings verwendet werden. Durch Neuindizierung und effektive Anwendung von Routing-Strategien können Sie Abfragen an bestimmte Shards weiterleiten und so die Anzahl der zu durchsuchenden Shards minimieren. Dieser gezielte Ansatz kann Suchanfragen erheblich beschleunigen, wenn Ihre Daten häufig nach bestimmten Schlüsseln wie einer Benutzer-ID durchsucht werden.
Beim Upgrade von Elasticsearch Version 6.X auf 8.0 (aktuelle Hauptversion) und höher müssen Sie möglicherweise alle in Version 6 erstellten Indizes neu indizieren. Die Datenstrukturen und zugrunde liegenden Mechanismen von Elasticsearch haben sich zwischen diesen Versionen erheblich geändert, sodass aus Kompatibilitäts- und Leistungsgründen eine Neuindizierung erforderlich ist.
Der Neuindizierungsprozess stellt sicher, dass die Daten mit der aktualisierten Struktur und den neuen Funktionen übereinstimmen, sodass Sie nahtlos von Alt auf Neu migrieren können. Elasticsearch empfiehlt die Verwendung des Upgrade-Assistenten, um diesen Prozess zu unterstützen.
Die Neuindizierung in Elasticsearch wird durch die Elasticsearch Reindex API ermöglicht. Die Reindex API dient als Brücke zwischen Ihrem vorhandenen Index und dem neuen Index, den Sie erstellen oder ändern möchten. Ihr Hauptzweck besteht darin, die effiziente Übertragung von Daten von einem Index zu einem anderen zu ermöglichen. Darüber hinaus können Sie auch:
Kopieren Sie selektiv Dokumente vom Quellindex in den Zielindex.
Wenden Sie komplexe Datentransformationen an, etwa Feldumbenennungen oder Typkonvertierungen.
Filtern Sie Daten basierend auf bestimmten Kriterien.
Steuern Sie den Indizierungsprozess mit Optionen wie Drosselung und Aktualisierungsintervallen.
Stellen Sie vor der Verwendung der Reindex-API sicher, dass der Zielindex, in den Sie Ihre Daten verschieben oder transformieren möchten, erstellt und ordnungsgemäß konfiguriert ist.
Um die Neuindizierung auszulösen, müssen Sie dann eine POST-Anfrage an den _reindex
Endpunkt formulieren und dabei die Quell- und Zielindizes sowie alle gewünschten Transformationen oder Filter angeben. Eine Beispiel-POST-Anfrage zur Neuindizierung könnte wie folgt aussehen.
POST /_reindex { "source": { "index": "source_index" }, "dest": { "index": "target_index" }, "script": { "source": "ctx._source.new_field = 'transformed value'" }, "query": { "term": { "category.keyword": "example" } } }
Sobald Ihre Anfrage erstellt ist, können Sie sie an Elasticsearch senden und den Neuindizierungsprozess einleiten. Elasticsearch beginnt mit dem Kopieren der Daten vom Quellindex in den Zielindex und befolgt dabei Ihre festgelegten Anweisungen.
Sobald die Neuindizierung abgeschlossen ist, testen Sie die Daten im Zielindex gründlich, um sicherzustellen, dass sie Ihren Erwartungen entsprechen. Sie können beispielsweise die Feldzuordnungen zwischen den Quell- und Zielindizes vergleichen, um zu bestätigen, dass die Felder während der Neuindizierung korrekt zugeordnet wurden. Sie können auch eine Stichprobe von Dokumenten aus den Quell- und Zielindizes abrufen und vergleichen, um sicherzustellen, dass die Daten korrekt neu indiziert wurden.
Beim Neuindizieren in Elasticsearch sollten Sie die folgenden Best Practices befolgen, um sicherzustellen, dass der Neuindizierungsvorgang reibungslos und ohne Datenverlust abläuft und die vorhandenen Clustervorgänge nur geringfügig beeinträchtigt werden.
Bevor Sie eine Neuindizierung einleiten, müssen Sie unbedingt eine Sicherungskopie Ihres Clusters erstellen. Diese Vorsichtsmaßnahme dient als Sicherheitsnetz und bietet die Möglichkeit, den ursprünglichen Zustand wiederherzustellen, falls während der Neuindizierung unerwartete Probleme auftreten.
Der Quellindex sollte nach der Neuindizierung noch vorhanden sein. Es ist jedoch ein Grundprinzip, immer über eine zuverlässige Kopie Ihrer Daten zu verfügen, bevor Sie wesentliche Änderungen vornehmen.
Um potenzielle Risiken und Herausforderungen bei der Neuindizierung zu minimieren, empfiehlt es sich, den Vorgang zunächst in einer Vorproduktionsumgebung durchzuführen. Auf diese Weise können Sie unvorhergesehene Probleme erkennen und beheben, ohne das Produktionssystem zu beeinträchtigen. Sobald der Vorgang in der Vorproduktionsumgebung abgeschlossen und überprüft wurde, kann er sicher in der Produktion ausgeführt werden.
Es ist wichtig, die Systemressourcen während der Neuindizierung zu überwachen, um eine Überlastung Ihrer Infrastruktur zu vermeiden. Die Neuindizierung kann ressourcenintensiv sein, insbesondere bei größeren Datensätzen. Wenn Sie CPU, Speicher, Festplattennutzung und Netzwerkaktivität genau im Auge behalten, können Sie die Ressourcenzuweisung optimieren und sicherstellen, dass der Prozess effizient ausgeführt wird, ohne Leistungsengpässe zu verursachen. Um die Ressourcennutzung zu überprüfen, können Sie die Node Stats API verwenden.
GET /_nodes/stats
Dies gibt eine Antwort zurück, die wie folgt aussieht.
{ "_nodes": { "total": 2, "successful": 2, "failed": 0 }, "cluster_name": "my_cluster", "nodes": { "node_id1": { "name": "node_name1", "process": { "cpu": { "percent": 30, } }, "jvm": { "mem": { "heap_used_percent": 40.3, "heap_used_in_bytes": 123456789, "heap_max_in_bytes": 256000000 } } }, "node_id2": { "name": "node_name2", "process": { "cpu": { "percent": 50, } }, "jvm": { "mem": { "heap_used_percent": 60.8, "heap_used_in_bytes": 210987654, "heap_max_in_bytes": 256000000 } } } } }
Wenn Sie feststellen, dass die Neuindizierung zu aufwändig ist, können Sie den Vorgang drosseln, indem Sie beim Senden der Neuindizierungsanforderung den Parameter requests_per_second
festlegen. Dadurch wird zwischen den Batches eine Ruhepause für die im Parameter festgelegte Anzahl von Sekunden eingefügt, um eine Abkühlphase zwischen den Batches bereitzustellen.
Sobald die Neuindizierung abgeschlossen ist, sollten Sie die Daten im Zielindex überprüfen, um sicherzustellen, dass sie wie erwartet aussehen. Dieser Validierungsprozess sollte eine Reihe von Tests umfassen, darunter Dokumentzählungen, Feldzuordnungen und Suchanfragen.
Elasticsearch hat sich zweifellos als führende Lösung im Bereich der NoSQL-Suche und -Analyse etabliert. Es lohnt sich jedoch, alternative Lösungen zu erkunden, die einzigartige Ansätze für die Datenindizierung und -abfrage bieten, insbesondere eine wie Rockset.
Rockset ist eine Cloud-native Alternative zu Elasticsearch und bietet eine andere Perspektive für die Indizierung und Abfrage von Daten. Im Gegensatz zum Schema-on-Write-Ansatz von Elasticsearch ermöglicht Rockset eine schemalose Aufnahme. Daten können aufgenommen und abgefragt werden, ohne dass eine Schemadefinition im Voraus erforderlich ist. Dies bietet mehr Flexibilität bei der Handhabung sich ständig weiterentwickelnder Datensätze, ohne dass eine Neuindizierung erforderlich ist.
Im Bereich der Indexverwaltung profitiert Rockset von seinem konvergenten Indexierungsmodell , bei dem beim Einlesen der Daten automatisch ein Zeilenindex, ein Spaltenindex und ein Suchindex erstellt werden. Im Gegensatz dazu werden bei Elasticsearch die Indizes von Benutzern erstellt und strukturelle Änderungen erfordern oft zeitaufwändige Neuindizierungsverfahren.
Obwohl Elasticsearch für verschiedene Anwendungsfälle weiterhin eine robuste Lösung darstellt, kann es sinnvoll sein, Alternativen wie Rockset in Betracht zu ziehen, insbesondere wenn Sie feststellen, dass die Neuindizierung in Elasticsearch zu einer häufigen Aktivität wird.
Die Neuindizierung ist ein grundlegender Prozess in Elasticsearch und wichtig, um die Effizienz und Genauigkeit der Suchergebnisse bei der Weiterentwicklung der Datenstrukturen aufrechtzuerhalten.
Wenn Sie feststellen, dass die Neuindizierung für Ihr Team zu einer ständigen Zeitbelastung wird, lohnt es sich möglicherweise, alternative Lösungen wie Rockset in Betracht zu ziehen. Rockset bietet einen rationaleren Indexverwaltungsprozess, der es Entwicklern ermöglicht, sich auf wertschöpfendere Aktivitäten zu konzentrieren.