0

私はMongoDBを初めて使用し、RDBMSを何年も使用しています。

とにかく、私が次のコレクションを持っているとしましょう:

全米リアルター協会加入者
 多くの:ブックマーク
 キー:name


住宅
 キー:アドレス、文字列
 キー:bathrooms、整数


プロパティ
 キー:アドレス、文字列
 キー:landtype、文字列


ブックマーク
 キー:メモ

全米リアルター協会加入者が家や不動産をブックマークできるようにしたいと思います。家とプロパティはスタンドアロンであり、不動産業者やブックマークについては何も知らないことに注意してください。ブックマークをMySQLの「結合テーブル」のようなものにしたいと思います。

家/プロパティは別のソースからのものであるため、変更することはできません。

Railsでこれを実行できるようにしたいと思います。

r = Realtor.first r.bookmarksは私に与えるでしょう:

House1 House2PropertyABCPropertyOO1など..

何千もの家と財産があります。

これがRDBMSの目的であることに気づきました。しかし、私がMongoDBを使用している理由はいくつかあるので、これを機能させたいと思います。

このようなことを行う方法についての提案をいただければ幸いです。

ありがとう!

4

1 に答える 1

2

OK、まず最初に。これがRDBMSであるかのようにデータを構造化しました。逃げ出し、「結合テーブル」を作成したこともあります。あたかもそのようなものがMongoで役立つかのようです。

あなたの質問に対する簡単な答えは、与えられた「ブックマーク」をロードするために「最初に」を再定義する必要があるということです。$in句を使用した「サーバー側」または大きなforループを使用した「クライアント側」のいずれか。

したがって、データに関する2つの大きな質問:

  1. ブックマークが完全に全米リアルター協会加入者に属している場合、なぜそれらは独自のコレクションに含まれているのですか?
  2. 全米リアルター協会加入者が家と財産をブックマークできるのなら、なぜこれらは異なるコレクションにあるのですか?これは不必要な合併症ではありませんか?ブックマークにRealtor.firstのようなものが必要な場合は、なぜそれらを別のコレクションに入れるのですか?

Realtorsコレクションは、おそらく次のようなアイテムで構成されている必要があります。

{"name":"John", "bookmarks": [ 
   {"h":"House1","notes":[{"Nice location","High Ask"}] },
   {"p":"PropertyABC","notes":[{"Haunted"}] }
] }

家のIDと物件のIDの「h」と「p」をどのように区別したかに注意してください。あなたが私の次の提案をとるなら、あなたはそれさえ必要としないでしょう。

これをさらに一歩進めて、「場所」など、同じコレクションに家とプロパティが必要になる場合があります。「場所」コレクションでは、すべての家とプロパティを詰め込み、「type」:「house」または「type」:「property」でマークします。次に、「タイプ」フィールドにインデックスを付けます。

なんで?「最初の」メソッドを作成すると、クエリが非常に簡単になります。「ブックマーク」をループして、「Locations」コレクションから適切なキー(「House1」、「PropertyABC」)を取得するだけです。ページングは​​簡単です。10個のアイテムをクエリしてから戻ります。

あるレベルでは、それはちょっと足りないように思えます。 "データを取得するためにforループを作成するのはなぜですか?15年前にそれをやめようとしました! "しかし、Mongoは「ドキュメント指向」のストアであるため、個々のドキュメントの読み込み。大量のドキュメントを読み込もうとしているので、この小さなフープを飛び越えなければなりません。

幸いなことに、それはすべて悪いわけではありません。Mongoは、個々のドキュメントの読み込みが非常に高速です一度に10個のアイテムをフェッチするクエリを実行すると、それでも非常に高速になります。

于 2010-05-24T06:26:44.590 に答える