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

Index MongoDB/Mongoose zrychlí dotaz nebo jej zpomalí?

Čtete to špatně

Špatně čtete záměr citovaného bloku ohledně toho, co .ensureIndex() (nyní zastaralé, ale stále nazývané kódem mongoose) zde v kontextu skutečně funguje.

V mongoose definujete index buď na úrovni schématu nebo modelu, jak je vhodné pro váš návrh. Co pro vás mongoose „automaticky“ udělá, je, že při připojení zkontroluje každý registrovaný model a poté zavolá příslušnou .ensureIndex() metody pro poskytnuté definice indexu.

Co to vlastně dělá?

Ve většině případů poté, co jste již aplikaci spustili dříve a .ensureIndexes() metoda byla spuštěna je Absolutně nic . To je trochu přehnané tvrzení, ale víceméně to platí.

Protože definice indexu již byla vytvořena v kolekci serveru, následné volání neprovede nic. To znamená, že nevypustí index a „znovu se nevytvoří“. Takže skutečná cena není v podstatě žádná, jakmile je index samotný vytvořen.

Vytváření indexů

Protože je mongoose pouze vrstvou nad standardním API, createIndex() metoda obsahuje všechny podrobnosti o tom, co se děje.

Zde je třeba vzít v úvahu některé podrobnosti, například to, že sestavení indexu může probíhat na „pozadí“, a přestože to vaši aplikaci méně ruší, je to na vlastní náklady. Je pozoruhodné, že velikost indexu z generování "na pozadí" bude větší, než kdybyste jej vytvořili na popředí, což blokuje další operace.

Také všechny indexy jsou zpoplatněny, zejména pokud jde o využití disku a také dodatečné náklady na zápis dodatečných informací mimo samotná data kolekce.

Výhody indexu spočívají v tom, že je mnohem rychlejší „hledat“ hodnoty obsažené v indexu, než prohledávat celou kolekci a odpovídat možným podmínkám.

Toto jsou základní „obchody“ spojené s indexy.

Vzor nasazení

Zpět na uvedený blok Z dokumentace vyplývá, že za touto radou je skutečný záměr.

Ve vzorcích nasazení a zejména při migraci dat je typické dělat věci v tomto pořadí:

  1. Vyplňte data do příslušných kolekcí/tabulek
  2. Povolte indexování dat kolekce/tabulky relevantní pro vaše potřeby

Je to proto, že vytváření indexu je spojeno s náklady, a jak již bylo zmíněno dříve, je žádoucí získat co nejoptimálnější velikost z sestavení indexu a vyhnout se tomu, aby každé vložení dokumentu mělo také režii na zápis položky rejstříku, když jste dělat toto „načítání“ hromadně.

Takže k tomu jsou indexy, to jsou náklady a přínosy a zpráva v dokumentaci mongoose je vysvětlena.

Obecně však doporučuji přečíst si indexy databáze za to, jací jsou a co dělají. Myslete na to, že vejdete do knihovny a najdete knihu. U vchodu je kartotéka. Chodíte po knihovně, abyste našli knihu, kterou chcete? Nebo to hledáš v kartotéce, kde to je? Tento rejstřík někomu zabralo čas, než ho vytvořil a také jej aktualizoval, ale „vám“ to ušetří čas procházením po celé knihovně, abyste našli svou knihu.



  1. Jak vypsat všechny databáze v mongo shellu?

  2. MongoDB $not Aggregation Pipeline Operator

  3. Je možné MongoDb TTL na vnořeném dokumentu?

  4. Průsečík indexu MongoDB