Come in MongoDB 2.6, non otterrai una query partizionata completamente coperta perché esiste una query aggiuntiva per verificare se lo shard in questione possiede quel documento (vedi SERVER-5022 nel tracker dei problemi di MongoDB).
I mongos
router filtra i documenti che si trovano su uno shard ma che non dovrebbero risiedere lì in base ai metadati del cluster sharded.
I documenti possono esistere su più di uno shard se:
-
Esiste una migrazione di blocchi in corso:i documenti vengono copiati da uno shard donatore a uno shard di destinazione e non vengono rimossi dallo shard donatore fino al completamento della migrazione del blocco.
-
I documenti sono rimasti "orfani" su uno shard a causa di una migrazione non riuscita o di una pulizia incompleta. Esiste un
cleanupOrphaned
comando amministratore in MongoDB 2.6 che può essere eseguito su unmongod
suddiviso in partizioni per eliminare i documenti orfani.
Questa limitazione delle query coperte è annotata nei Limiti:Query coperte nei cluster partizionati sezione della documentazione di MongoDB, ma dovrebbe anche essere evidenziato nel tutorial su Creazione di query coperte . Ho sollevato DOCS-3820 per renderlo più ovvio.