編集:
10gen の Brendan McAdamsの回答を見つけたところです。彼は明らかに私よりもはるかに権威があり、ドキュメントを埋め込むことを勧めています。
古いテキスト:
1 つ目は、所属するユーザーの ObjectID を各コメントに手動で含めることです。
comment: { text : "...",
date: "...",
user: ObjectId("4b866f08234ae01d21d89604"),
votes: 7 }
2 番目の賢い方法は、DBRef を使用することです。
ディスクに余分な I/O を追加すると、パフォーマンスが低下しますよね? (これが内部でどのように機能するかはわかりません)したがって、可能であればリンクを避ける必要がありますよね?
はい - もう 1 つクエリがありますが、ドライバーがそれを行います。これは一種の構文糖衣と考えることができます。パフォーマンスに影響しますか? 実際、それも依存しています:) Mongoが非常に高速である理由の1つは、メモリマップされたファイル
を使用しているためであり、mongoはすべてのワーキングセット(およびインデックス)をRAMに直接保持するために最善を尽くします. また、60 秒ごと (デフォルト) に、RAM スナップショットをディスクベースのファイルと同期します。
私が作業セットと言っているとき、私はあなたが作業しているものを意味します.3つのコレクションを持つことができます - foo、bar、bazただし、現在 foo と bar のみを使用している場合は、これらを RAM にロードする必要がありますが、baz はディスクに残しておいてください。さらに、メモリ マップ ファイルでは、コレクションの一部のみをロードできます。したがって、engadget や techcrunch のようなものを構築している場合、ワーキング セットが過去数日間のコメントである可能性が高く、古いページが復活する頻度はかなり低くなります (コメントはオンデマンドでメモリに生成されます)。パフォーマンスに大きな影響を与えません。
要約すると、メモリ内に作業セットを保持している限り (読み取り/書き込みキャッシュだと思うかもしれません)、それらのフェッチは超高速であり、もう 1 つのクエリは問題になりません。メモリに収まらないデータのスライスを操作すると、速度が低下しますが、現在の状況ではありません-許容できる可能性があるため、どちらの場合もリンクを使用することを選択する傾向があります.