MongoDB a velikost názvu pole

Pro velkou aplikaci používáme dokumentační databázi MongoDB, která je v tomto oboru asi nejrozšířenější. Nebudu popisovat rozdíly proti relačním databázím, protože na internetu je o tom spousta výborných článků. Mám s ní dobré zkušenosti. Pouze vyhledávání bitových map je nad číslem pomalé a proto musíme například nastavení uživatelů aplikace ukládat jako dokumenty neboli JSON objekty. Bohužel MongoDB si v každém dokumentu (řádce) ukládá i názvy polí. To především o malých kolekcí (tabulek) s velkým počtem dokumentů (řádků) možná výrazně zvyšuje velikost na disku a možná i zdržuje vyhledávání v databázi.

Krátké názvy polí – příklad dokumentu

Bohužel jsem nenašel žádný kvalitní článek na toto téma a tedy jsme se rozhodl problém otestovat. Třeba se to bude někomu hodit.

Vytvořil jsem dvě kolekce (tabulky). Každá má 3 miliony záznamů. Jedna má názvy polí pouze dvojpísmenné a druhá mnohem delší, viz obrázky zobrazující jeden dokument.

Dlouhé názvy polí – příklad dokumentu

Všechna pole jsou zaindexována, abych zjistil, jak velikost názvu pole ovlivňuje velikost indexu.

Výsledky vidíte v tabulce. Test jsem opakoval a skutečně data s dlouhými názvy polí na disku zabírají pouze o 6 procent více, na rozdíl od skutečné délky dat, která je větší o 117 procent! Vývojáři MongoDb zde viditelně odvedli neuvěřitelný kus práce s komprimací dat. Vysvětluji si tento neočekávaný výsledek tím, že moje struktura názvů se velmi efektivně komprimuje. V každém případě z hlediska velikosti dat na disku není velikost názvů polí nijak významná.

Minimálně stejně zajímavá je otázka, zda velikost názvů polí nějak ovlivňuje rychlost vyhledávání. Nad vytvořenými kolekcemi jsem položil 20000 náhodných dotazů. Vyhledával jsem nad indexovaným řetězcem a číslem. Výsledky jsou v tabulce a závěr je, že na velikosti názvů polí ani u vyhledávání nezáleží.

Krátké Dlouhé Rozdíl
Dokument Ø118 B256 B+ 117 %
Na disku Ø69,7 B73,9 B+ 6 %
Index Σ231,3 MB231,4 MB+ 0,04 %
Vyhledávání Ø16,10 ms15,99 ms

Testovaná verze: MongoDB 4.4.3 Community. Průměrná velikost dokumentu a celková velikost indexu zjištěna pomocí MongoDB Compass verze 1.24.1 a velikost dat na disku zjištěna příkazem db.<název kolekce>.storageSize()

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *

*