2016-01-05 16 views
6

MongoDB docs for DBREFsは言う:MongoDBのドキュメントでDBREFを使用しないことをお勧めするのはなぜですか?

あなたがDBREFSを使用するために説得力のある理由がない限り、代わりに手動で参照を使用します。

なぜですか? DBREFはデータベースとコレクションの名前をエンコードするため、アプリケーションでのハードコーディングが少なくなるため、より使いやすいように見えます。さらに、DBREFはa standard format that many drivers understandです。

この質問は、まったく同じ関連ではなく、:

MongoDB - is DBREF necessary?

その質問への答えは埋め込む/非正規化がリンクに好ましいことであるが、それはなぜマニュアルの質問に答えていませんDBREFよりもリンクが好ましい。

+2

要するに、ドキュメントのサイズを膨らませるすべての単一のDBRefに同じコレクション名を格納することになるので、ほとんどの状況では過剰な処理になるからです。 – JohnnyHK

+0

@ JohnnyHK、それは良い点ですが、WiredTigerストレージエンジンを使用している場合は適用されない可能性があります。https://www.mongodb.com/blog/post/new-compression-options-mongodb-30 –

答えて

1

ここで私が見たすべての結論。 DBRefを使用して

join操作ではありません、それは自動的に二回以上照会します、あなたはこのコレクションフィールドに持っているどのくらいDBRefに依存します。

モデルに10 DBRefというコレクションがあると仮定すると、10個の要素のリストをクエリし、これらのうちの1つをとします。クエリを実行すると、MongodbはDBRefが必要な場合でも、101(1 + 10*10)クエリを自動的に実行します。これらのフィールドを手動で照会する場合は、ほんのわずかのコーディングと、11(1 + 1*10)の照会が必要です。

だから、あなたはどう思いますか?

+0

正しい発音を納得させる私が確認することができる限り、あなたはこの情報のソースまたは確認方法の例を持っていますか? –

+0

まあ、今すぐテストされています。私はmongodbでプロファイリングを有効にし、クラスBの3つの 'DBRef'フィールドを持つクラスAのすべてのクエリを作成します。クエリは4Aを返します。ログでは、コレクションAに1クエリ、コレクションBに12クエリを表示します。自分でテストすることはできますが、ロギングメッセージをコメントに貼り付けるのは難しいです。 – Kroderia

+0

さらに、 'spring-boot-startter-data-mongodb'のロギングでは、1つのクエリしか表示されません。 – Kroderia

関連する問題