sql >> Database teknologi >  >> NoSQL >> MongoDB

Indekspræfikskomprimering i MongoDB 3.0 WiredTiger

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!


  1. Arbejde med specialkarakterer i en Mongo-samling

  2. Dårlig opslagssammenlægningsydelse

  3. MongoDB:FEJL:underordnet proces mislykkedes, afsluttet med fejlnummer 14

  4. Forbinder du direkte til Redis med (klientsiden) javascript?