Freigeben über


Optimierung der Schreibleistung in Azure Cosmos DB for MongoDB

GILT FÜR: MongoDB

Die Optimierung der Schreibleistung hilft Ihnen dabei, die unbegrenzte Skalierbarkeit von Azure Cosmos DB for MongoDB voll auszuschöpfen. Im Gegensatz zu anderen verwalteten MongoDB-Diensten werden Ihre Sammlungen (wenn partitionierte Sammlungen verwendet werden) von der API für MongoDB automatisch und transparent partitioniert, sodass sie unbegrenzt skalierbar sind.

Berücksichtigen Sie dies bei der Art, wie Sie Daten schreiben, indem Sie Daten parallelisieren und auf Partitionen verteilen, um die meisten Schreibvorgänge aus Ihren Datenbanken und Sammlungen herauszuholen. Dieser Artikel erklärt bewährte Methoden, um die Schreibleistung zu optimieren.

Lastverteilung auf Ihre Partitionen

Wenn Sie Daten auf eine partitionierte API für die MongoDB-Sammlung schreiben, werden Ihre Daten in kleine Segmente geteilt (partitioniert) und auf jede Partition geschrieben, die auf den Wert Ihres Blockschlüsselfeldes basiert. Jedes Segment ist ein kleines Stück eines virtuellen Computers, der nur Dokumente mit einem eindeutigen Blockschlüsselwert speichert.

Wenn Ihre Anwendung eine große Datenmenge auf eine einzige Partition schreibt, ist das nicht effizient, weil die App den Durchsatz einer Partition ausschöpfen würde, statt die Last auf all Ihre Partitionen zu verteilen. Ihre Schreiblast wird gleichmäßig auf Ihre Sammlung verteilt, indem parallel auf viele Dokumente mit eindeutigen Blockschlüsselwerten geschrieben wird.

Ein Beispiel hierfür wäre eine Produktkataloganwendung, die nach dem Kategoriefeld partitioniert ist. Statt jeweils in eine Kategorie (Partition) zu schreiben, ist es besser, in alle Kategorien gleichzeitig zu schreiben, um einen maximalen Schreibdurchsatz zu erreichen.

Reduzierung der Indexanzahl

Die Indizierung ist ein nützliches Feature, mit dem Daten deutlich schneller abgefragt werden können. Für die flexibelste Abfrageleistung ermöglicht die API für MongoDB standardmäßig einen Platzhalterindex für Ihre Daten, um die Abfrage nach allen Feldern schnell auszuführen. Dennoch führen alle Indizes, einschließlich der Platzhalterindizes, beim Schreiben von Daten zu einer zusätzlichen Last, da die Daten beim Schreiben die Sammlung und die Indizes verändern.

Die Reduzierung der Indexanzahl auf Indizes, die Ihre Abfragen unterstützen, macht das Schreiben schneller und günstiger. Allgemein wird Folgendes empfohlen:

  • Für jedes Feld, nach dem Sie filtern, sollte es einen entsprechenden Einzelfeldindex geben. Diese Option ermöglicht auch Multifeldfilterung.
  • Jede Feldgruppe, die Sie filtern, sollte einen zusammengesetzten Index für diese Gruppe besitzen.

Festlegen von „ordered“ auf „false“ in MongoDB-Treibern

Die MongoDB-Treiber legen beim Schreiben standardmäßig die Option „ordered“ auf „true“ fest, wodurch nacheinander in der festgelegten Reihenfolge in jedes Dokument geschrieben wird. Diese Option reduziert die Schreibleistung, da jede Schreibanforderung wartet, bis die vorherige abgeschlossen ist. Legen Sie beim Schreiben von Daten diese Option auf „false“ fest, um die Leistung zu verbessern.

db.collection.insertMany(
   [ <doc1> , <doc2>, ... ],
   {
      ordered: false
   }
)

Optimieren einer optimalen Batchgröße und Threadanzahl

Die Parallelisierung der Schreibvorgänge über mehrere Threads/Prozesse ist der Schlüssel zum skalierten Schreiben. Die API für MongoDB nimmt Schreibvorgänge in Batches von bis zu 1.000 Dokumenten je Prozess/Thread an.

Wenn Sie mehr als 1.000 Dokumente je Prozess/Thread am Stück schreiben, dann sollten Clientfunktionen wie insertMany() auf ungefähr 1.000 Dokumente beschränkt werden. Ansonsten wartet der Client, bis jeder Batch übertragen wurde, bevor er mit dem nächsten Batch fortfährt. In manchen Fällen ist die Aufteilung der Batches mit weniger oder etwas mehr als 1.000 Dokumenten schneller.

Nächste Schritte