0

SQL が同じロジックに外部キーを使用する場合と比較して、ドキュメント内にオブジェクトを埋め込む MongoDB の機能に特別な利点はありますか?

唯一の利点は使いやすさ (そしておそらくパフォーマンス?) であり、それでさえ簡単に抽象化できるように思えます (たとえば、Django は SQL の外部キーを非常に直感的に処理するようです)。

4

2 に答える 2

3

これは、埋め込むかどうかという古典的な問題に要約されます。

詳細を説明する前に、いくつかのリンクを紹介します。

より具体的に答えるために。

SQL: JOIN でのサーバー側の外部キーの使用法を覚えておく必要があります。埋め込みは、1 つのドキュメントで必要なすべてのデータを取得するための 1 回の往復ですが、結合はそうではありません。実際には、範囲に基づいて 2 つの選択が行われ、重複を除外するためにマージされます (一部のデータ セットではかなりのオーバーヘッドがあります)。

したがって、外部キーの使用は完全にアプリに依存するわけではなく、サーバーとデータベースにも依存します。

そうは言っても、MongoDB への埋め込みを誤解して、すべてのデータを 1 つのドキュメントに収めようとする人もいます。残念ながら、これは、常にすべてを埋め込むようにする必要があるという一般的な知識によって補強されています。リンクなどは、これに関するいくつかの役立つガイドを提供します。

JOIN を介した埋め込みの主な長所は次のとおりです。

  • 片道往復
  • 多くのレベルを深く埋め込まない限り、多くの場合、ドキュメントを簡単に更新できます
  • 関連するエンティティとともにエンティティ データを保持できます

ただし、埋め込みにはいくつかの欠点があります。

  • 値を取得するには、ドキュメントをページインする必要があります。これは、大きなドキュメントでは問題になる可能性があります
  • サブドキュメントは、高度なクエリを必要としないエンティティに固有になるように設計されているため、通常、関連付けられている 2 つの別個のエンティティを取得することはpostありcommentsませuserposts
  • 3 レベルを超える深さのネストは、アトミック ロックなどを使用する能力に影響を与える可能性があります。

そのため、MongoDB の埋め込みを正しく使用すると、SQL 結合よりも大きな力になる可能性がありますが、正しく使用するタイミングを理解する必要があります。

于 2012-12-10T11:11:13.833 に答える
0

Mongo の中核となる強みは、データのドキュメント ビューにあり、当然、これはデータの "POCO" ビューに拡張できます。.NET の NoRM プロジェクトのような Mongo クライアントは、経験豊富な Fluent NHibernate ユーザーと驚くほど似ているように見えますが、これは偶然ではありません。POCO データ モデルは単純に BSON にシリアル化され、Mongo に 1:1 で保存されます。マッピングは必要ありません。

全体として、これら 2 つのテクノロジの最大の違いは、モデルと、開発者がデータについて考える方法です。Mongo は、迅速なアプリケーション開発に適しています。

于 2012-12-10T09:29:50.660 に答える