sql >> Databáze >  >> NoSQL >> MongoDB

Měl bych použít řídký index pro booleovské příznaky v mongodb?

Řídká vlajka je trochu zvláštní. Abyste pochopili, kdy jej použít, musíte nejprve pochopit, proč „řídký“ existuje.

Když vytvoříte jednoduchý rejstřík pro jedno pole, je zde záznam pro každý dokument, dokonce i pro dokumenty, které toto pole nemají.

Pokud máte například index na {rarely_set_field : 1} , budete mít index, který je většinou vyplněn null protože toto pole ve většině případů neexistuje. Je to plýtvání místem a vyhledávání je neefektivní.

{sparse:true} volba zbaví null hodnot, takže získáte index, který obsahuje pouze položky, když {rarely_set_field} je definováno.

Zpět k vašemu případu.

Ptáte se na použití boolean + sparse. Ale řídký vliv ve skutečnosti neovlivňuje "boolean", řídký vliv "je nastaven vs. není nastaven".

Ve vašem případě se pokoušíte načíst unfinished . Chcete-li využít sparse klíčem není booleovská hodnota, ale skutečnost, že unfinished položky mají tento klíč a ty "dokončené" položky nemají žádný klíč.

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

Zdá se, že používáte frontu

Výše uvedené informace můžete určitě využít k implementaci řídkého indexu. Ve skutečnosti to však zní, jako byste používali frontu. MongoDB lze provozovat jako frontu, zde jsou dva příklady .

Pokud se však podíváte na frontu, nedělají to tak, jak to děláte vy. Osobně používám MongoDB jako frontu pro některé produkční systémy a běží docela dobře, ale otestujte očekávané zatížení, protože vyhrazená fronta bude fungovat mnohem lépe.



  1. Shoda kanálu $lookup MongoDB podle _id nefunguje

  2. Podporuje Mongo-connector přidávání polí před vložením do Elasticsearch?

  3. Jak vrátit počet aktualizovaných objektů v mongodb?

  4. Seskupte záznamy podle měsíců a počítejte je - Mongoose, nodeJs, mongoDb