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の最低バージョンを示します。
ネットワーク圧縮を有効にする
MongoDB接続でネットワーク圧縮を有効にするには、必要な依存関係をインストールし、使用する圧縮アルゴリズムを指定します。
依存関係のインストール
以下の表は、各圧縮アルゴリズムに必要な依存関係の一覧です。
圧縮アルゴリズム | 依存関係 |
|---|---|
Snappy | python-snappy パッケージが必要です。 |
Zlib | Python 標準ライブラリに含まれている zlib モジュールが必要です。 |
Zstandard | zstandard パッケージが必要です。 |
圧縮アルゴリズムを指定する
MongoDB インスタンスへの接続の圧縮を有効にするには、 compressors接続オプションを使用して、使用する圧縮アルゴリズムを指定します。 これは、次の 2 つの方法で行うことができます。
アルゴリズムを引数として
MongoClientコンストラクターに渡します。接続stringでアルゴリズムを指定します。
次のコード例には、両方のオプションが表示されています。
次のタブは、MongoDB に接続するときに、利用可能なすべてのコンプレッサーを指定する方法を示しています。
client = pymongo.MongoClient("mongodb://<db_username>:<db_password>@<hostname>:<port>", compressors = "snappy,zstd,zlib")uri = ("mongodb://<db_username>:<db_password>@<hostname>:<port>/?" "compressors=snappy,zstd,zlib")client = pymongo.MongoClient(uri)client = pymongo.AsyncMongoClient("mongodb://<db_username>:<db_password>@<hostname>:<port>", compressors = "snappy,zstd,zlib")uri = ("mongodb://<db_username>:<db_password>@<hostname>:<port>/?" "compressors=snappy,zstd,zlib")client = pymongo.AsyncMongoClient(uri)圧縮アルゴリズムを指定しない場合、PyMongo はネットワーク トラフィックを圧縮しません。 複数の圧縮アルゴリズムを指定した場合、ドライバーは MongoDB インスタンスでサポートされているリスト内の最初の 1 つを選択します。
zlib 圧縮レベルの指定
圧縮アルゴリズムの 1 つとしてzlibを指定する場合は、 zlibCompressionLevelオプションを使用して圧縮レベルを指定することもできます。 このオプションは、 -1から9までの整数値を受け入れます。
- 1 :(デフォルト)。 zlib はデフォルトの圧縮レベル(通常は
6)を使用します。0 :圧縮なし。
1 :速度は最も速く、圧縮は最小です。
9 :圧縮に最適ですが、速度は最も遅くなります。
次のコード例では、 zlib圧縮アルゴリズムと、 zlibCompressionLevelオプションに1の値を指定しています。
client = pymongo.MongoClient("mongodb://<db_username>:<db_password>@<hostname>:<port>", compressors = "zlib", zlibCompressionLevel=1)uri = ("mongodb://<db_username>:<db_password>@<hostname>:<port>/?" "compressors=zlib" "zlibCompressionLevel=1")client = pymongo.MongoClient(uri)client = pymongo.AsyncMongoClient("mongodb://<db_username>:<db_password>@<hostname>:<port>", compressors = "zlib", zlibCompressionLevel=1)uri = ("mongodb://<db_username>:<db_password>@<hostname>:<port>/?" "compressors=zlib" "zlibCompressionLevel=1")client = pymongo.AsyncMongoClient(uri)API ドキュメント
このガイドで説明したメソッドやタイプの詳細については、 MongoClient APIドキュメント を参照してください。