O MongoDB 3.0 com o mecanismo de armazenamento WiredTiger permite compactar de forma transparente os dados armazenados em seu banco de dados. Este é um recurso bastante interessante e útil que pode ser usado para reduzir o uso de espaço em disco de seus dados de crescimento rápido. Por padrão, o tigre com fio usa o mecanismo de compactação de bloco 'Snappy' para todas as coleções. Você pode desativar a compactação por padrão usando as seguintes opções no arquivo de configuração do servidor MongoDB.
storage: engine: wiredTiger wiredTiger: collectionConfig: blockCompressor: none
O algoritmo de compactação pode ser especificado no nível de coleta durante a criação do cluster. Aqui está um exemplo de criação de uma coleção com compressão 'zlib':
db.createCollection( "test", {storageEngine:{wiredTiger:{configString:'block_compressor=zlib'}}} );
O mecanismo de armazenamento MongoDB WiredTiger oferece duas opções de compactação – snappy e zlib. Há essencialmente uma compensação entre a extensão da compactação e a quantidade de carga da CPU para descompactar. 'Zlib' atinge muito mais compactação e é correspondentemente menos performático. 'Snappy' visa 'aponta para velocidades muito altas e compressão razoável'.
Executamos alguns testes não científicos simples para medir o desempenho da compactação. Usamos um dos conjuntos de dados que armazenam strings que achamos que comprimiriam bem. Aqui está a estrutura básica de cada documento:
{ '_id': <ObjectID>, 'name': <Five character string>, 'value': <Random 1MB string> }
Inserimos cerca de 5.000 desses documentos (cerca de 5 GB de dados), e os resultados foram bastante impressionantes. Zlib atinge uma quantidade considerável de compressão. O Snappy também atinge uma boa quantidade de compactação com pouca ou nenhuma carga no sistema:
Zlib | Inteligente | descompactado | |
Tamanho dos dados (MB) | 5000,5 | 5000,5 | 5000,5 |
Tamanho do armazenamento (MB) | 19,62 | 254,37 | 5019 |
Como sempre, você precisa fazer alguns testes para entender os ganhos de desempenho do seu conjunto de dados. Aqui estão alguns estudos de benchmark mais detalhados sobre desempenho de compressão e compensações:
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/