Az indexelés megértése a MongoDB-ben

TLDR: Az indexelés csak egy módja a dokumentumok csoportosításának, a gyűjtemények csoportokra osztása a teljesítmény felgyorsítása érdekében

Áttekintés

Az indexek növelik a lekérdezések teljesítményét, valamint a keresésekhez használják

Az indexelés ötlete a MongoDB-ben hasonló bármely könyv indexéhez, Ezek növelik az oldal megtalálásának sebességét. Az index a MongoDB-ben növeli a dokumentumok megtalálásának sebességét

Hogyan működnek az indexek?

Először is, értsük meg, hogyan deklaráljuk az indexet a MongoDB-ben

collectionName.createIndex({field:value}) //for creating indexcollectionName.dropIndex({field:value}) //for removing index

Itt a mező a “fieldName”, amelyet indexelni fogunk. “Value” lehet -1 vagy 1 vagy “text”.

Ez határozza meg az index típusát, 1 vagy -1 növeli a find() lekérdezés teljesítményét, míg a “text” a keresésre szolgál.

1 és -1 adja meg az index sorrendjét. Ascending = -1 & Descending =1

Most, hogyan működnek az indexek a motorháztető alatt?

Képzeljünk el egy felhasználói gyűjteményt, minden dokumentum különböző információkat tartalmaz, amelyek közül az egyik a pontszám.

Tegyük fel, hogy minden felhasználónak 23 pontot szeretnénk.

Ha nincs index, a MongoDB végigmegy minden egyes dokumentumon, hogy megtalálja a lekérdezett dokumentumot, Ezt hívják Collection scan-nek, a MongoDB-nek van erre egy rövidítése COLLSCAN (ezt hívják Table scan-nek a relációs adatbázisokban)

Hogyan tudjuk ezt optimalizálni?

Az optimalizáláshoz létrehozhatunk egy táblázatot, amelynek egyik oszlopa a pontszám, a másik oszlop pedig a hivatkozások, amely az adott pontszámmal rendelkező dokumentumok azonosítóit tartalmazza. Most már csak ezt a táblát kell beolvasnunk ahelyett, hogy az egész adatbázist beolvasnánk. Ez sokkal gyorsabb. Pontosan ez az, ami egy index.

Az indexek segítenek a MongoDB-nek leszűkíteni az adathalmazt, amit be kell vizsgálnia. Ezt hívják Index Scan-nek, a MongoDB-nek erre is van egy rövidítése IXNSCAN

Itt egy vizuális ábrázolása egy pontszám Indexnek és annak leképezésének.

A teljesítményjavulás az Index által csak akkor látható, ha a dokumentumok száma átlépi a 100K vagy annál nagyobb számot.

Magad is összehasonlíthatod, ha két lekérdezést összehasonlítasz, egyet indexelt mezővel és egyet index nélkül

db.<collection name>.find(query).explain()

Egy objektumot fogsz visszakapni

.winingPlan.stage megmondja a letapogatás típusát COLLSCAN vagy IXNSCAN

de nem fogja megmondani a végrehajtáshoz szükséges időt

használja az explain(‘executionStat’) módszert a lekérdezési módszer előtt, mint például a find

.

db.<collection name>explain('executionStat').find(query)

executionTimeMillis megmondja a végrehajtás során eltelt időt

Az index hátrányai

Az indexek nem szabadok, Az indexek tárhelyet vesznek igénybe. Az indexek növelhetik az olvasási sebességet, de amikor valamit írunk, az indexet frissíteni kell, hogy ezt megoldjuk B- fát használunk, néhány számítást végzünk a beszúrás előtt, így gyorsabb lesz.

B-fa

Az indexek nem egy csoportokból álló táblázat, koncepcionálisan valójában egy B-fa (Binary Tree) nem csak a MongoDB, az SQL adatbázis is B-fát használ indexelésre

ez a videó magyarázza el legjobban a B-fát

Vélemény, hozzászólás?

Az e-mail-címet nem tesszük közzé.