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

MongoDB Interní implementace indexování?

Myslím, že máte představu, že indexy jsou uloženy v paměti RAM. Co když řeknu, že nejsou.

Nejprve musíme porozumět tomu, co jsou indexy, indexy jsou v podstatě ukazatelem, který ukazuje, kde na disku se daný dokument nachází. Stejně jako máme indexování v knize, pro rychlejší přístup můžeme vidět, jaké téma je na kterém čísle stránky.

Takže když jsou indexy vytvořeny, jsou také uloženy na disku, ale když je aplikace spuštěna, na základě častého používání a ještě rychlejšího přístupu se načtou do RAM, ale je rozdíl mezi načtením a vytvořením.

Také načítání indexu není totéž jako načítání kolekce nebo záznamů do paměti RAM. Pokud máme načtený index, víme, jaké všechny dokumenty máme vyzvednout z disku, na rozdíl od načtení všech dokumentů a ověření každého z nich. Indexy se tak vyhýbají skenování kolekce.

Vytváření indexů je jednorázový proces, ale každý zápis do dokumentu může potenciálně změnit indexování, takže některé části bude možná nutné přepočítat, protože záznamy se mohou na základě změny dat zamíchat. proto indexování zpomaluje zápis a rychlé čtení.

Znovu si to představte jako knihu, pokud mezi knihu přidáte nové téma o délce řekněme 2 stránek, je třeba přepočítat všechny indexy za tímto číslem tématu. podle toho.

  • Ne, záznamy se neukládají do paměti RAM, při jejím vytváření se jaksi zpracuje veškerý dokument ve sbírce a vytvoří se indexový list, to by bylo pochopitelně časově náročné, pokud je dokumentů příliš mnoho, proto existuje možnost vytvořit index na pozadí.
  • Indexy jsou vytvořeny jednou, můžete je odstranit a vytvořit znovu, ale při restartu aplikace nebo DB se znovu nevytvoří. to by bylo šílené pro obrovskou sbírku v rozbitém prostředí.
  • Opět to není pravda. _id přichází jako indexované pole, takže index je již vytvořen pro prázdnou kolekci, protože když uděláte zápis , přepočítá se index. Protože se jedná o jedinečný index, zpracování by bylo rychlejší.
  • všechny záznamy by byly uloženy v paměti RAM pouze v případě, že používáte in-memory engine MongoDB, který, myslím, přichází jako podniková edice. Kvůli indexování by záznam automaticky nenačetl do RAM.


  1. Hromadné vložení do MongoDB pomocí mongoose

  2. MongoDB vyberte hodnotu pole all where v seznamu dotazů

  3. Pořadí klíčových hodnot v mongoDb

  4. Chyba MongoDb s php 7 na xampp CodeIgniter