2

我正在 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)如何为其数据库架构实现最大性能和可扩展性?

任何帮助我都会非常感激。

4

1 回答 1

3

大巨头(Facebook、Gmail 等)并不是从零开始设计他们的聊天系统的。他们的聊天系统是围绕XMPP 标准构建的。如果您遵循此标准,您可以使用现有的、健壮且经过良好测试的聊天服务器,例如ejabberdopenfire此处为其他)。对于高级应用程序,这些服务器允许您开发扩展(模块或组件)。

您只需要编写客户端代码。对于网络浏览器,您可以使用Strophe库。

Professional XMPP Programming with JavaScript and jQuery 》一书有很好的 XMPP 标准应用示例。

于 2013-10-28T06:49:04.140 回答