2012-06-27 14 views
12

メッセージアプリケーションを扱うための良い文書構造について考えています。 (別の連絡先または連絡先のグループを含む)MongoDBメッセージアプリケーションの構造

  1. ユーザー(ユーザー名、電子メール、パスワードなど)
  2. 連絡先リスト:

    は、私は基本的にオブジェクトの3(または4)の種類を必要とします

  3. 会話(会話が一部の人の間でのメッセージの集まりである)
  4. メッセージは(メッセージ本文、いくつかのタイムスタンプと作成者が含まれています。)

私の考えでは、ユーザーのドキュメントに連絡先を埋め込むために、会話の文書にメッセージを埋め込むことだった:

1.ユーザー

{ 
    username: 'dev.puS', 
    usernameCanonical: 'dev.pus', // used for unique constraints 
    email: '[email protected], 
    emailCanonical: '[email protected], 
    salt: 'some hash', 
    password: 'hash with salt', 
    logs: { last_login: 12.06.2008, last_password_reset: 04.03.2007 }, 
    state: { online: true, available: false }, 
    contacts: [ user_id1, user_id2, user_id3 ] 
} 

2.会話

{ 
    members: [ user_id1, user_id2 ], 
    messages: [ 
     { author: user_2, body: 'Hi what's up' }, 
     { author: user_1, body: 'Nothing out here :(' }, 
     { author: user_2, body: 'Whanna ask some question on stackoverflow' }, 
     { author: user_1, body: 'Okay, lets go' } 
    ] 
} 

このスキーマについてどう思いますか?

各ドキュメントの更新頻度が異なるため、ドキュメントを個別に保つ方が良いと思います。いくつかのアドバイスを聞いて良いでしょうので、しかし、私は実際にそれについての経験を持っていない:)

よろしく

+2

MongoDBのスキーマを探しますが、それ自体で「良い」または「悪い」ことはありません。あなたはあなたがしようとしているクエリと更新を詳細にする必要があります。指定されたスキーマがこれらの操作パターンに合っているかどうかを評価することができます。 –

+1

また、データサイズの分布を見積もる必要があります。たとえば、会話に含まれるメッセージの平均数は最大ですか?これは、埋め込みたい場合には重要です。 –

+0

さて、これを念頭に置いておきます。セッションが終了すると、例えばredisのメッセージをキャッシュして、すべてをmongoに保存するのが一般的なアプローチですか?私は、「構造化されていない」オブジェクトにたくさんの書き込みアクションを実行することについて少しは確信していません。 –

答えて

4

あなたの質問は本当にスキーマ設計の一つです。 http://www.mongodb.org/display/DOCS/Schema+Design

また、そのドキュメントの「参照」セクションのリンクを確認することをお勧めします。MongoDBスキーマ設計のこのページでは、選択肢とトレードオフを理解することをお勧めします。特にビデオプレゼンテーションをお勧めします。 http://docs.mongodb.org/manual/use-cases/storing-comments/

7

私はこの質問であることを参照してください。

最後に、あなたはおそらく、メッセージングのための3つの可能なスキーマの議論/各デザインのためのトレードオフを含め、データベースのコメントについては、この文書を見てみる必要があります古いが、興味のある人のために、同様の質問を頼まれたと1つの答えが生きhttps://stackoverflow.com/a/30830429/132610

Conversation : { 
id: 123, 
members: [ user_id1, user_id2 ] 
} 
Message { conversationId: 123, author: user_2, body: 'Hi what's up' } 
Message { conversationId: 123, author: user_1, body: 'Whanna ask some question on stackoverflow' } 
+0

あなたは(そして他の誰もが)「会話」のコレクションと「メッセージ」の別のコレクションを言っていました。「メッセージ」テーブルは何十億もの文書に達するかもしれませんし、mongodbはそのような大きなコレクションを管理する能力を持っていますか、そして検索応答時間はどうでしょうか? 1億人のメッセージで最後の100個のメッセージを検索すると、どのくらいの時間がかかりますか? –

関連する問題