Práce s indexy v MongoDB

Je dobře známo, že zdroje jsou v produkčním prostředí velmi omezené a že je pravda, že nyní existují servery, které jsou desetkrát výkonnější než ty, které existovaly před 5 lety, ale jak se síla těchto počítačů zvýšila, zvýšil se i dotaz data.

V závislosti na době, po kterou trvá spuštění dotazu, můžeme říci, zda je kritický nebo ne, nicméně i když není kritický, vždy existuje malé rozpětí pro vylepšení, čímž ušetříme několik sekund provádění, které konec dne jsou transformovány do minut, což nám dává možnost zlepšit uživatelské prostředí.

PožadavkyAbychom mohli tento tutoriál provést, potřebujeme funkční instalaci MongoDB s dostatečnými oprávněními, abychom mohli pracovat v příkazové konzole.

Také potřebujeme a soubor dat nebo dokumenty Abychom naplnili naši sbírku, v minulých výukových programech jsme nabídli počáteční sadu dat, ale pro ty, kteří ji nemají, mohou použít toto:

 db.guiamongo.insert ({"name": "Maria", "age": "25", "gender": "Female", "country": "Colombia"}); db.guiamongo.insert ({"name ":" Pedro "," věk ":" 32 "," pohlaví ":" Muž "," země ":" Ekvádor "}); db.guiamongo.insert ({" jméno ":" Ramon "," věk " : "18", "gender": "Muž", "země": "Honduras"}); db.guiamongo.insert ({"jméno": "John", "věk": "22", "pohlaví": "Muž", "země": "Argentina"}); db.guiamongo.insert ({"jméno": "Rosa", "věk": "45", "pohlaví": "Žena", "země": " Chile "," jazyky ": [" Esp "," Ing "," Fra "]});
Díky tomu budeme mít dost na malý začátek a tím získáme výsledky ze cvičení, která představíme níže.

1. Indexování MongoDB


Indexování nebo práce s indexy je koncept sdílený v MongoDB s Databáze relační, to znamená, že pokud máme pojem o tomto konceptu, můžeme pochopit, jak funguje MongoDB zanedlouho se prostě musíme držet konkrétní syntaxe.

Práce s indexyPokud jsme tomuto konceptu cizí, je třeba poznamenat, že práce s indexy není nic jiného než specifikovat na Databáze která pole byste měli použít v paměti, aby bylo vyhledávání efektivnější, například pokud dotazujeme velkou sbírku dokumentů pro pole s názvem název„Ideální by bylo indexovat toto pole, aby motor věděl, že by měl být veden přímo tímto polem, čímž začnou být dotazy, které toto pole používají, rychlejší.

Chcete -li vytvořit index na MongoDB co bychom měli udělat, je použít funkci zajistitIndex () a jako parametr předat dokument JSON označující pole nebo vlastnosti našeho dokumentu, se kterými musíme odpovídat uvedenému indexu. Podívejme se na malý příklad toho.

Předpokládejme, že máme sbírku s názvem guiamongo a hledáme pole s názvem jméno, kód by byl tento:

 db.guiamongo.find ({„name“: „Name“})
Jedná se o normální dotaz, který nemá nic konkrétního, jediným problémem je, že pokud existují miliony dokumentů, bude to velmi pomalé, takže k vytvoření indexu jej musíme zadat pouze takto:
 db.guiamongo.ensureIndex ({„jméno“: 1})
Tím jsme již vytvořili index pro dotaz, pokud jej provedeme znovu, bude mnohem rychlejší. Podívejme se, jak to vypadá na naší konzole MongoDB:

Můžeme si všimnout, že jakmile vytvoříme index, MongoDB Vrací nám dokument, kde ukazuje stav naší funkce a kolik indexů jsme měli před a po aplikaci, navíc nám ukazuje pole dobře na 1, což naznačuje, že poprava byla úspěšná.

Předchozí dotaz je docela užitečný pro jedno pole, ale pokud uděláme následující:

 db.guiamongo.find ({"name": "Name", "age": {"$ gt": "20"}}). sort ({"věk": - 1});
Uvědomujeme si, že v tomto případě index Předchozí již nefunguje, protože dotaz používá pro vyhledávání jinou kombinaci polí, proto musíme vytvořit nový index pomocí toho, co jsme se dříve naučili, uvidíme, jak by to bylo:
 db.guiamongo.ensureIndex ("jméno": 1, "věk": 1);
Pokud zkontrolujeme naši databázi následujícím způsobem, uvidíme, že máme ve sbírce nový index:

2. Nevýhoda v používání indexů


I přes velké výhody, které použití a práce s ním má indexyTy nejsou vždy výhodné, proto musíme před implementací této funkce do naší databáze důkladně analyzovat.

Největší nevýhodaThe velká nevýhoda při používání indexů je, že modul musí začlenit nová data, která vložíme do tabulky nebo seznamu indexů, z tohoto důvodu pokaždé, když je provedena funkce vložte () bude vytvořena řada sousedních procesů, které mohou zvýšit využití disku a zpracování.

