2016-07-23 10 views
0

ノードとMongoDBを使用して不動産アプリケーションを構築しています。私は2つの主要なモデルMongoDBで文書を分割する場合

  • プロパティ

私は別の都市の収集とプロパティのための1つを作成する必要がある場合、私は知らないので、私は今、混乱していますがあります。それとも都市の下にすべての物件を置くべきですか?

私はアプリケーションが大きくなると思うので混乱しています。大都市は巨大な文書になります。これは設計の決定が最初に行われるべきです。

このような状況に対応するためのベストプラクティスの方法がある場合は、教えてください。

+0

両者の関係は何ですか、どのような操作(読み込み/書き込みを)あなたが最も頻繁にこのデータに対して実行する予定ですか? –

+0

@AndriySimonov各プロパティは1つの都市を持っています。私は市内中心部の座標を取得するために都市を使用するつもりです – Othman

+0

@オスマン、どのように多くのプロパティは、都市を持つことができますか?数千人以上?どのような情報が市の医者にありますか?都市や物件のサンプルを提供することができます – zeugor

答えて

1

すべてのプロパティは都市を1つしか持たないため、これは1対多の関係です。この場合、多くのオプションがあります。

まず、ドキュメントごとに16 MBのドキュメントサイズの制限を覚えておいてください。それで、「どれくらいの大きさ」がどれだけ大きいのですか。都市あたりのプロパティはいくつですか?

  • ワン・ツー・少数(わずか数百): "1"(市)で "数"(プロパティ)を埋め込みます。

  • 1対多(2万以上):子参照。 "1"(都市)ドキュメントの配列内の "多数"(プロパティ)ドキュメントのObjectID。

  • 1対0キ:親参照。 "1"(都市)のObjectIdを "多数"(プロパティ)ドキュメントに格納します。

第2に、更新に対する読み取りの比率が高い場合、非正規化を検討することができます。より効率的なクエリを得るために、より遅く複雑な更新の価格を支払う。

提案されている解決策:1つのコレクション(プロパティ)しか持たず、文書に都市の文書を埋め込みます。 おそらく、都市別のプロパティを取得する予定ですが、都市フィールドにインデックスを作成することを忘れないでください。

推薦記事:

http://blog.mongodb.org/post/87200945828/6-rules-of-thumb-for-mongodb-schema-design-part-1 http://blog.mongodb.org/post/87892923503/6-rules-of-thumb-for-mongodb-schema-design-part-2 http://blog.mongodb.org/post/88473035333/6-rules-of-thumb-for-mongodb-schema-design-part-3

+0

唯一の問題は、新しいプロパティが作成されたときに、どこかから都市のデータを取得する必要があることです。 – Othman

+0

2つのコレクション「都市」と「プロパティ」を持ち、また、都市のドキュメントが頻繁に更新されない場合は、プロパティを挿入するときに非正規化して、有用な都市フィールドのみを取得し、それらをプロパティdocに埋め込みます。有用な、私は都市info'dがプロパティのドキュメントを取得するときに持っていることがいいことを意味します。このように、プロパティーの検索には、必要なすべての情報がアプリケーションレベルの結合なしで保持されます。 – zeugor

0

市の中心座標は非常に頻繁に変更されないと仮定します。市の文書があまり大きくなく、財産を読むたびに情報が必要な場合、都市をプロパティに埋め込むことは可能です。一方、都市を別のコレクションに入れ、プロパティからリンクすることができます。最後に、都市に関する最も有用な情報をプロパティへのリンク(混在アプローチ)とともに埋め込むことができます。不動産に都市を埋め込むと、重複が導入されますが、読み込みパフォーマンスが向上する可能性があります。最も適切なオプションを選択するには、アプリケーションが最も頻繁に行う読み取り/書き込み要求を理解する必要があります。