MongoDB 3.0 med WiredTiger introducerer en ny funktion kaldet 'Index Prefix Compression', som i høj grad reducerer hukommelsen, der forbruges af indekserne. Mindre hukommelse brugt af indekser betyder mere hukommelse til dokumentlagring eller andre indekser, hvilket indebærer bedre ydeevne.
For den bedste ydeevne i MongoDB er det fantastisk at gemme dine indekser i hukommelsen. En sidefejl på et indeks er et dobbelt puds – en sidefejl for at bringe den faktiske indeksside i hukommelsen og en anden sidefejl senere for at bringe datasiden i hukommelsen.
Teknologi
Indekspræfikskomprimering bruger ikke blokkomprimering (som zlib, snappy osv.), men er en anden teknik til at gemme indekserne i hukommelsen. Det reducerer hukommelsesforbruget ved kun at gemme identiske præfikser én gang. "Nøglepræfikskomprimering" er en domænespecifik måde at komprimere data på og henviser til nøglelagringsformatet i WiredTiger. For flere detaljer kan du henvise til WiredTiger-dokumentationen for filformater.
Performancetests
Til vores præstationstests bruger vi en dokumentstruktur som beskrevet nedenfor:
{ employeeID: <long>, firstName: <string>, lastName: <string>, income: <long>, supervisor: {ID: <long>, 'firstName': <string>, 'lastName': <string>;} }
Vi tilføjede følgende indekser til denne opsætning:
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})
Resultater
I vores testkørsel indsatte vi identiske data (ca. 10 millioner poster) i to klynger – et 2.6.x replikasæt og det andet et MongoDB 3.0 med WiredTiger. Derefter tilføjede vi ovenstående indekser på begge klyngekonfigurationer. Resultaterne er ret overvældende – i nogle tilfælde er der en størrelsesordensforskel i indeksstørrelsen!
Indeksnavn | MMAP-indeksstørrelse (MB) | WT-indeksstørrelse (MB) | % reduktion i størrelse |
{employeeID:1} | 230,7 | 94 | 59 % |
{efternavn:1, fornavn:1} | 1530 | 36 | 97 % |
{indkomst:1} | 230 | 94 | 59 % |
{'supervisor.lastName':1, 'supervisor.firstName':1} | 1530 | 35 | 97 % |
Al den hukommelse, der er gemt på indekser, er hukommelse, der kan bruges til at cache data, andre indekser osv. Dit kilometertal kan variere - sørg for at teste din særlige indeksstruktur. Reduktionen af indeksstørrelser er en meget undersolgt forbedring i Mongo 3.0 og kan gøre en enorm forskel for din ydeevne!