sql >> Databasteknik >  >> NoSQL >> MongoDB

Indexprefixkomprimering i MongoDB 3.0 WiredTiger

MongoDB 3.0 med WiredTiger introducerar en ny funktion som heter "Index Prefix Compression" som kraftigt minskar minnet som konsumeras av indexen. Mindre minne som används av index betyder mer minne för dokumentlagring eller andra index vilket innebär bättre prestanda.

För bästa prestanda i MongoDB är det bra att behålla dina index i minnet. En sidmiss på ett index är ett dubbelfel – ett sidfel för att få in den faktiska indexsidan i minnet och ett annat sidfel senare för att föra in datasidan i minnet.

Teknik

Komprimering av indexprefix använder inte blockkomprimering (som zlib, snappy etc) utan är en annan teknik för att lagra indexen i minnet. Det minskar minnesanvändningen genom att endast lagra identiska prefix en gång. "Nyckelprefixkomprimering" är ett domänspecifikt sätt att komprimera data och hänvisar till nyckellagringsformatet i WiredTiger. För mer information, se WiredTiger-dokumentationen för filformat.

Prestandatester

För våra prestationstester använder vi en dokumentstruktur enligt nedan:

{
   employeeID: <long>,
   firstName: <string>,
   lastName: <string>,
   income: <long>,
   supervisor: {ID: <long>, 'firstName': <string>, 'lastName': <string>;}
}

Vi har lagt till följande index på den här installationen:

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})

Resultat

I vår testkörning infogade vi identiska data (cirka 10 miljoner poster) i två kluster – en 2.6.x replikauppsättning och den andra en MongoDB 3.0 med WiredTiger. Sedan la vi till ovanstående index på båda klusterkonfigurationerna. Resultaten är ganska häpnadsväckande – i vissa fall finns det en storleksskillnad i indexstorleken!

 Indexnamn MMAP-indexstorlek (MB) WT-indexstorlek (MB)  % minskning i storlek
{employeeID:1} 230.7 94 59 %
{efternamn:1, förnamn:1} 1530 36 97 %
{inkomst:1} 230 94 59 %
{‘supervisor.lastName’:1, ‘supervisor.firstName’:1} 1530 35 97 %

Allt minne som sparas på index är minne som kan användas för att cache data, andra index etc. Din körsträcka kan variera – se till att testa din specifika indexstruktur. Minskningen av indexstorlekar är en mycket undersåld förbättring i Mongo 3.0 och kan göra en enorm skillnad för ditt resultat!


  1. MongoDB $månad

  2. Räckviddsbaserad personsökning mongodb

  3. Visualisera din klustertopologi i ClusterControl

  4. Jämför matriser och returnera skillnaden