sql >> Databasteknik >  >> NoSQL >> MongoDB

Ska jag använda sparse index för booleska flaggor i mongodb?

Den glesa flaggan är lite konstig. För att förstå när du ska använda det måste du förstå varför "gles" existerar i första hand.

När du skapar ett enkelt index på ett fält, finns det en post för varje dokument, även dokument som inte har det fältet.

Om du till exempel har ett index på {rarely_set_field : 1} , kommer du att ha ett index som mestadels är fyllt med null eftersom det fältet inte finns i de flesta fall. Detta är ett slöseri med utrymme och det är ineffektivt att söka.

{sparse:true} alternativet tar bort null värden, så att du får ett index som bara innehåller poster när {rarely_set_field} är definierad.

Tillbaka till ditt ärende.

Du frågar om att använda en boolean + sparse. Men gles påverkar egentligen inte "boolean", gles påverkan "är satt vs. är inte inställd".

I ditt fall försöker du hämta unfinished . För att utnyttja sparse nyckeln är inte det booleska värdet, utan det faktum att unfinished poster har den nyckeln och att "färdiga" poster inte har någon nyckel alls.

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

Det låter som att du använder en kö

Du kan definitivt utnyttja informationen ovan för att implementera ett sparsamt index. Men det låter faktiskt som att du använder en kö. MongoDB kan användas som en kö, här är två exempel .

Men om du tittar på kön gör de det inte som du gör det. Jag använder personligen MongoDB som en kö för vissa produktionssystem och det går ganska bra, men testa din förväntade belastning eftersom en dedikerad kö kommer att fungera mycket bättre.



  1. Hur man $setDifference i array &Object med Mongo DB

  2. Hur jämför man två strängar i mongoDB fjäderdata?

  3. Redis på Azure Performance Benchmark – ScaleGrid för Redis™ kontra Azure Cache

  4. findAll misslyckas efter att spelmorphia har återinitierats