MongoDB の最大ドキュメントサイズ

Mehvish Ashiq 2024年2月16日
MongoDB の最大ドキュメントサイズ

このチュートリアルでは、MongoDB にドキュメントを保存するためのデフォルトの最大サイズ制限について説明します。また、データがサイズ制限を超えた場合の代替ソリューションについても説明します。

また、BSON ドキュメントのデフォルトの最大サイズ制限の効率的な使用についても学習します。

MongoDB の最大ドキュメントサイズ

MongoDB では、ドキュメント(オブジェクト)は BSON 形式で保存されます。BSON(バイナリ JSON)は、JSON のようなドキュメントのバイナリシリアル化です。

この形式を使用すると、さまざまな拡張機能を使用して、JSON の一部ではないデータタイプのさまざまな表現を使用できます。

たとえば、BSON には JSON では使用できない Date および BinData タイプがあります。MongoDB ドキュメントによると、単一の BSON ドキュメントのサイズ制限は 16MB です。

1つのドキュメントが送信中に無制限の量の RAM または帯域幅を使用できないようにするために、ドキュメントの最大サイズ制限があります。各アレイ/オブジェクトが 1つのレベルを追加する場合、最大 100 レベルの BSON ドキュメントをネストできることに注意してください。

今日の世界では、私たちの周りにデータがあります。そのため、データによって BSON ドキュメントのサイズ制限が 16 メガバイト増加する可能性があります。

その場合、MongoDB は、16MB より大きいドキュメントを格納するための GridFS API を提供することで私たちを支援します。

GridFS API とは何ですか

GridFS は MongoDB 仕様であり、オーディオ、ビデオ、画像ファイルなど、BSON ドキュメントの制限(16MB)を超える大きなファイルを保存してアクセスするために使用できます。ファイルを保存するためのファイルシステムに似ていますが、データは MongoDB コレクションに保存されます。

GridFS API は、ファイルをチャンクに分割し、すべてのデータチャンクを個別のドキュメントに格納します。各ドキュメントのサイズは 255KB です。GridFS には、デフォルトで fs.filesfs.chunks の 2つのコレクションが含まれ、ファイルのメタデータとチャンクが格納されます。

すべてのチャンクは一意の _idObjectId)フィールドによって認識され、fs.files は親ドキュメントとして機能します。fs.chunks ドキュメントの files_id フィールドは、チャンクをその親にリンクします。

この記事を読んで、GridFS を使用しながら構文を理解することができます。

デフォルトの BSON ドキュメントサイズ制限を効率的に使用する

BSON ドキュメントのサイズ制限(16MB)はたくさんあります。たとえば、War of the Worlds の非圧縮テキスト全体は 364k(HTML)のみですが、例外は常に存在します。

データが制限を超えている場合は、前に説明した GridFS API を使用するか、16MB を効率的に使用するための戦略を立てることができます。

XYZ アプリケーションを開発するシナリオを考えてみましょう。アプリケーションには、Booleansnumbersstringsdates(UNIX ミリ秒として表される)の 4つのデータタイプが必要です。

16MB のサイズ制限により、MongoDB は約 200 万の 64 ビットの数値(日付ブール値も)を簡単に保存できます。

ここでは、すべての UTF-8 文字が 1つのバイトを占めるため、文字列タイプの値には特別な注意が必要です。文字列タイプの値を含むすべての列のサイズを最適化する必要があります。

文字列タイプの値を持つ列のサイズを小さくするには、次の方法を試すことができます。

  1. stringify() および zip() メソッドを zip(JSON.stringify(column.values)); として使用できます。

  2. 辞書を作成し、すべての一意の文字列タイプの値を辞書に挿入できます。次に、文字列値をインデックスに置き換えます。

    このアプローチは、フィールドに繰り返し文字列値が多数ある場合に役立ちます。この方法は、ハッシュの列を保存したい場合には役立ちませんが、GridFS API を使用できます。

  3. 列をさまざまなチャンクに分割し、これらのチャンクをメインドキュメントにリンクされている他のドキュメントに保存することもできます。

これらすべてのアプローチを示す参照記事があります。

著者: Mehvish Ashiq
Mehvish Ashiq avatar Mehvish Ashiq avatar

Mehvish Ashiq is a former Java Programmer and a Data Science enthusiast who leverages her expertise to help others to learn and grow by creating interesting, useful, and reader-friendly content in Computer Programming, Data Science, and Technology.

LinkedIn GitHub Facebook

関連記事 - MongoDB Document