Mylné představy
Rychlost
I když nemluvíme o indexu s více klíči, stane se zde toto. Probíhá masivní skenování stolu. MongoDB tedy iteruje dokumenty, snaží se najít pole, které má být indexováno, vyhodnotí toto pole (na null
pokud v aktuálním dokumentu neexistuje) a zapisuje svá zjištění do nejméně 6 souborů, protože mluvíme o 6 indexech. Počítání:200 000 000 / 86 400 * 5 nám říká, že mongoDB to dělá pro zhruba 460 dokumentů za sekundu nebo potřebuje pouze 2,2 milisekundy na dokument . Nenazýval bych to pomalu. Může to trvat dlouho, ale není to pomalé.
{background:true}
Použití tohoto parametru není zablokovat vás z databází. Právě naopak, což je jasně uvedeno v dokumentech, a to jak na sekce Vytvoření indexu a v výukové části o vytváření indexů na pozadí . Existuje však věta, kterou lze snadno špatně interpretovat:
To znamená, že nemůžete provádět operace, které se vztahují na všechny databáze a vyžadují zámek čtení nebo zápisu.
Způsoby zlepšení (v budoucnu)
Sharded Cluster
Použijte sdílený cluster s fragmenty sady replik. Snadno se nastavuje a má řadu výhod kromě lepšího výkonu. Jedním z nich je snadná škálovatelnost přidání fragmentu (a tím přidání prostoru a výpočetního výkonu do clusteru) je velmi snadný. Zálohy mají menší dopad na aplikaci. Už neexistuje jediný bod selhání (když se to udělá správně, platí to i pro výpadky v rozsahu celého datového centra).
Použít jiný souborový systém
Promiňte, spouštění aplikace závislé na výkonu disku IO na Windows Serveru mi nedává smysl – vůbec. ExtFS4 nebo XFS jsou o 25 % až 40 % rychlejší než NTFS nebo ReFS, v závislosti na optimalizaci. Díky tomu je skutečný rozdíl mezi aplikacemi, které jsou závislé na IO disku jako váš případ použití. Hovoříme o otázce dnů (a to ani s ohledem na efektivnější mapování paměti a sníženou spotřebu paměti OS na systémech Linux).
{background:true}
I když to ve skutečnosti nezlepší výkon (ve skutečnosti vytváření indexů na pozadí ze zřejmých důvodů trvá déle než v popředí), vaše aplikace zůstává dostupná během doby, kdy se index vytváří. Takže v závislosti na vašich potřebách to může být schůdná možnost.
Poznámka :Je to Špatný nápad™ , pro vertikální měřítko při použití mongoDB, protože byl výslovně navržen pro horizontální měřítko. To platí zejména pro velké kolekce, jako je ta vaše, protože paralelní zpracování by výrazně zlepšilo výkon vaší aplikace.