2012-02-17 8 views
1

私はというコレクションを1つ持っています。を訪問しています。その中に訪問のリファラー、ページ、キーワード、日付などの情報が保存されています。Mongoのコレクションの使い方

だと思います。キーワードは、それ自身のコレクションと見なすことができます。Pageの場合も同じです。 これは私に別のコレクションを作成させることになりますが、これが正しい方法であるかどうかはわかりません。

伝統的なDBモデルでは、それらはFKに接続された別のテーブルに明確に格納されます。

  • しかし、mongoについてはどうですか?
  • キーが異なるドキュメントに対して同じ値を何度も繰り返し、この場合はコレクションを作成することをお勧めしますか?
+0

どのような種類のクエリを実行する必要がありますか?ドキュメントを更新しますか?どのデータが「キーワード」と「ページ」であるか。これが単にテーブルのアクセスログタイプの場合、1つのコレクション「訪問」がうまくいくように見えます(キーワードとページ2つの文字列フィールド、キーワードはおそらく配列です)。 – Thilo

+0

私はキーワード名、ページ名などに基づいてレポートを作成します。私は更新をしません。キーワードは訪問に固有のキーワードです。 – danidacar

+0

私のデータ複製はnoSQLで許可されていると思いますか? – danidacar

答えて

3

MongoDBの利点の1つは、ドキュメントを埋め込むことができる点です。

Visitsコレクション内のドキュメントには、KeywordとPage Sub-Documentsが含まれているのが妥当です。

大雑把に言えば、スピードのために文書を埋め込み、一貫性のために文書を正規化します。

訪問文書にキーワードとページのドキュメントを埋め込むと、アプリケーションはすべての関連情報を取得するために1つのクエリを作成するだけで済みます。 (速度)

しかし、キーワードやページの情報が更新された場合、表示される他のすべての訪問文書で更新する必要があるという欠点があります。多くの異なる訪問ドキュメントが同じキーワードとページのドキュメントに依存する場合、特に頻繁に変更される場合は、別のコレクションに保存する方が良い場合があります。 (一貫性)

これはもちろん一般化であり、最終的にはアプリケーション開発者が自分の状況に最も適したものを決めるのはあなた次第です。あなたはまた、記事「MongoDBのデータモデリングとRailsは」有益であることを見つけるかもしれ http://www.mongodb.org/display/DOCS/Schema+Design

モンゴドキュメント名称「スキーマ設計」にリンクに対する埋め込みに関する追加情報があります: http://www.mongodb.org/display/DOCS/MongoDB+Data+Modeling+and+Rails 例は、Railsの中で与えられているが、ドキュメント設計に関する理論はどの言語にも適用されます。

幸運を祈る!

関連する問題