View a markdown version of this page

Amazon DocumentDB-Indizes verwalten - Amazon DocumentDB

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Amazon DocumentDB-Indizes verwalten

Erstellung eines Amazon DocumentDB-Indexes

Für die Erstellung von Indizes in Amazon DocumentDB müssen eine Reihe von Entscheidungen getroffen werden:

  • Wie schnell muss es abgeschlossen werden?

  • Kann während des Builds auf die Sammlung nicht zugegriffen werden?

  • Wie viel Rechenleistung einer Instanz kann dem Build zugewiesen werden?

  • Welcher Indextyp sollte erstellt werden?

Dieser Abschnitt hilft Ihnen bei der Beantwortung dieser Fragen und enthält die Befehle und Überwachungsbeispiele, um einen Amazon DocumentDB-Index für Ihre instanzbasierte Clustersammlung zu erstellen.

Richtlinien

Die folgenden Richtlinien beinhalten grundlegende Grenzwerte und Kompromisse bei der Konfiguration bei der Erstellung neuer Indizes:

  • Unterstützung für Amazon DocumentDB-Versionen — Während die Single-Worker-Indizierung in allen Amazon DocumentDB-Versionen unterstützt wird, wird die Indexierung mehrerer Worker nur in den Amazon DocumentDB-Versionen 4.0, 5.0 und 8.0 unterstützt.

  • Leistungseinbußen — Eine Erhöhung der Anzahl der Worker im Indexerstellungsprozess erhöht die CPU-Auslastung und die Lese-I/O auf der primären Instance Ihrer Amazon DocumentDB-Datenbank. Die Ressourcen, die für die Erstellung eines neuen Indexes benötigt werden, stehen Ihrem laufenden Workload nicht zur Verfügung.

  • Elastische Cluster — Parallele Indizierung wird auf elastischen Amazon DocumentDB-Clustern nicht unterstützt.

  • Maximale Anzahl an Workern — Die maximale Anzahl von Workern, die Sie konfigurieren können, hängt von der Größe Ihrer primären Instance in Ihrem Datenbank-Cluster ab. Dies ist die Hälfte der Gesamtzahl der vCPUs auf der primären Instance Ihres Datenbank-Clusters. Beispielsweise können Sie maximal 32 Worker auf einer db.r6g.16xlarge-Instance mit 64 vCPUs ausführen.

    Anmerkung

    Parallele Worker werden in Instance-Klassen vom Typ 2xlarge und niedriger nicht unterstützt.

  • Mindestanzahl an Workern — Die Mindestanzahl von Workern, die Sie konfigurieren können, ist einer. Die Standardeinstellung für die Indexerstellung auf instanzbasierten Clustern ist zwei Worker. Sie können die Anzahl der Worker jedoch auf einen reduzieren, indem Sie die Option „Worker-Threads“ verwenden. Dadurch wird der Prozess mit einem einzigen Worker ausgeführt.

  • Indexkomprimierung — Amazon DocumentDB unterstützt keine Indexkomprimierung. Die Datengrößen für Indizes sind möglicherweise größer als bei Verwendung anderer Optionen.

  • Indizierung mehrerer Sammlungen — Die Hälfte der vCPUs auf der primären Instanz Ihres Datenbank-Clusters kann für konfigurierte Worker verwendet werden, die Indexerstellung für mehrere Sammlungen durchführen.

  • Indextypen — Eine vollständige Erläuterung der unterstützten Indextypen in Amazon DocumentDB finden Sie im Datenbank-Blog unter So indexieren Sie auf Amazon DocumentDB. AWS

Erste Schritte

Verwenden Sie den Befehl, um mit der Indexerstellung für eine Sammlung zu beginnen. createIndexes Standardmäßig führt der Befehl zwei parallele Worker aus, wodurch die Geschwindigkeit der Indexerstellung um das Zweifache erhöht wird.

