sql >> Database >  >> NoSQL >> MongoDB

Indexprefixcompressie in MongoDB 3.0 WiredTiger

MongoDB 3.0 met WiredTiger introduceert een nieuwe functie genaamd 'Index Prefix Compression' die het geheugen dat door de indexen wordt verbruikt aanzienlijk vermindert. Minder geheugen dat door indexen wordt gebruikt, betekent meer geheugen voor documentopslag of andere indexen, wat betere prestaties impliceert.

Voor de beste prestaties in MongoDB is het geweldig om uw indexen in het geheugen te bewaren. Het missen van een pagina op een index is een dubbele klap:één paginafout om de eigenlijke indexpagina in het geheugen te brengen en een andere paginafout later om de gegevenspagina in het geheugen te krijgen.

Technologie

Compressie van indexprefixen maakt geen gebruik van blokcompressie (zoals zlib, snappy, enz.) maar is een andere techniek om de indexen in het geheugen op te slaan. Het vermindert het geheugengebruik door identieke voorvoegsels slechts één keer op te slaan. De "compressie van het sleutelvoorvoegsel" is een domeinspecifieke manier om gegevens te comprimeren en verwijst naar het sleutelopslagformaat in WiredTiger. Voor meer details kunt u de WiredTiger documentatie van bestandsformaten raadplegen.

Prestatietests

Voor onze prestatietests gebruiken we een documentstructuur zoals hieronder beschreven:

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

We hebben de volgende indexen toegevoegd aan deze opstelling:

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

Resultaten

Tijdens onze testrun hebben we identieke gegevens (ongeveer 10 miljoen records) in twee clusters ingevoegd:een 2.6.x replicaset en de andere een MongoDB 3.0 met WiredTiger. Vervolgens hebben we de bovenstaande indexen toegevoegd aan beide clusterconfiguraties. De resultaten zijn behoorlijk verbluffend - in sommige gevallen is er een verschil in de grootteorde van de index!

 Indexnaam MMAP-indexgrootte (MB) WT-indexgrootte (MB)  % verkleining
{employeeID:1} 230.7 94 59%
{lastName:1, firstName:1} 1530 36 97%
{inkomen:1} 230 94 59%
{‘supervisor.lastName’:1, ‘supervisor.firstName’:1} 1530 35 97%

Al het geheugen dat op indexen wordt opgeslagen, is geheugen dat kan worden gebruikt voor het cachen van gegevens, andere indexen, enz. Uw kilometerstand kan variëren - test uw specifieke indexstructuur. Het verkleinen van de indexgroottes is een veel te weinig verkochte verbetering in Mongo 3.0 en kan een enorm verschil maken voor uw prestaties!


  1. Array-object bijwerken op basis van id?

  2. Hoe MongoDB gebruiken met beloften in Node.js?

  3. Mongoid:vind via Array of ids

  4. redis voor loggen