2016-10-16 5 views
1

私はデータベースで作業するのが初めてで、NoSQLとMySQLの違いについて学びました。私はユーザーが自分のカレンダーに入れるイベントを作成できるようにするWebアプリケーションを構築しています。MongoDBデータベースをどのように整理すればよいですか?

今、ユーザー名とパスワードのコレクションと、イベントを格納する各ユーザーのコレクションがあります。しかし、NoSQLの詳細を読むと、代わりにすべてのイベントのコレクションを用意し、各ユーザーのイベントを1つのドキュメントに保存する必要があるようです。だから、データベースには2つのコレクションがあり、1つはユーザー名用、もう1つはイベント用です。これはもっと理にかなっているようですが、大規模な文書を含む非常に大きなイベントの収集に終わるでしょう。

ここでベストプラクティスは何ですか?私は多くのMongoDBの例を見てきましたが、たいていは、1つのコレクションで単純なデータベースを表示するだけです。

答えて

0

MongoDBの効果的なモデリングはあまり明らかではありません。決定的な応答はほとんどありませんが、私はあなたにいくつかのヒントを与えようとします。

NoSQLデータベースの一般的な原則は、作成しようとしている要求に応じてデータをモデル化することです。すべてのイベントのリストを取得する必要がある場合は、すべてのイベントを一意のドキュメントに格納する方がはるかに効率的です。特定のユーザーのすべてのドキュメントのリストを取得する必要がある場合は、そのユーザーを説明するドキュメントにイベントリストを格納します。これにより、いくつかのデータを複製する可能性があります。各ユーザー文書にすべてのイベントのリストとイベントのリストの両方を持つことができます。

その後、通常のdilemmnaが来る:あなたは別のドキュメントに格納されているイベント、単に参照の上、ユーザーを記述し、各文書の完全なイベントの説明をembedd必要がありますか?

もう一度、リクエストを行う方法によって異なります。イベントを更新する必要がある場合は、変更できないプロパティ(一部)のみをユーザードキュメント(少なくともID)に埋め込むことをお勧めします。イベントが不変で、この特定のユースケースにある可能性が高い場合、イベントの説明全体をユーザー文書に組み込むことができます。または、少なくともユーザーを読み込むときに便利なイベント記述のすべてのフィールド。

サイズを考慮して、制限事項はMongoDB's documentationに記載されています。

+0

NoSQLの背後にある原則は私の要求に従うことだと認識していますが、ユーザーコレクションは例外であると考えていました。パスワード、セッションクッキーなどを保存している場合 –

+0

私の考え方は、私が上で説明した一般的な規則に従います。パスワードとセッションのデータは更新する必要があるため、複製しない方がよいでしょう。 ==>それらをユーザー文書に含めるとともに、この文書にもイベントのリスト(または単にイベントID)を格納してください。 –

関連する問題