- MongoDB Async Driver
- Tutorials
- Connect to MongoDB
- Compression
Compression
The Java driver supports compression of messages to and from MongoDB servers. The driver implements the two algorithms that are supported by MongoDB servers:
- Snappy: Snappy compression can be used when connecting to MongoDB servers starting with the 3.4 release.
- Zlib: Zlib compression can be used when connecting to MongoDB servers starting with the 3.6 release.
- Zstandard: Zstandard compression can be used when connecting to MongoDB servers starting with the 4.2 release.
The driver will negotiate which, if any, compression algorithm is used based on capabilities advertised by the server in the ismaster command response.
Specify compression via connection string
import com.mongodb.async.client.MongoClients;
import com.mongodb.async.client.MongoClient;
To specify compression with a connection string, specify compressors
as part of the connection string, as in:
MongoClient mongoClient = MongoClients.create("mongodb://localhost/?compressors=snappy");
for Snappy compression, or
MongoClient mongoClient = MongoClients.create("mongodb://localhost/?compressors=zlib");
for zlib compression, or
MongoClient mongoClient = MongoClients.create("mongodb://localhost/?compressors=zstd");
for Zstandard compression, or
MongoClient mongoClient = MongoClients.create("mongodb://localhost/?compressors=snappy,zlib,zstd");
to configure multiple compressors.
In all cases the driver will use the first compressor in the list for which the server advertises support.
Specify compression via MongoClientSettings
import com.mongodb.connection.ClusterSettings;
import com.mongodb.async.client.MongoClients;
import com.mongodb.async.client.MongoClient;
import com.mongodb.MongoClientSettings;
import com.mongodb.MongoCompressor;
import java.util.Arrays;
To specify compression with MongoClientSettings
, set the compressors
property
to a list of MongoCompressor
instances:
ClusterSettings clusterSettings = ClusterSettings.builder().hosts(Arrays.asList(new ServerAddress("localhost"))).build();
MongoClientSettings settings = MongoClientSettings.builder()
.clusterSettings(clusterSettings);
.compressorList(Arrays.asList(MongoCompressor.createSnappyCompressor()))
.build();
MongoClient client = MongoClients.create(settings);
for Snappy compression, or
ClusterSettings clusterSettings = ClusterSettings.builder().hosts(Arrays.asList(new ServerAddress("localhost"))).build();
MongoClientSettings settings = MongoClientSettings.builder()
.clusterSettings(clusterSettings);
.compressorList(Arrays.asList(MongoCompressor.createZlibCompressor()))
.build();
MongoClient client = MongoClients.create(settings);
for zlib compression, or
ClusterSettings clusterSettings = ClusterSettings.builder().hosts(Arrays.asList(new ServerAddress("localhost"))).build();
MongoClientSettings settings = MongoClientSettings.builder()
.clusterSettings(clusterSettings);
.compressorList(Arrays.asList(MongoCompressor.createZstdCompressor()))
.build();
MongoClient client = MongoClients.create(settings);
for Zstandard compression, or
ClusterSettings clusterSettings = ClusterSettings.builder().hosts(Arrays.asList(new ServerAddress("localhost"))).build();
MongoClientSettings settings = MongoClientSettings.builder()
.clusterSettings(clusterSettings);
.compressorList(Arrays.asList(MongoCompressor.createSnappyCompressor(),
MongoCompressor.createZlibCompressor(),
MongoCompressor.createZstdCompressor()))
.build();
MongoClient client = MongoClients.create(settings);
to configure multiple compressors.
As with configuration with a URI, the driver will use the first compressor in the list for which the server advertises support.
Dependencies
As the JDK has no built-in support for Snappy or Zstandard, the driver takes a dependency on an existing open-source Snappy and Zstandard implementation. See the snappy-java Github repository and the zstd-java Github repository for details.