MongoDB 3.0 z silnikiem przechowywania WiredTiger umożliwia przejrzystą kompresję danych przechowywanych w bazie danych. Jest to dość ekscytująca i użyteczna funkcja, której można użyć do zmniejszenia wykorzystania miejsca na dysku przez szybko rosnące dane. Domyślnie przewodowy tygrys używa silnika kompresji blokowej „Snappy” dla wszystkich kolekcji. Możesz domyślnie wyłączyć kompresję, korzystając z następujących opcji w pliku konfiguracyjnym serwera MongoDB.
storage: engine: wiredTiger wiredTiger: collectionConfig: blockCompressor: none
Algorytm kompresji można określić na poziomie kolekcji podczas tworzenia klastra. Oto przykład tworzenia kolekcji z kompresją „zlib”:
db.createCollection( "test", {storageEngine:{wiredTiger:{configString:'block_compressor=zlib'}}} );
Silnik pamięci masowej MongoDB WiredTiger zapewnia dwie opcje kompresji — snappy i zlib. Zasadniczo istnieje kompromis między stopniem kompresji a obciążeniem procesora do dekompresji. „Zlib” osiąga znacznie większą kompresję i jest odpowiednio mniej wydajny. „Snappy” ma na celu „ukierunkowanie na bardzo duże prędkości i rozsądną kompresję”.
Przeprowadziliśmy kilka prostych nienaukowych testów, aby zmierzyć wydajność kompresji. Użyliśmy jednego z zestawów danych przechowujących ciągi, które naszym zdaniem dobrze się skompresują. Oto podstawowa struktura każdego dokumentu:
{ '_id': <ObjectID>, 'name': <Five character string>, 'value': <Random 1MB string> }
Wstawiliśmy około 5000 takich dokumentów (około 5 GB danych), a wyniki były dość imponujące. Zlib osiąga znaczną kompresję. Snappy osiąga również niezłą kompresję przy niewielkim lub zerowym obciążeniu systemu:
Zlib | Zgryźliwy | nieskompresowany | |
Rozmiar danych (MB) | 5000,5 | 5000,5 | 5000,5 |
Rozmiar pamięci (MB) | 19,62 | 254,37 | 5019 |
Jak zwykle musisz przeprowadzić kilka testów, aby poznać wzrost wydajności zestawu danych. Oto kilka bardziej szczegółowych badań porównawczych wydajności kompresji i kompromisów:
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/