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

Proč a kdy je nutné znovu sestavit indexy v MongoDB?

Podle dokumentace MongoDB obecně není potřeba indexy rutinně přestavovat.

POZNÁMKA :Jakékoli rady ohledně úložiště se stanou zajímavějšími s MongoDB 3.0+, které představilo rozhraní API pro zásuvné úložiště . Mé komentáře níže se konkrétně týkají výchozího úložiště MMAP v MongoDB 3.0 a dřívějších. WiredTiger a další moduly úložiště mají různé implementace úložiště pro data a indexy.

Přestavba indexu pomocí úložiště MMAP může přinést určité výhody, pokud:

  • Index spotřebovává větší než očekávané množství místa ve srovnání s daty. Poznámka:Musíte sledovat historická data a velikost indexu, abyste měli základní linii pro srovnání.

  • Chcete migrovat ze staršího formátu indexu na novější. Pokud je reindexace vhodná, bude to uvedeno v poznámkách k upgradu. MongoDB 2.0 například zavedlo významné vylepšení výkonu indexu takže poznámky k verzi obsahují navrhovanou reindexaci na formát v2.0 po aktualizaci. Podobně MongoDB 2.6 představilo 2dsphere (v2.0) indexy které mají jiné výchozí chování (ve výchozím nastavení řídké). Stávající indexy nejsou po upgradech verzí indexu znovu sestavovány; volba zda/kdy upgradovat je ponechána na správci databáze.

  • Změnili jste _id formát pro kolekci do nebo z monotónně rostoucího klíče (např. ObjectID) na náhodnou hodnotu. Je to trochu esoterické, ale existuje optimalizace indexu, která rozděluje skupiny b-stromu 90/10 (místo 50/50), pokud vkládáte _id s, které se neustále zvyšují (ref:SERVER-983 ). Pokud je povaha vašeho _id se výrazně změní, může být možné vytvořit efektivnější b-strom pomocí reindexace.

Další informace o obecném chování B-stromu naleznete na:Wikipedie:B-strom

Vizualizace využití indexu

Pokud jste opravdu zvědaví trochu více se ponořit do vnitřních částí indexu, existují některé experimentální příkazy/nástroje, které můžete vyzkoušet. Očekávám, že jsou omezeny pouze na MongoDB 2.4 a 2.6:



  1. Průměrná agregace s časovým razítkem řetězce

  2. aktualizovat více prvků v poli mongodb

  3. jarní data - Mongodb - metoda findBy pro vnořené objekty

  4. 'upsert' ve vloženém dokumentu