Der folgende Befehlsvorgang veranschaulicht beispielsweise, wie ein Index für das Feld „user_name“ in einem Dokument erstellt und die Geschwindigkeit des Indizierungsprozesses auf vier Worker erhöht wird:

  1. Erstellen Sie Indizes mithilfe von zwei parallelen Workern im Cluster:

    db.runCommand({"createIndexes":"test","indexes":[{"key": {"user_name":1}, "name":"username_idx"}]})
  2. Um die Geschwindigkeit der Indexerstellung zu optimieren, können Sie die Anzahl der Worker mithilfe der Option „Worker-Threads“ ("workers":<number>) im db.runCommand createIndexes Befehl angeben.

    Erhöhen Sie die Geschwindigkeit des Prozesses auf vier parallele Worker:

    db.runCommand({"createIndexes":"test","indexes":[{"key": {"user_name":1}, "name":"username_idx", "workers":4}]})
    Anmerkung

    Je höher die Anzahl der Worker ist, desto schneller schreitet die Indexerstellung voran. Je höher jedoch die Anzahl der Worker steigt, desto höher steigt die Last auf den vCPUs und Read I/O Ihrer primären Instance. Stellen Sie sicher, dass Ihr Cluster ausreichend bereitgestellt ist, um die erhöhte Belastung zu bewältigen, ohne andere Workloads zu beeinträchtigen.

Fortschrittsstatus bei der Indizierung

Bei der Indexerstellung werden Sammlungen initialisiert, gescannt, Schlüssel sortiert und schließlich Schlüssel mithilfe eines Indexgenerators eingefügt. Der Prozess umfasst bis zu sechs Stufen, wenn Sie ihn im Vordergrund ausführen, und bis zu neun Stufen, wenn Sie ihn im Hintergrund ausführen. Sie können Statuskennzahlen wie den Prozentsatz der Fertigstellung, die Gesamtzahl der gescannten Speicherblöcke, sortierte Schlüssel und eingefügte Schlüssel schrittweise anzeigen.

Überwachen Sie den Fortschritt des Indizierungsprozesses, indem Sie den db.currentOp() Befehl in der Mongo-Shell verwenden. Ein hundertprozentiger Abschluss der letzten Phase zeigt, dass alle Indizes erfolgreich erstellt wurden:

db.currentOp({"command.createIndexes": { $exists : true } })
Anmerkung

Das Anzeigen des Fortschritts der Indizierung wird nur in Amazon DocumentDB 5.0 unterstützt.

Typen zum Erstellen von Indizes

Die vier Typen von Indexerstellungen sind:

  • Vordergrund — Der Vordergrundindex-Build blockiert alle anderen Datenbankoperationen, bis der Index erstellt wird. Der Amazon DocumentDB-Vordergrund-Build besteht aus fünf Stufen.

  • Foreground (einzigartig) — Vordergrundindex-Builds für ein einzelnes Dokument (eindeutig) blockieren andere Datenbankoperationen wie reguläre Vordergrund-Builds. Im Gegensatz zum grundlegenden Vordergrund-Build verwendet der einzigartige Build eine zusätzliche Stufe (Sortierung von Schlüsseln 2), um nach doppelten Schlüsseln zu suchen. Der (einzigartige) Vordergrund-Build besteht aus sechs Stufen.

  • Hintergrund — Bei der Indexerstellung im Hintergrund können andere Datenbankoperationen im Vordergrund ausgeführt werden, während der Index erstellt wird. Der Amazon DocumentDB-Hintergrund-Build besteht aus acht Stufen.

  • Hintergrund (einzigartig) — Index-Builds im Hintergrund für ein einzelnes Dokument (eindeutig) ermöglichen die Ausführung anderer Datenbankoperationen im Vordergrund, während der Index erstellt wird. Im Gegensatz zur grundlegenden Erstellung im Hintergrund verwendet der eindeutige Build eine zusätzliche Phase (Sortierung der Schlüssel 2), um nach doppelten Schlüsseln zu suchen. Der (einzigartige) Hintergrund-Build besteht aus neun Stufen.

Phasen der Indexerstellung

Stage Vordergrund Vordergrund (einzigartig) Hintergrund Hintergrund (einzigartig)

Initialisieren

1

1

1

1

Index erstellen: initialisieren

