我正在 node.js 中计划一个 TCP/IP 聊天服务器,我想包含 Facebook/gmail 聊天的几乎所有功能。
我对数据库架构有两个想法 -
第一的 -
1)当 user1 开始与 user2 和 user3 聊天时,我将检查这些用户之前聊天的数据库(是否为这些用户创建了任何房间?)如果没有,那么我将为这些用户创建一个房间。
2)我会将聊天消息保存在消息集合中,并将每个聊天消息保存在单独的文档中,我正在考虑保存与聊天消息消息发送者_用户房间时间戳附件相关的这些详细信息
这种方法的问题 -
1)我检查 user1、user2 和 user3 之前是否聊天的方式(之前是否为这些创建了任何房间)在查询中需要“$all”,这很慢并且没有太大的可扩展性(请参阅我之前的问题 - Search in Array in蒙哥达)。这个搜索有没有更好的方法?
第二 -
1)当 user1 开始与 user2 和 user3 聊天时,我将为该聊天创建一个集合(房间的软),并在此集合中将聊天消息保存在文档中
这种方法的问题 -
1)我应该如何决定收藏名称?我应该将其命名为“user1,user2,user3”吗?2) 我将如何检查是否已经为 user2、user3、user 1 创建了集合(房间),因为 "user1,user2,user3" 与 "user2,user3,user1" 不同?
我也在寻找更多的想法,因为我对我的方法并不完全满意。大型巨头(Facebook、Gmail)如何为其数据库架构实现最大性能和可扩展性?
任何帮助我都会非常感激。