Tous les produits
Search
Centre de documentation

Data Transmission Service:Comment résoudre une distribution inégale des données dans un cluster MongoDB fragmenté

Dernière mise à jour :Sep 23, 2026

Activez le balancer et effectuez un pré-découpage pour résoudre efficacement les déséquilibres de données, lorsque la majorité des écritures est concentrée sur un seul shard.

Activer le balancer

Si le balancer est désactivé ou si la fenêtre temporelle configurée n'est pas encore atteinte, activez-le ou supprimez temporairement cette fenêtre pour lancer immédiatement l'équilibrage des données.

  1. Connectez-vous à l'instance du cluster MongoDB fragmenté.

  2. Dans la fenêtre de commande du nœud mongos, basculez vers la base de données config.

    use config
  3. Exécutez la commande suivante selon vos besoins.

    • Activer le balancer

      sh.setBalancerState(true)
    • Supprimer temporairement la fenêtre du balancer

      db.settings.updateOne( { _id : "balancer" }, { $unset : { activeWindow : true } } )

Pré-découpage

MongoDB prend en charge le sharding par plage (ranged) et le sharding haché (hashed). Le pré-découpage répartit les valeurs des chunks sur plusieurs nœuds shard de manière aussi uniforme que possible, ce qui contribue à équilibrer la charge lors de la synchronisation ou de la migration des données via DTS.

Sharding haché

Utilisez le paramètre numInitialChunks pour effectuer rapidement un pré-découpage. La valeur par défaut est nombre de shards × 2 et la valeur maximale est nombre de shards × 8192. Pour plus d'informations, consultez la documentation sh.shardCollection().

sh.shardCollection("phonebook.contacts", { last_name: "hashed" }, false, {numInitialChunks: 16384})

Sharding par plage

  • Si la source MongoDB utilise également une architecture de cluster fragmenté, interrogez les données dans config.chunks afin d'obtenir les plages de chunks des collections fragmentées correspondantes dans la source MongoDB. Utilisez ces informations comme référence pour la valeur <split_value> dans les commandes de pré-découpage ultérieures.

  • Si la source MongoDB est un replica set, déterminez la plage spécifique de la clé de shard en exécutant la commande find, puis définissez des points de découpage appropriés sur la base de cette plage.

    # Get the minimum value of the shard key
    db.<coll>.find().sort({<shardKey>:1}).limit(1)
    # Get the maximum value of the shard key
    db.<coll>.find().sort({<shardKey>:-1).limit(1)

Syntaxe de la commande

Remarque

L'exemple suivant utilise la commande splitAt. Pour plus d'informations, consultez les pages sh.splitAt(), sh.splitFind() et Split Chunks in a Sharded Cluster.

sh.splitAt("<db>.<coll>", {"<shardKey>":<split_value>})

Exemple

sh.splitAt("test.test", {"id":0})
sh.splitAt("test.test", {"id":50000})
sh.splitAt("test.test", {"id":75000})

Une fois le pré-découpage terminé, exécutez la commande sh.status() sur le nœud mongos pour vérifier les résultats.