Facebook像mongodb中的聊天数据库模式

我正在计划node.js中的TCP / IP聊天服务器,我想包括Facebook / Gmail聊天的几乎所有function。

我有两个想法在数据库模式 –

第一 –

1)当user1开始与user2和user3聊天时,我将检查这些用户以前聊过的数据库(是否有为这些用户创build的空间?),如果不是,那么我将为这些用户创build一个空间。

2)我将保存消息收集聊天消息和每个聊天消息在一个单独的文件,我想保存这些相关的聊天消息味精msg sender_user房间时间戳附件

问题与这种方法 –

1)我检查的方式,如果user1,user2和user3之前聊过(是否有任何房间创build这些之前)所需的“$所有”在查询,这是缓慢的,并没有太多的可扩展性(请参阅我以前的问题 – 数组searchmongodb )。 这个search有没有更好的方法?

第二 –

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

问题与这种方法 –

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

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

任何帮助,我非常感谢。

大型巨头(Facebook,Gmail等)没有从头开始devise他们的聊天系统。 他们的聊天系统是围绕XMPP标准build立的 。 如果你遵循这个标准,你可以使用一个现有的,强大的和经过良好testing的聊天服务器,如ejabberdopenfire ( 这里的其他人 )。 对于高级应用程序,这些服务器允许您开发扩展(模块或组件)。

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

本书的专业XMPP编程与JavaScript和jQuery有很好的应用XMPP标准的例子。