メッセージアプリケーションを扱うための良い文書構造について考えています。 (別の連絡先または連絡先のグループを含む)MongoDBメッセージアプリケーションの構造
- ユーザー(ユーザー名、電子メール、パスワードなど)
- 連絡先リスト:
は、私は基本的にオブジェクトの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' }
]
}
このスキーマについてどう思いますか?
各ドキュメントの更新頻度が異なるため、ドキュメントを個別に保つ方が良いと思います。いくつかのアドバイスを聞いて良いでしょうので、しかし、私は実際にそれについての経験を持っていない:)
よろしく
MongoDBのスキーマを探しますが、それ自体で「良い」または「悪い」ことはありません。あなたはあなたがしようとしているクエリと更新を詳細にする必要があります。指定されたスキーマがこれらの操作パターンに合っているかどうかを評価することができます。 –
また、データサイズの分布を見積もる必要があります。たとえば、会話に含まれるメッセージの平均数は最大ですか?これは、埋め込みたい場合には重要です。 –
さて、これを念頭に置いておきます。セッションが終了すると、例えばredisのメッセージをキャッシュして、すべてをmongoに保存するのが一般的なアプローチですか?私は、「構造化されていない」オブジェクトにたくさんの書き込みアクションを実行することについて少しは確信していません。 –