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

Dois-je utiliser un index clairsemé pour les drapeaux booléens dans mongodb ?

Le drapeau clairsemé est un peu bizarre. Pour comprendre quand l'utiliser, vous devez d'abord comprendre pourquoi "sparse" existe.

Lorsque vous créez un index simple sur un champ, il y a une entrée pour chaque document, même les documents qui n'ont pas ce champ.

Par exemple, si vous avez un index sur {rarely_set_field : 1} , vous aurez un index rempli principalement de null car ce champ n'existe pas dans la plupart des cas. C'est un gaspillage d'espace et la recherche est inefficace.

Le {sparse:true} l'option supprimera le null valeurs, de sorte que vous obtenez un index qui ne contient que des entrées lorsque {rarely_set_field} est défini.

Revenons à votre cas.

Vous posez des questions sur l'utilisation d'un booléen + clairsemé. Mais sparse n'affecte pas vraiment "booléen", sparse affecte "is set vs. is not set".

Dans votre cas, vous essayez de récupérer unfinished . Pour exploiter sparse la clé n'est pas la valeur booléenne, mais le fait que unfinished les entrées ont cette clé et que les entrées "terminées" n'ont pas de clé du tout.

{ _id: 1, data: {...}, unfinished: true }
{ _id: 2, data: {...} } // this entry is finished

Il semble que vous utilisiez une file d'attente

Vous pouvez certainement tirer parti des informations ci-dessus pour implémenter un index clairsemé. Cependant, il semble que vous utilisiez une file d'attente. MongoDB est utilisable en tant que file d'attente, voici deux exemples .

Cependant, si vous regardez la file d'attente, ils ne le font pas comme vous le faites. Personnellement, j'utilise MongoDB comme file d'attente pour certains systèmes de production et il fonctionne plutôt bien, mais testez votre charge attendue car une file d'attente dédiée fonctionnera beaucoup mieux.