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

Skal jeg bruge sparsomt indeks for booleske flag i mongodb?

Det sparsomme flag er lidt underligt. For at forstå, hvornår du skal bruge det, skal du forstå, hvorfor "sparse" eksisterer i første omgang.

Når du opretter et simpelt indeks på ét felt, er der en post for hvert dokument, selv dokumenter, der ikke har det felt.

For eksempel, hvis du har et indeks på {rarely_set_field :1} , vil du have et indeks, der for det meste er fyldt med null fordi det felt ikke eksisterer i de fleste tilfælde. Dette er spild af plads, og det er ineffektivt at søge.

{sparse:true} option vil slippe af med null værdier, så du får et indeks, der kun indeholder poster, når {sjældent_sæt_felt er defineret.

Tilbage til din sag.

Du spørger om at bruge en boolean + sparse. Men sparse påvirker ikke rigtig "boolesk", sparsom effekt "er sat vs. er ikke indstillet".

I dit tilfælde forsøger du at hente ufærdige . For at udnytte sparse nøglen er ikke den boolske værdi, men det faktum, at unfinished poster har den nøgle, og at "færdige" poster slet ikke har nogen nøgle.

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

Det lyder som om du bruger en kø

Du kan helt sikkert udnytte oplysningerne ovenfor til at implementere et sparsomt indeks. Det lyder dog faktisk som om du bruger en kø. MongoDB kan bruges som en kø, her er to a> eksempler .

Men hvis du ser på køen, gør de det ikke, som du gør det. Jeg bruger personligt MongoDB som en kø for nogle produktionssystemer, og det kører ret godt, men test din forventede belastning, da en dedikeret kø vil fungere meget bedre.



  1. Mongo db-opdateringsforespørgsel virker ikke i indlejrede dokumenter i azure cosmos db

  2. Opdaterer element i array med unikt ID

  3. ObjectID gemmer ikke hexadecimal værdi

  4. Hvad er __v-feltet i Mongoose