Docs Menu
Docs Home
/
MongoDB Ops Manager
/ /

大きなドキュメントのサイズを縮小

項目一覧

  • Overview
  • 詳細

データベースに大容量のドキュメントを保存すると、RAM と帯域幅が過剰に使用される可能性があります。 MongoDB は、 ワーキングセットと呼ばれる頻繁にアクセスするデータを RAM に保存します。 ワーキングセットが RAM の割り当てを超えると、代わりにディスクからデータを取得する必要があるため、パフォーマンスは低下します。

最も頻繁にクエリを実行する頻度が、そのクエリに必要以上の情報を含むドキュメントである場合は、追加のコレクションへの参照を使用してより小さなドキュメントでスキーマを再構築することを検討してください。 データをより多くのコレクションに分割し、頻繁にアクセスされるデータにはより小さなドキュメントを使用することで、ワーキングセットの全体的なサイズが縮小され、パフォーマンスが向上します。

注意

ハードウェア構成は、システムがサポートできるドキュメントのサイズに影響する可能性があります。 BSON ドキュメント サイズの制限は16メガバイトです。

ホームページに、最新公開 50 の映画タイトルとそのクラスターイメージのリストを表示する映画カタログのウェブサイトを考えてみましょう。 ホームページから、ユーザーは映画をクリックして追加の詳細を表示できます。

ウェブサイトには、映画に関する情報が moviesコレクションに保存されています。 各映画ドキュメントには、その映画で利用可能なすべての情報が含まれています。

// movies collection
{
"_id": 123,
"title": "2001: A Space Odyssey",
"poster": <url>,
"director": "Stanley Kubrick",
"release_year": 1968,
"box_office_usd": 146000000,
"countries_released": [
"United States",
...
],
"cast": [
"Keir Dullea",
...
],
"crew": [
"Ray Lovejoy",
...
],
...
}

注意

可能な場合は常に、MongoDB 配置の外部でイメージをホストし、URL で参照する必要があります。 データベースにイメージを保存すると、ドキュメント サイズの制限に達する可能性が高まります。

この例では、ウェブサイトが実行する最も頻繁なクエリは、最新 50 時間の映画のtitleposterを検索することです。 すべての映画情報をクエリする代わりに、 movieコレクションをmoviesmovie_metadataの 2 つの個別のコレクションに分割することを検討してください。 コレクションは次のようにmovieドキュメントの_idにリンクされています。

// movies collection
{
"_id": 123,
"title": "2001: A Space Odyssey",
"poster": <url>
}
// movie_metadata collection
{
"_id": <object_id>,
"movie_id": 123, // reference to a movies document
"director": "Stanley Kubrick",
"release_year": 1968,
"box_office_usd": 146000000,
"countries_released": [
"United States",
...
],
"cast": [
"Keir Dullea",
...
],
"crew": [
"Ray Lovejoy",
...
],
...
}

そのため、ウェブサイトでは最新 50 冊の映画とその connector をクエリすると、必要な情報のみがロードされます。 ユーザーが映画をクリックすると、サイトは別のクエリを実行して、その映画に関連付けられているmovie_metadataドキュメントを検索します。 この新しいスキーマは、最も頻繁に実行されるクエリではより小さいドキュメントが返されるため、元のスキーマよりもパフォーマンスが向上しています。

ユースケース、特に最も頻繁に実行する操作を検討して、ワーキングセットを効率的に使用するスキーマを設計します。

ワーキングセット内のドキュメントを管理しやすいサイズに保つための戦略については、次のパターンを参照してください。

  • 拡張参照パターンを使用して、大きなドキュメントから頻繁に読み取られるデータの部分を小さなドキュメントに複製します。

  • サブセット パターンを使用して、大きな配列フィールドを持つドキュメントのサイズを縮小します。

  • 外側のパターンを使用して、それ以外の標準コレクション内のいくつかの大きなドキュメントを処理します。

柔軟なデータモデルをスキーマに組み込む方法については、MongoDB.live 2020 の以下のプレゼンテーションを参照してください。

戻る

インデックスを減らす

項目一覧