MongoDB 3.0 s WiredTiger zavádí novou funkci nazvanou ‚Index Prefix Compression‘, která výrazně snižuje paměť spotřebovanou indexy. Méně paměti používané indexy znamená více paměti pro ukládání dokumentů nebo jiných indexů, což znamená lepší výkon.
Pro nejlepší výkon v MongoDB je skvělé uchovávat indexy v paměti. Chybějící stránka v indexu je dvojnásobná rána – jedna chyba stránky, která přenese aktuální stránku indexu do paměti, a další chyba stránky později, aby se datová stránka přenesla do paměti.
Technologie
Komprese předpon indexu nepoužívá kompresi bloků (jako zlib, snappy atd.), ale jde o jinou techniku ukládání indexů do paměti. Snižuje využití paměti tím, že stejné předpony ukládá pouze jednou. „Komprese předpony klíče“ je způsob komprese dat specifický pro doménu a odkazuje na formát úložiště klíčů ve WiredTiger. Další podrobnosti najdete v dokumentaci formátů souborů WiredTiger.
Testy výkonu
Pro naše výkonnostní testy používáme strukturu dokumentu, jak je podrobně popsáno níže:
{ employeeID: <long>, firstName: <string>, lastName: <string>, income: <long>, supervisor: {ID: <long>, 'firstName': <string>, 'lastName': <string>;} }
Do tohoto nastavení jsme přidali následující indexy:
Index 1: db.ensureIndex({'employeeID':1}); Index 2: db.ensureIndex({'lastName':1, 'firstName':1}); Index 3: db.ensureIndex({'income':1}); Index 4: db.ensureIndex({'supervisor.lastName':1, 'supervisor.firstName':1})
Výsledky
V našem testovacím provozu jsme vložili identická data (asi 10 milionů záznamů) do dvou clusterů – jednoho 2.6.x sady replik a druhého MongoDB 3.0 s WiredTiger. Poté jsme přidali výše uvedené indexy do obou konfigurací clusteru. Výsledky jsou docela ohromující – v některých případech existuje řádový rozdíl ve velikosti indexu!
Název indexu | Velikost indexu MMAP (MB) | Velikost indexu WT (MB) | % zmenšení velikosti |
{employeeID:1} | 230,7 | 94 | 59 % |
{lastName:1, FirstName:1} | 1530 | 36 | 97 % |
{income:1} | 230 | 94 | 59 % |
{‘supervisor.lastName’:1, ‘supervisor.firstName’:1} | 1530 | 35 | 97 % |
Veškerá paměť uložená na indexech je paměť, kterou lze použít pro ukládání dat do mezipaměti, jiných indexů atd. Váš počet najetých kilometrů se může lišit – nezapomeňte otestovat svou konkrétní strukturu indexu. Snížení velikosti indexů je v Mongo 3.0 hodně podprodávaným vylepšením a může mít obrovský vliv na váš výkon!