2012-02-27 3 views
0

私はRavenDBを初めて使いましたが、現在のシナリオのデータをモデル化する最良の方法を考えています。データは次のようになります。各ゲームの開始時にRavenDBでフットボールの試合の統計をモデル化する方法

Game 
- Teams 
    - Team 1 
    - list of players 
    - Team 2 
    - list of players 
- Events 
    - Event 1 
    - type: Pass 
    - teamId 
    - PlayerId 
    - Event 2 
    - type: Goal 
    - teamId 
    - PlayerId 

我々は、ゲームの全体的な情報(例えばチーム、会場など)を取得し、数分ごとに、私たちは、イベントの最新リストを取得します。 また、特定のプレーヤーのデータをクエリできるようにする必要があります(プレーヤーの通過回数など)

私は1つのドキュメントとして保存しますか?イベントを別々のドキュメントに分割しますか? GameEvents? 3番目のシナリオはありますか?

答えて

1

単一のオブジェクトとして保存します。定義した構造は素晴らしいです。次に、実行するさまざまなタイプのクエリのインデックスを定義します。関係を持ってテーブルに分割する必要はなく、RavenのようなドキュメントDBをすばらしいものにするのは、あなたが記述しているものと同じようなシナリオに最適です。

+0

この方法を使用する場合は、*ほとんどの統計情報について、1つのゲームを表すドキュメント全体を読み込み、メモリ内で処理してから文書に書き戻すほうがよいでしょう。複数のゲームにまたがる統計情報については、良い考えのように聞こえるMap/Reduce –

+0

Mattを調べるとよいでしょう。プレーヤーのためにパスを計算したいのであれば、私はゲームのドキュメントを読み込み、計算してもう一度保存するだけです。 – marto

+0

@Matro、これはアイデアだが、これを何度もやっている間にオーバーヘッドがあるので、Patchingが助けになるかもしれない。 http://ravendb.net/docs/client-api/partial-document-updates –

3

これはRavenDBにどのように格納されるのか心配はありません。それはドキュメントデータベースの美しさです。関係を考えないでください。ドメインモデルを作成するオブジェクト指向の方法でドメインモデルを作成します(チームはリスト<プレーヤー>など)、次に必要に応じてエンティティを保存します。

私は、RavenDBの使用中に自分のドメインモデルをどのように純粋に保っていたかについてブログに出てきました。私はそれを公開する必要があります...

**編集** 私はついにそのブログ:http://bit.ly/xUsYJKを公開しました。これは、PrestoがRavenDBの使用中に幾分純粋なドメインモデルを保持した方法を示しています。ところで

は、ダニエル・ラングは、このテーマについての良いブログを持っています

私は何でお互いを参照し、私のドメインエンティティを維持したいので、私は<T>アプローチを含める使用http://daniellang.net/how-to-handle-relations-in-ravendb/

I適切な方法を検討してください。

Danielには、「参考文献を正規化しない」というセクションもあります。一部の人々はその方法を好む。

1

ゲーム中にこのようなイベントがいくつ発生する可能性があるのか​​を考えれば、別個のドキュメントとしてそれらを持っていたいと確信しています。こうすることで、入ってくる各イベントのゲームドキュメントを読み込んで更新する必要がなくなります。ドキュメントが非常に大きくなると、これも非常に高価になります。

ゲームのすべてのイベントで統計情報を取得するには、適切なデータを収集するためのインデックスが必要です。

+0

これは私の元々の考えでした。イベントを伴うゲーム文書は、約1MBのサイズまで成長することができます。イベントを分割すると、サイズは約半分になり、ゲームオブジェクトの残りの部分はあまり頻繁に更新されません。唯一のもう一つのことは、ドキュメントがフットボールの試合全体でのみ更新されることです。そのため、私は1つのドキュメントから始めました。 – marto

+0

多くの書類を持っていることでデメリットはありません。だから、私はゲームの文書にすべてが集まっているという点は見ません。あなたはゲームのドキュメントが1MBになることを知っています - これはかなりです - ゲームのドキュメント全体の読み込みや更新を避けるために、イベントのための別個のドキュメントを用意することをお勧めします。 –

関連する問題