2016-08-04 1048 views
2

我正在開發與node.js,redis,socket.iomongodb的聊天應用程序。 MongoDB是最後一個,用於保存消息。將聊天消息存儲在mongodb集合中是一個好主意嗎?

我的問題是最後一步最好的方法是什麼?

恐怕與所有喜歡

{ 
    id, 
    from, 
    to, 
    datetime, 
    message 
} 

可以得到太大太快的消息的集合,是會得到非常慢的閱讀目的,你有什麼感想?

有沒有更好的方法,你已經合作過?

+0

聊天是在兩個人之間還是隻有一羣人可以在那裏? – Shrabanee

+0

兩個人只有 – R01010010

回答

1

我認爲db結構很好,就像你在你的問題中提到的那樣。

您可以指定一些unique id用於每對之間的聊天並將其保存在每個聊天記錄中。當你想要顯示它的時候基於那個檢索。

12是A和B之間聊天的唯一的ID,當你想展示聊天A和B.

所以你的數據庫結構可以檢索應根據12,如: -

{ 
    id, 
    from, 
    to, 
    datetime, 
    message, 
    uid 
} 

請記住,如果您要提供一些limit(比如每次100個)來檢索,則可以優化檢索。如果用戶滾動到100以上,則可以檢索100個以上的聊天記錄。這將解決大量的檢索。

使用limit時,根據date created進行檢索,並使用sort以及find查詢。

+1

謝謝,關於uid索引 – R01010010

6

在MongoDB中,您將以您希望稍後閱讀的格式存儲數據。

如果您從數據庫中讀取的是在'to'字段和動態日期時間過濾器上過濾的郵件列表,則此模式非常合適。

不要忘記在要查詢的字段上添加一個索引,那麼查詢它們的速度就會很快,甚至超過數百萬條記錄。

例如,如果您總是顯示一整天的完整歷史記錄,則可以將一天中的所有消息存儲在一個文檔中。如果這兩種類型的查詢都發生很多,那麼甚至會以兩種格式存儲消息。

如果存儲是一個問題,您也可以使用capped collection,它會自動刪除例如1歲以上。

+0

謝謝,恰恰是封頂的事情是我正在思索,不知道該怎麼做,謝謝你的信息 – R01010010

0

這裏只是一個想法,是純文本還是允許共享圖像和視頻的信息?

如果是後者,則將一天中的所有聊天記錄存儲到一個集合中可能無法解決。

其實如果你有圖像和視頻股票允許,那麼你需要考慮到。 16MB文件限制。

+0

好點它只是現在的文本,但這是考慮未來的好處 – R01010010

相關問題