MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

Impossibile ottenere una query coperta per la raccolta partizionata in MongoDB

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 un mongod 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.