Bonnes pratiques pour le chargement groupé de données

Chargement groupé de données dans Cloud Firestore avec des outils tels que mongoimport et mongorestore.

Cloud Firestore est un système hautement distribué qui offre un scaling automatique pour répondre aux besoins de votre entreprise. Cloud Firestore divise et combine vos données de manière dynamique en fonction de la charge reçue par le système.

La division basée sur la charge s'effectue automatiquement sans aucune préconfiguration requise. Le système de division basé sur la charge de Cloud Firestore présente des caractéristiques importantes et uniques par rapport aux autres bases de données de documents, qu'il est important de garder à l'esprit lorsque vous modélisez vos données.

La nature distribuée de Cloud Firestore peut nécessiter de modifier certains choix de conception, en particulier pour les charges de travail optimisées pour les bases de données où l'instance répliquée principale est le goulot d'étranglement du débit d'écriture.

Bonnes pratiques

Les charges de travail qui traitent de grandes quantités de données dans un client à thread unique peuvent créer un goulot d'étranglement. Les clients peuvent utiliser un seul thread pour charger des données de manière groupée, car le débit du client et du serveur est similaire. Une base de données Cloud Firestore peut gérer un parallélisme beaucoup plus important, mais cela nécessite de configurer les clients pour qu'ils envoient des requêtes en parallèle.

mongoimport

Lorsque vous utilisez l'outil mongoimport, les requêtes sont effectuées de manière séquentielle par défaut. Pour améliorer le temps de chargement dans Cloud Firestore, définissez le nombre de nœuds de calcul avec l'option --numInsertionWorkers. Le paramètre approprié peut nécessiter un réglage en fonction de la taille de votre client.

mongorestore

Lorsque vous utilisez l'outil mongorestore, supprimez le paramètre retryWrites=false de votre chaîne de connexion afin d'améliorer la résilience aux défaillances temporaires.

Pour améliorer le temps de chargement dans Cloud Firestore, vous pouvez également augmenter le nombre de nœuds de calcul d'insertion par collection avec l'option --numInsertionWorkersPerCollection et le nombre de collections parallèles avec l'option --numParallelCollections. Les paramètres appropriés peuvent nécessiter un réglage en fonction de la taille de votre client.

programmation asynchrone

Lorsque vous développez votre propre logiciel à l'aide d'opérations compatibles avec MongoDB, vous pouvez améliorer le parallélisme de différentes manières :

  • Frameworks asynchrones : l'utilisation de frameworks asynchrones vous permet de traiter les requêtes et d'y répondre en parallèle. Il n'est pas nécessaire de développer un système complexe de mise en pool ou en file d'attente lorsque vous effectuez des appels vers votre base de données. Chaque flux de requêtes peut utiliser des connexions indépendantes et effectuer ses appels de base de données en parallèle.
  • Utiliser des offres de calcul parallélisées : en utilisant des services tels que Cloud Run, votre système peut faire évoluer le nombre de nœuds de calcul requis pour traiter les données.

Échecs temporaires

Lorsque vous travaillez avec un grand système distribué tel que Cloud Firestore, vous pouvez rencontrer des défaillances temporaires, telles que des problèmes de réseau ou des conflits sur un document.

Lors du chargement groupé de grandes quantités d'informations, il est important de maintenir une stratégie de nouvelle tentative pour les écritures ayant échoué sans que l'opération de chargement groupé plus importante échoue.