2013-10-03 32 views
2

我正在计划node.js中的TCP/IP聊天服务器,并且我想包括Facebook/gmail聊天的几乎所有功能。Facebook喜欢mongodb中的聊天数据库模式

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

首先 -

1)当用户1开始与用户2和用户3聊天我会检查的是这些用户之前已经聊数据库(有没有为这些用户创建空间?)如果不是,那么我会为这些用户创建一个空间。

2)我会保存聊天消息中收集在一个单独的文件每个聊天味精的消息,我想保存这些细节与聊天味精味精 sender_user 房间 时间戳 附件

问题与这种方法 -

1)我检查如果用户1,用户2和用户3之前聊过(是否有任何空间创建这些之前)在查询中需要“$全部”,这是缓慢的,并没有太大的可扩展性看到我以前的问题 - Search in Array in mongodb)。这个搜索有没有更好的方法?

二 -

1)当用户1开始与用户2和用户3我会为这个聊天创建一个集合(软一间),并在此集合,我会保存在文档

聊天聊封邮件

问题与这种方法 -

1)我应该如何决定收集名称?我应该将它命名为“user1,user2,user3”吗? 2)我将如何检查由于“user1,user2,user3”与“user2,user3,user1”不同而已为user2,user3,user 1创建的收藏(房间)?

我也在寻找更多的想法,因为我不完全满意我的方法。大型巨头(Facebook,Gmail)如何执行其数据库架构以实现最佳性能和可伸缩性?

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

回答

3

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

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

该书使用JavaScript和jQuery进行专业XMPP编程提供了XMPP标准应用的绝佳示例。