Overview
MongoDBドライバーは、 MongoDB Serverとの間で送受信されるメッセージを圧縮できます。これにより、各操作で転送されるデータ量が減ります。圧縮により、制約されたネットワークのパフォーマンスが向上し、 MongoDB Atlas の実行中に関連するデータ転送コストが削減されます。
圧縮はワイヤプロトコルレベルで動作するため、アプリケーションが実行するすべての操作に適用されます。複数のアルゴリズムを指定した場合 、ドライバーはMongoDB Serverもサポートしているリスト内の最初のアルゴリズムを使用します。
圧縮アルゴリズム
MongoDBドライバーは次の圧縮アルゴリズムをサポートしています。
ネットワーク圧縮のメリット
MongoDB Atlas は、クラウドリージョン、クラウドプロバイダー、および インフラストラクチャとMongoDB Atlas間で転送されたデータに対して料金を請求します。ネットワーク圧縮により、アプリケーションが送受信するデータ量が減り、これらのデータ転送コストを削減できます。価格の詳細については、「 データ転送コスト 」を参照してください。
ネットワーク圧縮には、効率的な利点も得られます。圧縮されたメッセージはネットワーク間での転送時間が短縮されるため、アプリケーションの応答時間を向上させることができます。圧縮により、 MongoDBトラフィックが使用する帯域幅も削減されるため、同じネットワーク上の他のアプリケーションで使用できる帯域幅が増えます。
圧縮アルゴリズムを選択する場合は、次のガイドラインを考慮してください。
圧縮効率とリソース使用量のバランスを取るには、Zstandard を使用します。 Zstandard は、ほとんどのアプリケーションでのデフォルトの選択に適しています。
最小限の計算オーバーヘッドを必要とするレイテンシの影響を受けやすいアプリケーションには、 Snappy を使用してください。
MongoDBドライバーと環境間での広範な互換性を実現するには、Zlib を使用してください。
Tip
CPU 使用率の監視
圧縮により、ネットワーク帯域幅とCPU使用量のトレードオフが発生します。ネットワーク圧縮を有効にした後は、トレードオフがワークロードにメリットがあることを確認するため、アプリケーションのCPU使用率をモニターします。これらのトレードオフの詳細については、CPU Utilization and Network 圧縮 in MongoDB ブログ記事を参照してください。
バージョンの互換性
C++ドライバーは、 MongoDB Cドライバー を使用してネットワーク トラフィックを圧縮します。次の表は、各 圧縮アルゴリズムでサポートされる最小CドライバーとMongoDB Serverバージョンを示しています。
C++ドライバー バージョンに必要なCドライバー バージョンについては、「libmongoc 互換性 」を参照してください。
ネットワーク圧縮を有効にする
MongoDB接続のネットワーク圧縮を有効にするには、必要な依存関係をインストールし、使用する圧縮アルゴリズムを指定します。
依存関係のインストール
C++ドライバーはMongoDB Cドライバー を使用してネットワーク圧縮を実装するため、必要な依存関係を持つCドライバーを構築する必要があります。これらの依存関係を表示するには、 Cドライバーのドキュメントの「 依存関係のインストール 」を参照してください。
圧縮アルゴリズムを指定する
MongoDBインスタンスへの接続の圧縮を有効にするには、URI にcompressors接続オプションを含め、使用する圧縮アルゴリズムを指定します。 次のコードは、 snappy 、 zstd 、 zlibアルゴリズムをこの順序で指定する方法を示しています。
int main() { mongocxx::instance instance; mongocxx::uri uri("mongodb://<hostname>:<port>/?compressors=snappy,zstd,zlib"); mongocxx::client client(uri); }
zlib 圧縮レベルの設定
圧縮アルゴリズムの 1 つとしてzlibを指定する場合は、 zlibCompressionLevelオプションを使用して圧縮レベルを指定することもできます。 このオプションは、 -1から9までの整数値を受け入れます。
-1: (デフォルト)。 zlib はデフォルトの圧縮レベル(通常は
6)を使用します。0 :圧縮なし。
1 :速度は最も速く、圧縮は最小です。
9 :圧縮に最適ですが、速度は最も遅くなります。
次のコード例では、 zlib圧縮アルゴリズムと、 zlibCompressionLevelオプションに1の値を指定しています。
int main() { mongocxx::instance instance; mongocxx::uri uri("mongodb://<hostname>:<port>/?compressors=zlib&zlibCompressionLevel=1"); mongocxx::client client(uri); }
API ドキュメント
このページで使用されているタイプとオプションの詳細については、次のAPIドキュメントを参照してください。