我正在计划node.js中的TCP / IP聊天服务器,我想要包含Facebook / gmail聊天的几乎所有功能。
我对数据库架构有两个想法 -
首先 -
1)当user1开始与user2和user3聊天时,我会检查这些用户之前聊过的数据库(是否为这些用户创建了空间?)如果没有,那么我将为这些用户创建一个房间
2)我将在消息集中保存聊天消息,并在单独的文档中保存每个聊天消息,我想保存这些与聊天消息相关的详细信息 味精 sender_user 房间 时间戳 附件
这种方法的问题 -
1)我检查user1,user2和user3之前是否已经聊过的方式(之前是否有为这些创建的空间)在查询中需要“$ all”,这很慢且不太可扩展(请参阅我之前的问题 - { {3}})。这次搜索有没有更好的方法?
第二 -
1)当user1开始与user2和user3聊天时,我将为此聊天创建一个集合(房间的软件),在此集合中,我将保存文档中的聊天消息
这种方法的问题 -
1)我应该如何决定收藏品名称?我应该将其命名为“user1,user2,user3”吗? 2)如何检查已经为user2,user3,user1创建的集合(房间),因为“user1,user2,user3”与“user2,user3,user1”不同?
我也在寻找更多的想法,因为我对我的方法并不完全满意。巨型巨头(Facebook,Gmail)如何实现其数据库架构以实现最高性能和可扩展性?
任何帮助都会让我非常感激。
答案 0 :(得分:3)
大巨头(Facebook,Gmail等)没有从零开始设计他们的聊天系统。他们的聊天系统是围绕XMPP standard构建的。如果您遵循此标准,则可以使用现有的,功能强大且经过良好测试的聊天服务器,例如ejabberd或 openfire (others here)。对于高级应用程序,这些服务器允许您开发扩展(模块或组件)。
您只需编写客户端代码即可。对于Web浏览器,您可以使用Strophe库。
本书 Professional XMPP Programming with JavaScript and jQuery 提供了很好的XMPP标准应用实例。