2011-12-26 7 views

答えて

4

これは、JOIN(MongoDBではできないこと)を使って行うリレーショナルデータベースで何を行うかの1つの方法です。

たとえば、MongoDBドキュメントをブログ記事として使用して、コメントリストを埋め込むことができます。その後

することができます(例):

  • 単一のクエリの負荷ポストとコメント
  • の返信を持っている投稿を検索
  • ユーザBが応答を持っているユーザAでポストを
  • 検索
  • はアトミック

すべてのことは不可能であろう単一のトランザクションでポストとコメントの両方を更新(またはLEAでコメントが別の文書として自分のコレクションに保存されている場合は難しい)。

+0

大丈夫です。だからあなたのブログの投稿の例を使って、私は記事のタグを保存したいと言っています。私は特定のブログ記事のタグのコレクション全体を検索する手間を省くことができるタグのリストをブログの投稿に埋め込むことができます。タグのコレクションを作成して、タグが使用された回数を数えることができる場合はどうなりますか?投稿にタグを埋め込み、カウント付きのタグのために別のコレクションを作成します。 mongoDBは、特定のタグが使用された回数を数えるために、すべての投稿のクエリを処理できますか?または適切な別のタグ収集ですか? – Santiago

+0

"mongoDBは、特定のタグが使用された回数をカウントするために、すべての投稿にわたってクエリを処理できますか?"はい、そのタグを使用するすべてのドキュメントを数えることができます。タグが索引付けされている場合は、それもかなり速くなるはずです。 – Thilo

2

単純な言葉で言えば、トップレベルのオブジェクトではない場合、複雑な関係がない場合、埋め込まないと重複するデータがたくさんある場合、ドキュメントが数メガバイト。 MongoDBのサイトから撮影

:ベストプラクティスのhttp://www.mongodb.org/display/DOCS/Schema+Design

概要

  • トップレベルにある埋め込みコード「ファーストクラス」オブジェクトは、通常、自分のコレクションを持っています。
  • 通常、広告申込情報の詳細オブジェクトが埋め込まれています。
  • オブジェクト "フォール"をモデリングするオブジェクトに続くオブジェクトは、一般的に埋め込まれるべきです。
  • 多くの場合、多くのリレーションシップは一般にリンクによって行われます。
  • 少数のオブジェクトを持つコレクションは、コレクション全体がアプリケーションサーバーのメモリにすばやくキャッシュされるため、別々のコレクションとして安全に存在する可能性があります。
  • 埋め込みオブジェクトは、コレクションの「トップレベル」オブジェクトよりもリンクするのが少し難しくなっています。
  • 埋め込みオブジェクトのシステムレベルのビューを取得することは難しくなります。必要に応じて、MongoDBのmap/reduce機能を使用してこの種の操作を実行します。
  • 埋め込むデータ量が膨大な場合(数MB)、単一のオブジェクトのサイズの制限に達することがあります。 GridFSも参照してください。
  • パフォーマンスに問題がある場合は、埋め込みます。
関連する問題