我计划在node.js中建立一个TCP/IP聊天服务器,我想包括几乎所有Facebook/gmail聊天的功能。
我有两个关于数据库模式的想法-
First -
1)当user1开始与user2和user3聊天时,我将检查这些用户以前聊天过的数据库(是否有为这些用户创建的空间?)如果没有,我将为这些用户创建一个房间。
2)我将把聊天消息保存在消息集合中,并将每个聊天消息保存在一个单独的文档中,我正在考虑保存这些与chat sender_user房间时间戳附件相关的细节
不同意这种方法-
1)我检查user1、user2和user3之前是否有过聊天(之前是否有为它们创建的空间)在查询中需要"$all“,这很慢,并且没有很大的可伸缩性(请参阅我之前的问题-- mongodb中的数组搜索 )。这次搜索有什么更好的方法吗?
Second -
1)当user1开始与user2和user3聊天时,我将为这个聊天创建一个集合(一个房间的软部分),在这个集合中,我将将聊天消息保存在文档中
不同意这种方法-
( 1)如何决定收藏名称?我应该把它命名为"user1,user2,user3“吗? 2)如何检查已经为user2、user3、用户1创建的集合(房间),因为"user1,user2,user3”与"user2,user3,user1“不一样?
我也在寻找更多的想法,因为我不完全满意我的做法。大型巨头(Facebook、Gmail)如何使用数据库模式来实现最大的性能和可伸缩性?
任何帮助我都会非常感激的。
发布于 2013-10-28 06:49:04
大公司(Facebook、Gmail等)并不是从零开始设计聊天系统的。他们的聊天系统是围绕着XMPP标准构建的。如果您遵循这个标准,您可以使用现有的、健壮的、经过良好测试的聊天服务器,例如埃贾伯德或开火 (其他人在这里)。对于高级应用程序,这些服务器允许您开发扩展(模块或组件)。
您只需编写客户端代码即可。对于web浏览器,您可以使用节拍库。
使用JavaScript和jQuery编写的专业XMPP编程有很好的XMPP标准应用实例。
https://stackoverflow.com/questions/19161806
复制相似问题