Best Practices für das Laden von Massendaten
Massendaten mit Tools wie mongoimport und mongorestore in Firestore mit MongoDB-Kompatibilität laden.
Firestore ist ein hochgradig verteiltes System, das automatisch skaliert wird, um die Anforderungen Ihres Unternehmens zu erfüllen. Firestore teilt und kombiniert Ihre Daten dynamisch basierend auf der Last, die vom System empfangen wird.
Die lastbasierte Aufteilung erfolgt automatisch und ohne vorherige Konfiguration. Das lastbasierte Aufteilungssystem von 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 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, bei denen große Datenmengen in einem einzelnen Thread-Client verarbeitet werden, 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 Firestore-Datenbank kann deutlich mehr Parallelität verarbeiten. Dazu müssen Sie jedoch Clients so konfigurieren, dass sie Anfragen parallel senden.
mongoimport
Bei Verwendung des Tools mongoimport werden Anfragen standardmäßig sequenziell gestellt. Um die Ladezeit in Firestore zu verbessern, legen Sie die Anzahl der Worker mit dem Flag --numInsertionWorkers fest. Die richtige Einstellung muss möglicherweise an die Größe Ihres Clients angepasst werden.
mongorestore
Wenn Sie das Tool mongorestore verwenden, entfernen Sie den Parameter retryWrites=false aus der Verbindungsstring, um die Resilienz gegenüber vorübergehenden Fehlern zu verbessern.
Um die Ladezeit in Firestore zu verbessern, können Sie auch die Anzahl der Einfügungs-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 an die Größe Ihres 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. Beim Aufrufen Ihrer Datenbank ist es nicht erforderlich, komplexe Pooling- oder Warteschlangensysteme zu entwickeln. Jeder Anfragenfluss kann unabhängige Verbindungen verwenden und Datenbankaufrufe parallel ausführen.
- Parallelisierte Compute-Angebote verwenden: Mit Diensten wie Cloud Run kann Ihr System die Anzahl der für die Verarbeitung von Daten erforderlichen Compute-Worker skalieren.
Vorübergehende Fehler
Bei der Arbeit mit einem großen verteilten System wie Firestore können vorübergehende Fehler auftreten, z. B. Netzwerkprobleme oder Konflikte bei einem Dokument.
Beim Massenladen großer Datenmengen ist es wichtig, eine Strategie für Wiederholungsversuche für fehlgeschlagene Schreibvorgänge beizubehalten, ohne den größeren Massenladevorgang zu unterbrechen.