sql >> Database >  >> NoSQL >> MongoDB

Moet ik een schaarse index gebruiken voor booleaanse vlaggen in mongodb?

De schaarse vlag is een beetje raar. Om te begrijpen wanneer je het moet gebruiken, moet je begrijpen waarom "sparse" in de eerste plaats bestaat.

Wanneer u een eenvoudige index op één veld maakt, is er een vermelding voor elk document, zelfs documenten die dat veld niet hebben.

Als u bijvoorbeeld een index heeft op {rarely_set_field : 1} , heb je een index die grotendeels gevuld is met null omdat dat veld in de meeste gevallen niet bestaat. Dit is een verspilling van ruimte en het is inefficiënt om te zoeken.

De {sparse:true} optie verwijdert de null waarden, zodat u een index krijgt die alleen items bevat wanneer {rarely_set_field} is gedefinieerd.

Terug naar uw zaak.

U vraagt ​​naar het gebruik van een boolean + sparse. Maar sparse heeft niet echt invloed op "boolean", sparse affect "is set vs. is not set".

In jouw geval probeer je unfinished . op te halen . Om gebruik te maken van sparse de sleutel is niet de booleaanse waarde, maar het feit dat unfinished items hebben die sleutel en die "voltooide" items hebben helemaal geen sleutel.

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

Het klinkt alsof je een wachtrij gebruikt

U kunt de bovenstaande informatie zeker gebruiken om een ​​schaarse index te implementeren. Het klinkt echter alsof u een wachtrij gebruikt. MongoDB kan worden gebruikt als een wachtrij, hier zijn twee voorbeelden .

Als je echter naar de wachtrij kijkt, doen ze het niet zoals jij het doet. Ik gebruik persoonlijk MongoDB als wachtrij voor sommige productiesystemen en het werkt redelijk goed, maar test je verwachte belasting, aangezien een speciale wachtrij veel beter zal presteren.



  1. Wanneer is een document toegevoegd aan een MongoDB-verzameling?

  2. MassTransit-saga met Redis-persistentie geeft Method Accpet geen implementatie-uitzondering

  3. vind id van laatste subdocument ingevoegd in mangoest

  4. Hoe u terugbelt wanneer de sleutel verloopt in REDIS