Best Practices für das Laden von Bulk-Daten

Bulk-Laden von Daten in Cloud Firestore mit Tools wie mongoimport und mongorestore.

Cloud Firestore ist ein hochgradig verteiltes System, das eine automatische Skalierung bietet, um die Anforderungen Ihres Unternehmens zu erfüllen. Cloud Firestore teilt Ihre Daten dynamisch auf und kombiniert sie basierend auf der vom System empfangenen Last.

Die lastbasierte Aufteilung erfolgt automatisch, ohne dass eine Vorkonfiguration erforderlich ist. Das lastbasierte Aufteilungssystem von Cloud Firestore hat einige wichtige, einzigartige Merkmale im Vergleich zu anderen Dokumentdatenbanken, die Sie bei der Modellierung Ihrer Daten berücksichtigen sollten.

Aufgrund der verteilten Natur von Cloud Firestore müssen möglicherweise einige Designentscheidungen geändert werden, insbesondere bei Arbeitslasten, die für Datenbanken optimiert wurden, bei denen das primäre Replikat der Engpass für den Schreibdurchsatz ist.

Best Practices

Arbeitslasten, die große Datenmengen in einem Single-Thread-Client verarbeiten, können einen Engpass verursachen. Clients können möglicherweise Single-Threading verwenden, um Daten im Bulk zu laden, da der Durchsatz von Client und Server ähnlich ist. Eine Cloud Firestore-Datenbank kann deutlich mehr Parallelität verarbeiten. Dazu müssen Sie jedoch Clients so konfigurieren, dass Anfragen parallel gesendet werden.

mongoimport

Wenn Sie das mongoimport-Tool verwenden, werden Anfragen standardmäßig nacheinander gestellt. Um die Ladezeit in Cloud Firestore zu verbessern, legen Sie die Anzahl der Worker mit dem Flag --numInsertionWorkers fest. Die richtige Einstellung muss möglicherweise je nach Größe des Clients angepasst werden.

mongorestore

Wenn Sie das mongorestore-Tool verwenden, entfernen Sie den Parameter retryWrites=false aus dem Verbindungsstring, um die Ausfallsicherheit bei vorübergehenden Fehlern zu verbessern.

Wenn Sie die Ladezeit in Cloud Firestore verbessern möchten, können Sie auch die Anzahl der Einfüge-Worker pro Sammlung mit dem Flag --numInsertionWorkersPerCollection und die Anzahl der parallelen Sammlungen mit dem Flag --numParallelCollections erhöhen. Die richtigen Einstellungen müssen möglicherweise je nach Größe des Clients angepasst werden.

asynchrone Programmierung

Wenn Sie Ihre eigene Software mit MongoDB-kompatiblen Vorgängen entwickeln, können Sie die Parallelität auf folgende Weise verbessern:

  • Asynchrone Frameworks: Mit asynchronen Frameworks können Sie Anfragen parallel verarbeiten und beantworten. Es ist nicht erforderlich, komplexe Pooling- oder Warteschlangenmechanismen für Aufrufe an Ihre Datenbank zu entwickeln. Jeder Anfragefluss kann unabhängige Verbindungen verwenden und seine Datenbankaufrufe parallel ausführen.
  • Parallelisierte Computing-Angebote verwenden: Mit Diensten wie Cloud Run kann Ihr System die Anzahl der für die Datenverarbeitung erforderlichen Computing-Worker skalieren.

Vorübergehende Fehler

Wenn Sie mit einem großen verteilten System wie Cloud Firestore arbeiten, können vorübergehende Fehler wie Netzwerkstörungen oder Konflikte bei einem Dokument auftreten.

Beim Bulk-Laden großer Datenmengen ist es wichtig, eine Wiederholungsstrategie für fehlgeschlagene Schreibvorgänge zu haben, ohne dass der gesamte Bulk-Ladevorgang fehlschlägt.