2013-10-03 28 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標準應用的絕佳示例。