Overview
MongoDBドライバーは、 MongoDB Serverとの間で送受信されるメッセージを圧縮できます。これにより、各操作で転送されるデータ量が減ります。圧縮により、制約されたネットワークのパフォーマンスが向上し、 MongoDB Atlas の実行中に関連するデータ転送コストが削減されます。
圧縮はワイヤプロトコルレベルで動作するため、アプリケーションが実行するすべての操作に適用されます。複数のアルゴリズムを指定した場合 、ドライバーはMongoDB Serverもサポートしているリスト内の最初のアルゴリズムを使用します。
圧縮アルゴリズム
MongoDBドライバーは次の圧縮アルゴリズムをサポートしています。
ネットワーク圧縮のメリット
MongoDB Atlas は、クラウドリージョン、クラウドプロバイダー、および インフラストラクチャとMongoDB Atlas間で転送されたデータに対して料金を請求します。ネットワーク圧縮により、アプリケーションが送受信するデータ量が減り、これらのデータ転送コストを削減できます。価格の詳細については、「 データ転送コスト 」を参照してください。
ネットワーク圧縮には、効率的な利点も得られます。圧縮されたメッセージはネットワーク間での転送時間が短縮されるため、アプリケーションの応答時間を向上させることができます。圧縮により、 MongoDBトラフィックが使用する帯域幅も削減されるため、同じネットワーク上の他のアプリケーションで使用できる帯域幅が増えます。
圧縮アルゴリズムを選択する場合は、次のガイドラインを考慮してください。
圧縮効率とリソース使用量のバランスを取るには、Zstandard を使用します。 Zstandard は、ほとんどのアプリケーションでのデフォルトの選択に適しています。
最小限の計算オーバーヘッドを必要とするレイテンシの影響を受けやすいアプリケーションには、 Snappy を使用してください。
MongoDBドライバーと環境間での広範な互換性を実現するには、Zlib を使用してください。
Tip
CPU 使用率の監視
圧縮は、CPU 使用率とネットワーク帯域幅の引き換えです。ネットワーク圧縮を有効にした後、アプリケーションの CPU 使用率を監視して、トレードオフがワークロードにメリットをもたらすことを確認します。これらのトレードオフの詳細については、 MongoDBブログ記事の CPU 使用率とネットワーク圧縮 を参照してください。
バージョンの互換性
次の表は、各 圧縮アルゴリズムでサポートされる最小のドライバーとMongoDB Server のバージョンを示しています。
圧縮機能フラグを追加する
コンプレッサーを使用するには、プロジェクトのCargo.tomlファイル内のmongodb依存関係の機能リストに関連する機能フラグを追加します。
必要な機能フラグをmongodb依存関係に追加する方法を確認するには、希望するコンプレッサーのタブを選択します。
[dependencies.mongodb] version = "3.9.1" features = ["snappy-compression"]
[dependencies.mongodb] version = "3.9.1" features = ["zlib-compression"]
[dependencies.mongodb] version = "3.9.1" features = ["zstd-compression"]
Tip
複数のコンプレッサーを指定するには、各コンプレッサーの機能フラグをmongodb依存関係に追加する必要があります。
ネットワーク圧縮を有効にする
次の方法でコンプレッサーを指定して、 Clientインスタンスで圧縮を有効にできます。
接続stringに
compressorsパラメータを追加します。 この方法で圧縮を有効にする例については、「接続string 」セクションを参照してください。ClientOptionsインスタンスのcompressorsフィールドを設定する。 次に、Clientをインスタンス化するときに、オプションをwith_options()メソッドに渡すことができます。 この方法で圧縮を有効にする例については、「 ClientOptionsセクション 」を参照してください。
接続文字列
接続stringを使用して圧縮を有効にするには、compressors パラメータを指定します。 compressorsパラメーターには、次の値を 1 つ以上指定できます。
"snappy"、Snappy 圧縮"zlib"、 zlib圧縮用"zstd"Zstandard 圧縮
次の例は、接続のコンプレッサーとしてSnappy 、 zlib 、および Zstandard を指定する方法を示しています。
let uri = "mongodb+srv://<db_username>:<db_password>@<cluster-url>/?compressors=snappy,zlib,zstd"; let client = Client::with_uri_str(uri).await?;
クライアントオプション設定の詳細については、接続オプションの指定に関するガイドを参照してください。
ClientOptions
ClientOptionsインスタンス内で圧縮を有効にするには、 compressorsフィールドを設定し、クライアントの作成時にオプションを渡します。
compressorsフィールドはVec<Compressor>型の値を取ります。 Compressor型には、次の可能な値があります。
Compressor::SnappyCompressor::Zstd { level: <integer> }Compressor::Zlib { level: <integer> }
levelフィールドを持つコンプレッサーの場合、デフォルトのレベルを示すには、値をNoneに設定します。 次の表は、 zlibと Zstandard のデフォルトおよび許容される圧縮レベルについて説明したものです。
コンプレッサー | デフォルトのレベル | 許容レベル |
|---|---|---|
Zlib |
|
|
Zstandard |
|
|
levelの値が大きいほど、圧縮が行われますが、速度は遅くなります。
次の例は、接続のコンプレッサーとしてSnappy 、 zlib 、および Zstandard を指定する方法を示しています。
let uri = "<connection string>"; let mut client_options = ClientOptions::parse(uri).await?; let compressors = vec![ Compressor::Snappy, Compressor::Zstd { level: Some(1) }, Compressor::Zlib { level: None } ]; client_options.compressors = Some(compressors); let client = Client::with_options(client_options)?;
詳細情報
このガイドの概念の詳細については、次のドキュメントを参照してください。
サーバー マニュアルの「接続string圧縮オプション」を参照してください
API ドキュメント
このガイドで言及されているメソッドや型の詳細については、以下のAPIドキュメントを参照してください。