2

2

2

2

Gebäudeindex: Sammlung wird gescannt

3

3

3

3

Gebäudeindex: Schlüssel 1 sortieren

4

4

4

4

Gebäudeindex: Schlüssel 2 sortieren

5

5

Gebäudeindex: Schlüssel einfügen

5

6

5

6

validieren: Index scannen

6

7

validieren: Tupel sortieren

7

8

validieren: Sammlung scannen

8

9

  • initialisieren — createIndex bereitet den Index-Builder vor. Diese Phase sollte sehr kurz sein.

  • Index erstellen: Initialisieren — Der Indexgenerator bereitet sich auf die Erstellung des Indexes vor. Diese Phase sollte sehr kurz sein.

  • Index erstellen: Sammlung scannen — Der Indexgenerator führt einen Sammlungsscan durch, um Indexschlüssel zu sammeln. Die Maßeinheit ist „Blöcke“.

    Anmerkung

    Wenn mehr als ein Worker für die Indexerstellung konfiguriert ist, wird dies in dieser Phase angezeigt. Die Phase „Erfassung scannen“ ist die einzige Phase, in der während der Indexerstellung mehrere Worker verwendet werden. In allen anderen Phasen wird ein einzelner Worker angezeigt.

  • Index erstellen: Schlüssel sortieren 1 — Der Indexgenerator sortiert die gesammelten Indexschlüssel. Die Maßeinheit ist „Schlüssel“.

  • Index erstellen: Schlüssel sortieren 2 — Der Indexgenerator sortiert die gesammelten Indexschlüssel, die toten Tupeln entsprechen. Diese Phase existiert nur für die Erstellung eines eindeutigen Indexes. Die Maßeinheit ist „Schlüssel“.

  • Index erstellen: Schlüssel einfügen — Der Indexgenerator fügt Indexschlüssel in den neuen Index ein. Die Maßeinheit ist „Schlüssel“.

  • validieren: Index scannen — createIndex durchsucht den Index, um Schlüssel zu finden, die überprüft werden müssen. Die Maßeinheit ist „Blöcke“.

  • Validieren: Sortieren von Tupeln — CreateIndex sortiert die Ausgabe der Index-Scan-Phase.

  • Validieren: Sammlung wird gescannt — CreateIndex durchsucht die Sammlung, um die Indexschlüssel zu überprüfen, die in den beiden vorherigen Phasen gefunden wurden. Die Maßeinheit ist „Blöcke“.

Beispiel für die Ausgabe der Indexerstellung

Im folgenden Ausgabebeispiel (Erstellung des Vordergrundindexes) wird der Status der Indexerstellung angezeigt. Das Feld „msg“ fasst den Fortschritt des Builds zusammen, indem es die Phase und den Prozentsatz der Fertigstellung des Builds angibt. Das Feld „Workers“ gibt die Anzahl der Worker an, die in dieser Phase der Indexerstellung verwendet wurden. Im Feld „Fortschritt“ werden die tatsächlichen Zahlen angezeigt, anhand derer der Prozentsatz der Fertigstellung berechnet wurde.

Anmerkung

Die Felder „AktuellIndexBuildName“, „Nachricht“ und „Fortschritt“ werden in Amazon DocumentDB Version 4.0 nicht unterstützt.

