MongoDB 3.0 с механизма за съхранение на WiredTiger ви позволява прозрачно да компресирате данните, съхранявани във вашата база данни. Това е доста вълнуваща и полезна функция, която може да се използва за намаляване на използването на дисково пространство от вашите бързо нарастващи данни. По подразбиране кабелният тигър използва механизма за компресиране на блокове „Snappy“ за всички колекции. Можете да изключите компресията по подразбиране, като използвате следните опции в конфигурационния файл на сървъра на MongoDB.
storage: engine: wiredTiger wiredTiger: collectionConfig: blockCompressor: none
Алгоритъмът за компресия може да бъде зададен на ниво колекция по време на създаването на клъстер. Ето пример за създаване на колекция с компресия „zlib“:
db.createCollection( "test", {storageEngine:{wiredTiger:{configString:'block_compressor=zlib'}}} );
Двигателят за съхранение на MongoDB WiredTiger предоставя две опции за компресиране – snappy и zlib. По същество има компромис между степента на компресия и количеството натоварване на процесора за декомпресиране. „Zlib“ постига много повече компресия и съответно е по-малко производителен. „Snappy“ има за цел „цели към много високи скорости и разумна компресия“.
Проведохме някои прости ненаучни тестове, за да измерим ефективността на компресията. Използвахме един от наборите от данни, съхраняващи низове, които смятахме, че ще се компресират добре. Ето основната структура на всеки документ:
{ '_id': <ObjectID>, 'name': <Five character string>, 'value': <Random 1MB string> }
Вмъкнахме около 5000 от тези документи (около 5 GB данни) и резултатите бяха доста впечатляващи. Zlib постига значително количество компресия. Snappy също постига доста компресия с малко или никакво натоварване на системата:
Zlib | Бързък | некомпресиран | |
Размер на данните (MB) | 5000.5 | 5000.5 | 5000.5 |
Размер на хранилището (MB) | 19,62 | 254,37 | 5019 |
Както винаги, трябва да проведете някои тестове, за да разберете подобренията в производителността за вашия набор от данни. Ето някои по-подробни сравнителни проучвания за производителността на компресия и компромисите:
http://www.mongodb.com/blog/post/new-compression-options-mongodb-30
http://www.acmebenchmarking.com/2015/02/mongodb-v30-compression-benchmarks.html
https://comerford.cc/2015/02/04/mongodb-3-0-testing-compression/