SQL が同じロジックに外部キーを使用する場合と比較して、ドキュメント内にオブジェクトを埋め込む MongoDB の機能に特別な利点はありますか?
唯一の利点は使いやすさ (そしておそらくパフォーマンス?) であり、それでさえ簡単に抽象化できるように思えます (たとえば、Django は SQL の外部キーを非常に直感的に処理するようです)。
SQL が同じロジックに外部キーを使用する場合と比較して、ドキュメント内にオブジェクトを埋め込む MongoDB の機能に特別な利点はありますか?
唯一の利点は使いやすさ (そしておそらくパフォーマンス?) であり、それでさえ簡単に抽象化できるように思えます (たとえば、Django は SQL の外部キーを非常に直感的に処理するようです)。
これは、埋め込むかどうかという古典的な問題に要約されます。
詳細を説明する前に、いくつかのリンクを紹介します。
より具体的に答えるために。
SQL: JOIN でのサーバー側の外部キーの使用法を覚えておく必要があります。埋め込みは、1 つのドキュメントで必要なすべてのデータを取得するための 1 回の往復ですが、結合はそうではありません。実際には、範囲に基づいて 2 つの選択が行われ、重複を除外するためにマージされます (一部のデータ セットではかなりのオーバーヘッドがあります)。
したがって、外部キーの使用は完全にアプリに依存するわけではなく、サーバーとデータベースにも依存します。
そうは言っても、MongoDB への埋め込みを誤解して、すべてのデータを 1 つのドキュメントに収めようとする人もいます。残念ながら、これは、常にすべてを埋め込むようにする必要があるという一般的な知識によって補強されています。リンクなどは、これに関するいくつかの役立つガイドを提供します。
JOIN を介した埋め込みの主な長所は次のとおりです。
ただし、埋め込みにはいくつかの欠点があります。
post
ありcomments
ませuser
んposts
。そのため、MongoDB の埋め込みを正しく使用すると、SQL 結合よりも大きな力になる可能性がありますが、正しく使用するタイミングを理解する必要があります。
Mongo の中核となる強みは、データのドキュメント ビューにあり、当然、これはデータの "POCO" ビューに拡張できます。.NET の NoRM プロジェクトのような Mongo クライアントは、経験豊富な Fluent NHibernate ユーザーと驚くほど似ているように見えますが、これは偶然ではありません。POCO データ モデルは単純に BSON にシリアル化され、Mongo に 1:1 で保存されます。マッピングは必要ありません。
全体として、これら 2 つのテクノロジの最大の違いは、モデルと、開発者がデータについて考える方法です。Mongo は、迅速なアプリケーション開発に適しています。