【问题标题】:Facebook like chat database schema in mongodbFacebook 喜欢 mongodb 中的聊天数据库模式
【发布时间】:2013-10-10 07:20:18
【问题描述】:

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

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

第一 -

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

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

这种方法的问题 -

1) 我检查 user1、user2 和 user3 之前是否聊天的方式(之前是否为这些创建了任何房间)在查询中需要“$all”,这很慢而且没有太大的可扩展性(请参阅我之前的问题 - @ 987654321@)。这个搜索有没有更好的方法?

第二-

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

这种方法的问题 -

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

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

如果有任何帮助,我将不胜感激。

【问题讨论】:

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


    【解决方案1】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2011-05-25
      • 2012-10-09
      • 2011-05-21
      • 1970-01-01
      • 2011-03-06
      • 2015-04-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多