MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Die Gefahren beim Erstellen von Indizes auf MongoDB

Indizes sind ein kritischer Teil jeder Datenbankoperation. Das Definieren der richtigen Indizes kann die Leistung Ihrer Datenbankserver erheblich verbessern. Das Erstellen von Indizes in MongoDB birgt jedoch mehrere Fallstricke, die Sie für Ihren täglichen Betrieb beachten müssen. MongoDB unterstützt auf hoher Ebene drei Techniken zum Erstellen von Indizes für Ihre Sammlungen.

1. Vordergrundindexerstellung

Wenn Sie einen Index im Vordergrund erstellen, blockiert er alle anderen Operationen auf der Datenbank – bei einer großen Sammlung kann dies mehrere Stunden dauern. Dies impliziert, dass Ihre Datenbank für die Dauer der Indexerstellung ausgefallen ist. Angesichts der Tatsache, dass dies der Standardmodus zum Erstellen von Indizes ist, ist es nicht verwunderlich, dass sich viele Entwickler selbst in den Fuß schießen und versehentliche Indexerstellungen auslösen. Es gibt wirklich keinen triftigen Grund, einen Vordergrundindexaufbau auf einem Produktionsserver auszulösen (es sei denn, Sie wissen, dass die Sammlung eine kleine Datenmenge enthält).

2. Indexerstellung im Hintergrund

Wie der Name schon sagt, erstellt der Hintergrundindizierungsprozess den Index im Hintergrund, ohne die Verfügbarkeit Ihres Datenbankservers zu beeinträchtigen. Es ist jedoch immer noch ein ressourcenintensiver Vorgang, und Sie sollten mit Leistungseinbußen rechnen. Da dies im Hintergrund geschieht, kann der Aufbau viel länger dauern als bei den Vordergrund-Indizes. Wenn Sie in früheren Versionen von MongoDB (<2.6) einen Hintergrundindex auf dem Primärserver eines Replikatsatzes erstellt haben, wurde dieser als „Vordergrund“-Build auf den sekundären Servern ausgeführt. Glücklicherweise ist dies nicht mehr der Fall – es wird im Hintergrund erstellt alle Knoten. Wenn ein Indexaufbau im Hintergrund unterbrochen wird, wird er beim Neustart des Servers als Indexaufbau im Vordergrund fortgesetzt.

3. Fortlaufender Indexaufbau

Der fortlaufende Indexerstellungsprozess erstellt den Index jeweils nur auf einem Knoten. Das geht ungefähr so:

  1. Rotieren Sie einen sekundären Knoten aus dem Replikatsatz (Sie können dies tun, indem Sie die Ports ändern oder im eigenständigen Modus neu starten).
  2. Erstellen Sie den Index auf diesem Knoten im Vordergrund. Sobald der Index erstellt ist, drehen Sie den Knoten zurück in den Replikatsatz.
  3. Sobald der Knoten die Änderungen eingeholt hat, fahren Sie mit dem nächsten Knoten fort. Wenn der nächste Knoten der primäre ist, müssen Sie einen rs.stepDown() ausführen, um ihn zu einem sekundären zu machen.
  4. Spülen und wiederholen.

Weitere Details zum Indexerstellungsprozess finden Sie in der MongoDB-Dokumentation.

Mit rollierenden Indexerstellungen können Sie einen Index ohne nennenswerte Leistungseinbußen für Ihre Anwendung erstellen. Es ist jedoch ein Failover erforderlich – also sollte Ihre Anwendung in der Lage sein, damit umzugehen (was sie sowieso tun muss).

Können Sie eine fortlaufende Indexerstellung durchführen, wenn Sie keinen Replikatsatz haben? Leider ist für eigenständige Instanzen die einzige Option eine „Indexerstellung im Hintergrund“.

Der fortlaufende Indexaufbau ist unser bevorzugter Ansatz zum Erstellen von Indizes bei ScaleGrid. Wir bieten sogar eine Benutzeroberfläche und machen es Ihnen leicht, den gesamten Prozess von unserer Benutzeroberfläche aus zu starten. Unser Backend führt die gesamte Orchestrierung durch, die für die vollständige Indexerstellung erforderlich ist – es löst eine Server-für-Server-Indexerstellung aus. Sie müssen sich nur bei uns einrichten und dann zeigen und klicken!

Wenn Sie weitere Fragen haben, können Sie sich wie immer unter [email protected] an uns wenden.