MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

Компресиране на индексен префикс в MongoDB 3.0 WiredTiger

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


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Зареждането на частични части е неуспешно на сървъра JS

  2. Намерете документ с ObjectID в mongoDB

  3. $unwind обект в рамката за агрегиране

  4. Получаване на времеви печат на unix за секунди от MongoDB ISODate по време на агрегиране

  5. Ограничение за попълване на възел js mongoose