node.js - Facebook 类似 mongodb 中的聊天数据库架构

标签 node.js mongodb chat mongodb-query facebook-chat

我正在node.js中规划一个TCP/IP聊天服务器,我想包含Facebook/gmail聊天的几乎所有功能。

我对数据库架构有两个想法 -

第一 -

1)当用户1开始与用户2和用户3聊天时,我将在数据库中检查这些用户之前是否聊天过(是否为这些用户创建了任何房间?)如果没有,那么我将为这些用户创建一个房间.

2)我会将聊天消息保存在消息集合中,并将每个聊天消息保存在单独的文档中,我正在考虑保存与聊天消息相关的这些详细信息 消息 发件人用户 房间 时间戳 附件

此方法存在问题 -

1)我检查 user1、user2 和 user3 之前是否聊天过(之前是否为这些用户创建过任何房间)的方式在查询中需要“$all”,这很慢并且可扩展性不强(请参阅我之前的问题 - Search in Array in mongodb )。这个搜索有更好的方法吗?

第二 -

1) 当 user1 开始与 user2 和 user3 聊天时,我将为此聊天创建一个集合(房间的软体),并在该集合中将聊天消息保存在文档中

此方法存在问题 -

1)我应该如何决定集合名称?我应该将其命名为“user1,user2,user3”吗? 2) 我如何检查是否已经为 user2、user3、user 1 创建了集合(房间),因为“user1,user2,user3”与“user2,user3,user1”不同?

我也在寻找更多的想法,因为我对我的方法并不完全满意。巨头(Facebook、Gmail)如何设计他们的数据库架构以实现最大性能和可扩展性?

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

最佳答案

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

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

使用 JavaScript 和 jQuery 进行专业 XMPP 编程一书提供了 XMPP 标准应用的精彩示例。

关于node.js - Facebook 类似 mongodb 中的聊天数据库架构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19161806/

相关文章:

javascript - 使用ES6导入/导出时nodejs中 'this'的含义

node.js - 从 Google Compute Engine 外部访问 Node.js 服务器

ajax - Long Poll 和 IE 的 XDomainRequest 对象

html - 带有 CSS 的聊天窗口

arrays - 按 $lookup 字段排序

node.js - 如何使 Node process.stdout.on 流中的数据全局可访问?

javascript - 如何使用 Meteor 按 ID 从另一个集合中的文档返回文档属性?

ios - 将图像从 Parse 移至 S3 AWS

node.js - LocalHost 和 MongoDB

android listview 在顶部加载以前的帖子按钮