我正在考虑处理消息应用程序的良好文档结构。
我基本上需要三种(或四种)对象:
我的想法是将联系人嵌入到用户文档中并将消息嵌入到对话文档中:
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' }
]
}
您对此架构有何看法?
我认为最好将它们分开(因此每个文档都是自己的),因为每个文档都有不同的更新频率。但我真的没有任何经验,所以听听一些建议会很好:)
此致
答案 0 :(得分:11)
我看到这个问题已经过时了,但是对于任何有兴趣的人,都会提出类似的问题并且一个答案看起来可行[{3}}
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' }
1)可扩展性:MongoDB可以很好地扩展到非常大的集合。每个集合数十亿条消息。有一种称为分片的技术可以让您将更大的集合拆分为多个节点。
2)阅读。由于MongoDB具有索引机制,因此读取与任何微调数据库引擎相当。所以阅读不会成为问题。特别是,当会话(组室)具有较少的参与者时,例如两个人彼此消息传递。
答案 1 :(得分:4)
您的问题实际上是架构设计之一。我建议看一下MongoDB架构设计的这个页面,以了解选择和权衡:http://www.mongodb.org/display/DOCS/Schema+Design
此外,您应该查看该文档“另请参阅”部分中的链接。我特别推荐视频演示。
最后,您应该查看本文档,讨论消息/评论数据库的三种可能模式,包括每种设计的权衡:http://docs.mongodb.org/manual/use-cases/storing-comments/
答案 2 :(得分:0)
这是我的建议
{
"_id" : ObjectId("5a9e9581a2147c0c0f00002e"),
"id_members1" : "5a9e9581a2147c0c0f02345t",
"id_members2" : "5a9e9581a2147c0c0f02134g",
"name" : [
"Omar",
"Mohamed"
],
"messages" : [
{
"author" : "Omar",
"body" : "salam 3likom",
"create_at" : ISODate("2018-03-07T09:04:04.000Z")
},
{
"author" : "Mohamed",
"body" : "Wa3likom salam",
"create_at" : ISODate("2018-03-07T09:04:04.000Z")
},
{
"author" : "Mohamed",
"body" : "wach teshak",
"create_at" : ISODate("2018-03-07T09:04:04.000Z")
},
{
"author" : [
"Omar",
"Mohamed"
],
"body" : "test msg",
"create_at" : ISODate("2018-03-25T15:30:05.000Z")
}
],
"comments" : [
null,
{
"author" : [
"Omar",
"Mohamed"
],
"body" : "test msg",
"create_at" : ISODate("2018-03-25T15:28:11.000Z")
},
{
"author" : [
"Omar",
"Mohamed"
],
"body" : "test msg",
"create_at" : ISODate("2018-03-25T15:28:31.000Z")
}
]
}
答案 3 :(得分:0)
请找到我的建议
Person : {
person_id: '123',
last_login: 12.06.2008,
online: true
}
Conversation : {
conversation_id: append the greater person_id to the lower person_id, // person_1_id =123 and person_2_id =124 then its 123124
messages: [
{ message_id: 1,
message_text : 'Hi what's up',
sender_id : 123,
receiver_id: 124,
timestamp : 12344567891
},
{ message_id: 2,
message_text : 'fine',
sender_id : 124,
receiver_id: 123,
timestamp : 12344567891
}
]
}