{ "inprog" : [{ … "command": { "createIndexes": "test", "indexes": [{ "v": 2, "key": { "user_name": 1 }, "name": "user_name_1" }], "lsid": { "id": UUID(“094d0fba-8f41-4373-82c3-7c4c7b5ff13b”) }, "$db": "test" }, "currentIndexBuildName": user_name_1, "msg": "Index Build: building index number_1, stage 6/6 building index: 656860/1003520 (keys) 65%", "workers": 1, "progress": { "done": 656861, "total": 1003520 }, … ], "ok" : 1 }

Pflege der Amazon DocumentDB-Indizes

Indexblähung

Amazon DocumentDB verwendet Multi-Version Concurrency Control (MVCC), um gleichzeitige Transaktionen zu verwalten. Wenn Dokumente gelöscht oder aktualisiert werden, verbleiben ihre früheren Versionen als „tote“ Versionen in Sammlungen und Indizes. Der Garbage Collection-Prozess gibt automatisch Speicherplatz aus diesen toten Versionen für zukünftige Operationen zurück.

Eine Aufblähung des Indexes tritt auf, wenn die Indizes einer Sammlung aufgrund der Anhäufung von toten oder veralteten Indexeinträgen oder einer Fragmentierung innerhalb der Seiten größer werden. Der angegebene Prozentsatz steht für die Menge an Indexplatz, die von zukünftigen Indexeinträgen genutzt werden kann. Diese Überlastung verbraucht Speicherplatz sowohl im Puffercache als auch im Speicher. Wenn Sie das Aufblähen entfernen möchten, müssen Sie die Indizes neu erstellen.

Beispiel Beispiel

Führen Sie den folgenden Befehl aus, um ungenutzten Speicherplatz für Ihren Index zu ermitteln:

db.coll.aggregate({$indexStats:{}});

Das Ergebnis sieht ungefähr so aus:

{ "name" : "_id_", "key" : { "_id" : 1 }, "host" : "devbox-test.localhost.a2z.com:27317", "size" : NumberLong(827392), "accesses" : { "ops" : NumberLong(40000), "docsRead" : NumberLong(46049), "since" : ISODate("2025-04-03T21:44:51.251Z") }, "cacheStats" : { "blksRead" : NumberLong(264), "blksHit" : NumberLong(140190), "hitRatio" : 99.8121 }, "unusedStorageSize" : { "unusedSizeBytes" : 409600, "unusedSizePercent" : 49.51 } }

Mit dem reIndex Befehl, der einen Scan der gesamten Sammlung erfordert, können Sie Indizes ohne Ausfallzeiten neu erstellen. Siehe Indexverwaltung mithilfe von Reindex.

Indexverwaltung mithilfe von Reindex

reIndexist ein Befehl, der verwendet wird, um einen Index neu zu erstellen. Er wird normalerweise verwendet, wenn ein Index beschädigt oder ineffizient geworden ist. Im Laufe der Zeit können Indizes aufgrund vieler Aktualisierungen, Einfügungen oder Löschungen ungenutzten Speicherplatz ansammeln, was zu Leistungseinbußen führt. Die Neuindizierung hilft dabei, diesen ungenutzten Speicherplatz zu entfernen und die Effizienz des Indexes wiederherzustellen.

Richtlinien zur Neuindizierung

  • reIndexwird nur auf Amazon DocumentDB 5.0 unterstützt.

  • Amazon DocumentDB unterstützt reindex einen einzigen Index im Hintergrund, sodass mehrere Worker verwendet werden können. Der alte Index kann für Abfragen verwendet werden, wenn der reIndex Prozess läuft.

  • Amazon DocumentDB unterstützt die Indexierung von Fortschrittsberichten über. currentOp Sie können die Phasen der Indexerstellung sehen, die denen bei der Phasen der Indexerstellung Indexerstellung ähneln. Der einzige Unterschied besteht darin, dass es reIndex immer acht Stufen gibt, unabhängig davon, ob es sich um eine eindeutige Phase handelt oder nicht. Es gibt keine Phase „Index erstellen: Schlüssel 2 sortieren“.

  • reIndexkann gleichzeitig mit jedem Befehl ausgeführt werden, mit Ausnahme von Befehlen, die sich auf den Index beziehen, für dieselbe Sammlung: createIndexesdropIndexes, collMod und. renameCollection

  • reIndexwird derzeit nicht für Text-, Geodaten-, Vektor- und Teilindizes unterstützt.

Erstellen Sie einen Neuindex

Verwenden Sie den folgenden Befehl, um Ihren Index neu zu erstellen:

db.runCommand({ reIndex: "collection-name", index: "index-name"})

Optional können Sie auch die Anzahl der Worker steuern, die dem Neuerstellungsprozess zugewiesen sind:

db.runCommand({ reIndex: "collection-name", index: "index-name", workers: number })