2012-06-13 4 views
5

重いもので、おそらく何百万もの文書を持つ可能性のあるアプリケーションを開発しています。ほとんどすべてのコレクションのユーザー情報を参照する必要があります。ユーザー情報には時々変化する属性があります。読み取り専用アプリケーションでdbrefまたは埋め込み文書を使用する必要があります

DBrefを使用するか、すべてのコレクションにユーザー情報を埋め込む必要がありますか?

大量の読み込みアプリケーションでDBrefのパフォーマンスはどれくらい悪いですか?

DBrefを使用しない場合、ユーザー情報が定期的に変更されると、どのように各ドキュメントを更新できますか?

Mongodbでは、この種のユースケースではDBrefと組み込みドキュメントの代替手段はありますか?

答えて

6

DBrefは従来のリレーショナルシステムでは外部キーのようなものではありません。ドライバーには、参照された文書を自動ロードすることが容易に分かります。詳細については、DBRefを参照してください。
使用しているドライバによっては、これらの参照を必要なときにのみ自動的に読み込むことができます(遅延)ので、パフォーマンスのオーバーヘッドはごくわずかです。しかし、ストレージオーバヘッドは、別のドキュメントの単純な参照_idよりも少し高いです。基本的には、リンクされたドキュメントが可変型である可能性がある場合にのみ、それらのDBrefsを使うべきだと言います。そのスタティックが_id-referencesで固まっていて、おそらく独自の遅延ローダー機能がある場合は、自分自身を繰り返さないでください。
MongoDBが推奨するように、あなた自身の繰り返し(データベース用語でのデータの複製)もあなたの文脈に適用されないので、私もそうですlink your documentsです。そうでなければ、ストレージの使用量を増やし、アップデートの実行時間を長くして、1つの論理エンティティのみを更新します(物理的に頻繁に複製)。

前述のカスタムレイジーローダーを使用すると、すべてのルックアップがmongodbルックアップにならないようにキャッシュを追加できます。たいていの場合、キャッシュとdb間のデータの整合性を考慮する必要があります。

+0

ご返信ありがとうございます。本当に役に立ちました。 – atandon

関連する問題