mongoでデータをモデル化するのに助けが必要です。私の経験のほとんどはリレーショナルDBでしたが、mongoを使って始めたばかりです。さまざまなイベントのデータをモデリングしています。
- の各「イベント」には同じフィールドがあります。
- 各「イベント」には、数百から数百万のドキュメント/行があります
- イベントは動的です。つまり、必要に応じて新しいイベントが作成されます。つまり、新しい「2016年夏季オリンピック」イベントを作成するかもしれません。
おそらく最も重要なのは、イベント(CRUD操作)を処理するときに、ユーザーがイベント名を指定する必要があることです。
これまでのところ、これを行うにはいくつかの方法がありますが、データモデルを「間違った」方法で設定する際に大きな間違いを犯したくありません。
1)すべてのイベントのデータを含む1つの「イベント」コレクション。'イベント'名のインデックス。クエリは次のようになります。
db.events.find({event: 'Summer Olympics 2012');
{event: 'Summer Olympics 2012', attributes: [{name: 'joe smith', .... }
{event: 'Summer Olympics 2012', attributes: [{name: 'jane doe', .... }
{event: 'Summer Olympics 2012', attributes: [{name: 'john avery', .... }
{event: 'Summer Olympics 2012', attributes: [{name: 'ted williams', .... }
db.events.find({event: 'Summer Olympics 2013'})
{event: 'Summer Olympics 2013', attributes: [{name: 'steve smith', .... }
{event: 'Summer Olympics 2013', attributes: [{name: 'amy jones', .... }
2)すべてのイベント名を追跡するためのコレクション付きの新しいイベントごとのコレクション。各イベントは異なるコレクションに格納されるため、イベント名のインデックスは必要ありません。
// multiple collections, create new as needed
db.summer2012.find() // get summer 2012 docs
db.summer2016.find() // get summer 2016 docs
//'events' collection
db.events.find() // get all events that I would have collections for
{name: 'summer2012', title: 'Summer Olympics 2012'};
{name: 'summer2016', title: 'Summer Olympics 2016'};
#1の場合、100のイベントに到達すると、イベントの1つに500のドキュメントしかない場合でも、「イベント」ごとのルックアップが遅くなることが少し心配です。
#2の場合、毎回新しいコレクションを作成してイベントが発生することで、ここでmongoモデルを「幅木」にしますか?
どちらがより良いパフォーマンスになるのか、またはどちらかが将来さらにトラブルに巻き込まれるのかどうかは本当にわからないので、コメント/アイデアは大歓迎です。私は(mongoのサイトを含めて)周りを見回しましたが、具体的な答えは本当に見つかりません。