Další nevýhodou je, že jich máme maximálně 64 indexů na kolekci„Proto musíme v naší databázi pracovat s co nejmenším počtem z nich, abychom zajistili, že se použije pouze to, co je nezbytně nutné.

3. Jak zjistit, kdy použít index


Vzhledem k tomu, že známe omezení a nevýhody používání indexů, je dobré si uvědomit, zda bychom je měli vytvořit nebo ne, pokládat tuto řadu otázek. Pokud na ně dokážeme odpovědět všichni, máme vlastnosti potřebné k vytvoření rejstříku. na druhou stranu, pokud nemůžeme, budeme muset analyzovat situaci z jiného úhlu pohledu, podívejme se na otázky:

Jaké dotazy děláme?Musíme provést analýzu situace a zjistit, co se stane v naší sbírce. Díky tomu zjistíme, zda potřebujeme indexy, nebo pokud ne, možná je třeba některé odstranit.

Jaká je správná orientace indexů?Musíme vědět, jak řadíme data do rejstříků, pokud jsou abecedně nebo číselně vzestupně nebo sestupně, to přímo ovlivňuje rychlost indexování.

Jak se bude škálovat?Musíme myslet na růst našich dat, protože tímto způsobem budeme vědět, zda to, co funguje dnes, zítra s 10 nebo 100krát více dat bude fungovat správně.

Toto je samozřejmě pouze průvodce, existují zvláštní a velmi specifické případy každého správce aplikace, ve kterých musíte na tento typ výukových programů použít svá kritéria, nicméně je to dobrý průvodce, jak nás začít ve světě optimalizace dat.

4. Rejstříky ve vložených dokumentech


Struktura dokumentů, ve kterých můžeme pracovat MongoDB půjčuje se na komplexní ukládání dat, ne všechna data, která potřebujeme, budou na stejné úrovni, proto je potřeba vytvořit vložené indexy dokumentů. S těmito indexy MongoDB Budete moci indexovat data, která mají složitější struktury.

K dosažení výsledku použijeme to, čemu se říká bodový zápis, což není nic jiného, ​​než přistupovat k polím vložených dokumentů, jako by to byly vlastnosti objektu přes bod. V následujícím příkladu vytvoříme rejstřík těchto charakteristik, pojďme se nejprve podívat na syntaxi.

Nejprve do naší testovací datové sady vložíme záznam s vloženým dokumentem:

 db.guiamongo.insert ({"name": "Juan", "věk": "40", "pohlaví": "Muž", "země": "Brazílie", "kvalifikace": {"historie": "85 "," literatura ":" 90 "," kurz ":" 3 "}});
Pak uděláme v tomto případě jednoduchý dotaz na vlastnost kurzu:
 db.guiamongo.find ({„grades.course“: ”3“});
Pokud nyní chceme vytvořit index, musíme jednoduše provést následující:
 db.guiamongo.ensureIndex ({„grades.course“: 1});
Tímto jsme již vytvořili rejstřík dokumentu vloženého do jiného v kolekci v MongoDB. Pokud se podíváme na toto, měli bychom získat v konzole:

5. Použijte vysvětlení ()


Protože víme, jak vytvářet indexy, a máme představu o tom, kdy a proč bychom je měli vytvářet, dosud jsme neviděli nástroj, který je velmi důležitý, nástroj, který nám umožňuje vědět trochu víc a jít dál v naše dotazy; odkazujeme na vysvětlit () tato funkce nám umožňuje znát čas a indexy použité v dotazech.

Co nám to říká?Návrat vysvětlit () Je to dokument, kde bude označovat kurzor, který používá pro vyhledávání, pak označuje limity indexu, máme také pole, které má název milis a bude udávat dobu v milisekundách, kterou provedení dotazu zabere, ta druhá je velmi důležitá pro pochopení výkonu naší Databáze.

Podívejme se, jak můžeme tuto funkci použít na dotaz, použijeme tu, kterou jsme provedli v našem předchozím příkladu:

 db.guiamongo.find ({„grades.course“: „3“}). vysvětlit ();
Po aplikaci by měl vrátit něco jako následující:

Všimli jsme si, jak jsou nám data nabízena, abychom mohli analyzovat dotaz v kurzor vidíme, že jsme použili index, který jsme vytvořili v předchozím cvičení s názvem grades.course_1, to nám pomohlo se tam dostat 0 milisekund doba provádění, což je optimální doba pro naše dotazy, samozřejmě, protože se jedná o testovací prostředí, nebudeme mít nic za tím, ale pokud toto cvičení zvládneme na serverech s miliony záznamů, uvědomíme si sílu indexů.

Tímto jsme dokončili tento tutoriál, který jsme vytvořili indexy v našich sbírkách dokumentů a navíc jsme prozkoumali některé nástroje, které nám pomáhají získat klíčové informace ke zlepšení a především ke zvýšení výkonu našich Databáze.

wave wave wave wave wave