MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

Impossible d'obtenir une requête couverte pour la collection fragmentée dans MongoDB

Comme dans MongoDB 2.6, vous n'obtiendrez pas une requête fragmentée entièrement couverte car il existe une requête supplémentaire pour vérifier si le fragment en question possède ce document (voir SERVER-5022 dans l'outil de suivi des problèmes MongoDB).

Les mongos le routeur filtre les documents qui se trouvent sur une partition mais qui ne devraient pas y résider selon les métadonnées du cluster partitionné.

Les documents peuvent exister sur plusieurs partitions si :

  • Il existe une migration fragmentaire en cours :les documents sont copiés d'un fragment donneur vers un fragment de destination et ne sont pas supprimés du fragment donneur tant que la migration du bloc n'est pas terminée avec succès.

  • Des documents ont été "orphelins" sur une partition à la suite d'un échec de migration ou d'un nettoyage incomplet. Il existe un cleanupOrphaned commande d'administration dans MongoDB 2.6 qui peut être exécuté sur un mongod fragmenté pour supprimer les documents orphelins.

Cette limitation des requêtes couvertes est notée dans les Limites :Requêtes couvertes dans les clusters partagés section de la documentation MongoDB mais devrait également être mis en évidence dans le tutoriel sur Création de requêtes couvertes . J'ai créé DOCS-3820 pour rendre cela plus évident.