
MongoDB 3.0 с WiredTiger въвежда нова функция, наречена „Копресия на префикс на индекса“, която значително намалява паметта, консумирана от индексите. По-малко памет, използвана от индексите, означава повече памет за съхранение на документи или други индекси, което предполага по-добра производителност.
За най-добра производителност в MongoDB е страхотно да съхранявате вашите индекси в паметта. Пропускането на страница в индекс е двоен удар – грешка на една страница за пренасяне на действителната страница на индекса в паметта и друга грешка по-късно за пренасяне на страницата с данни в паметта.
Технологии
Компресията на индексния префикс не използва блокова компресия (като zlib, snappy и т.н.), а е различна техника за съхраняване на индексите в паметта. Той намалява използването на паметта, като съхранява идентични префикси само веднъж. „Компресията на ключов префикс“ е специфичен за домейн начин за компресиране на данни и се отнася до формата за съхранение на ключове в WiredTiger. За повече подробности можете да се обърнете към документацията на WiredTiger за файловите формати.
Тестове за производителност
За нашите тестове за производителност използваме структура на документа, както е описано по-долу:
{
employeeID: <long>,
firstName: <string>,
lastName: <string>,
income: <long>,
supervisor: {ID: <long>, 'firstName': <string>, 'lastName': <string>;}
}
Добавихме следните индекси към тази настройка:
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})
Резултати
В нашия тестов цикъл вмъкнахме идентични данни (около 10 милиона записа) в два клъстера – единият набор от реплики 2.6.x, а другият MongoDB 3.0 с WiredTiger. След това добавихме горните индекси и към двете конфигурации на клъстера. Резултатите са доста зашеметяващи – в някои случаи има разлика от порядък величина в размера на индекса!
| Име на индекс | Размер на MMAP индекс (MB) | Размер на WT индекс (MB) | % намаляване на размера |
| {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% |


Цялата памет, записана в индексите, е памет, която може да се използва за кеширане на данни, други индекси и т.н. Пробегът ви може да варира – не забравяйте да тествате конкретната си структура на индекса. Намаляването на размерите на индекса е много недооценено подобрение в Mongo 3.0 и може да направи огромна разлика за производителността ви!