大きなドキュメントのサイズを縮小
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 時間の映画のtitle
とposter
を検索することです。 すべての映画情報をクエリする代わりに、 movie
コレクションをmovies
とmovie_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 のデータ モデリングと柔軟なスキーマ モデルの詳細については、「データ モデリングの概要」を参照してください。
参照を使用してスキーマをモデル化する方法の詳細については、「ドキュメント参照を使用した 1 対多の関係のモデル化 」を参照してください。
MongoDB では、データモデリングに関する無料の MongoDB University コース「 MongoDB のデータ モデリング 」も提供しています。
設計パターン
ワーキングセット内のドキュメントを管理しやすいサイズに保つための戦略については、次のパターンを参照してください。
拡張参照パターンを使用して、大きなドキュメントから頻繁に読み取られるデータの部分を小さなドキュメントに複製します。
サブセット パターンを使用して、大きな配列フィールドを持つドキュメントのサイズを縮小します。
外側のパターンを使用して、それ以外の標準コレクション内のいくつかの大きなドキュメントを処理します。
MongoDB.Live 2020 のプレゼンテーション
柔軟なデータモデルをスキーマに組み込む方法については、MongoDB.live 2020 の以下のプレゼンテーションを参照してください。
MongoDB のエンティティ関係と、MongoDB を使用したデータ モデリングによるその実装例について学びます。
スキーマに組み込むことができる高度なデータモデリング設計パターンについて学ぶには、「高度なスキーマ デザイン パターン」をご覧ください。