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 и може да направи огромна разлика за производителността ви!