【发布时间】:2012-06-29 00:16:38
【问题描述】:
我正在思考一个用于处理消息应用程序的良好文档结构。
我基本上需要三种(或四种)对象:
- 用户(用户名、电子邮件、密码等)
- 联系人列表(包含不同的联系人或联系人组)
- 对话(对话是一些人之间的信息集合)
- 消息(包含消息正文、一些时间戳和创建者。)
我的想法是将联系人嵌入到用户文档中,并将消息嵌入到对话文档中:
1.用户
{
username: 'dev.puS',
usernameCanonical: 'dev.pus', // used for unique constraints
email: 'developement.pus@gmail.com,
emailCanonical: 'developement.pus@gmail.com,
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?我有点不确定对“非结构化”对象执行大量写入操作
标签: mongodb database-schema bson