8

私はこれをできる限り簡単にしようとします。
MySQL から来て、テーブルの観点から考えて、次の例を使用しましょう。

不動産のウェブサイトを運営していて、家のリストを
通常どおり表示しているとします。次のテーブルを使用します。

  • 家 - 手元にある不動産資産
  • owner - 家の所有者 (家との 1 対多の関係)
  • 代理店 - 不動産仲介業者 (住宅との多対多の関係)
  • images - 家屋との多対一の関係
  • レビュー - 家屋との多対一の関係

MongoDB は、リレーショナル データベース (正規化) によく似た一意の ID を持つさまざまなコレクションで Web アプリを設計する柔軟性を提供し、迅速な選択を楽しむために、コレクション、関連するオブジェクト、およびデータ (非正規化) 内にネストできることを理解しています)。

不動産住宅リストに戻ると、通常のリレーショナル DB では、データを入力するために使用されるクエリは非常にコストがかかります。住宅ごとに、その画像、レビュー、所有者、代理店をクエリする必要があり、各エンティティはフィールドを持つ異なるテーブルに存在します。 、おそらく結合を使用し、複数のクエリを1つに結合します-高価です!

MongoDB に入ります - ジョインを必要とせず、家に関連するすべてのデータを家のコレクションの家アイテムに保存できます。
しかし、関連するレビュー/代理店/所有者/画像を追加/更新/削除する必要がある場合はどうなりますか?

これは私にとって謎であり、推測する必要がある場合、関連する各コレクションは家のテーブル内のデータの上に独自のコレクションに存在し、これらの関連データの 1 つが追加/更新/削除されると、独自のコレクションと家のコレクションで更新する必要があります。この更新時に、更新されたすべての関連データでハウス レコードを更新していることを確認するために、他のコレクションにもクエリを実行する必要がありますか?
私はここで推測しているだけであり、あなたのフィードバックを本当に感謝しています.

ありがとう、
アジャール

4

3 に答える 3

3

このアプローチを試してください:

どのエンティティ (または複数のエンティティ) がヒーローであるかを考え出す

「ヒーロー」とは、データベースの中心となるエンティティを意味します。あなたの例を見てみましょう。不動産の例の主人公は家です*。

所有権を計算する

所有者、代理店、画像、レビューなどの他のエンティティを調べて、それらの情報を家と一緒に配置することに意味があるかどうかを自問してください. リレーショナル データベースのいずれかの外部キーに対してカスケード削除を行いますか? もしそうなら、それは所有権を意味します。

データが正規化されていないことが実際に重要かどうかを判断する

複数の家にまたがる代理店 (およびおそらく所有者) の詳細が表示されます。それは問題ですか?

あなたの家のコレクションはおそらく次のようになります。

house: {
owner,
agency,
images[], // recommend references to GridFS here
reviews[] // you probably won't get too many of these for a single house
}

*実際には、それはおそらく家の広告です (家は通常、不動産のウェブサイトで宣伝されており、それがおそらくあなたが本当に興味を持っていることだからです) 。

于 2013-07-13T08:41:25.467 に答える
2

MongoDBの観点から正規化の復習をしたいと思います -

ノーマライゼーションの目標は何ですか?

  • データベースを変更の異常から解放します- の場合MongoDB、データの埋め込みが主にこれを引き起こすようです。MongoDB実際、これらの異常を作成する可能性のあるドキュメントにデータを埋め込まないようにする必要があります。パフォーマンス上の理由から、ドキュメント内のデータを複製する必要がある場合があります。ただし、これはデフォルトのアプローチではありません。デフォルトはそれを避けることです。
  • 拡張時の再設計を最小限に抑える必要があります-MongoDBすべてのドキュメントを再設計することなくキーを追加できるため、十分な柔軟性があります
  • 特定のアクセス パターンに偏らないようにしますMongoDB。その背後にあるアイデアの 1 つは、MongoDB作成しようとしているアプリケーションと解決しようとしている問題に合わせてデータベースを調整することです。
于 2016-08-29T05:52:54.973 に答える
2

Sarah Mei は、nosql データベースのデータ整合性で発生する可能性がある種類の問題について有益な記事を書きました。重複データを使用するか、ID を使用するか、コード ベースの結合を使用するかの選択、およびデータの整合性を維持するための課題。彼女の見解は、コードベースの結合を持つ nosql db は、ある時点でデータの整合性を失うというものです。記事のコメントは、これらの問題と考えられる解決策を理解する上で、記事自体と同じくらい価値があります。

リンク: http://www.sarahmei.com/blog/2013/11/11/why-you-should-never-use-mongodb/comment-page-1/

于 2015-06-06T21:45:06.500 に答える