我有這個架構支持在現場的消息的: 移動通訊架構的MongoDB
當我將消息發送給其他成員,該消息被保存到信息表;將記錄添加到MessageSent表中,並將每個收件人的記錄添加到MessageInbox表中。 MessageCount用於跟蹤收件箱/發送文件夾中的郵件數量,並使用MessageInbox/MessageSent上的插入/刪除觸發器進行填充 - 通過這種方式,我可以始終知道成員有多少郵件,而不會產生昂貴的「select count( *)「查詢。
此外,當我查詢成員的消息,我加入到會員表獲取成員的名字/姓氏。
現在,我將把應用程序移動到MongoDB,我不太確定應該是什麼集合模式。因爲MongoDB中沒有可用的連接,所以我必須將它完全非規範化,所以我將擁有包含完整消息信息的MessageInbox,MessageDraft和MessageSent集合,對吧?
那我不知道以下幾點:
如果用戶改變了他的第一/姓氏?它將作爲發件人在一些消息中非正規化存儲,作爲其他消息中收件人的一部分 - 我如何以最佳方式更新它?
如何獲取消息數量?同時會有大量的請求,所以它必須表現良好。
任何想法,意見和建議,非常感謝!
這是個好主意。收集信息的任何想法都是以表演的方式計算的? – Andrey 2011-05-03 00:51:52
這樣做的最好方法可能是將計數預先存儲在某處。 MongoDB 2.x計劃有額外的聚合操作符,比如$ sum,但還沒有。對於這樣的事情,您可能只想將它存儲在某個地方,並在發送消息時使用$ inc操作符來增加它。 – 2011-05-03 01:33:07