2014-01-17 40 views
0

我正在開發一個受電子郵件服務(Gmail)啓發的Web應用程序,該客戶端使用AngularJS,MongoDB(Mongoose)和NodeJS for RESTful服務器。用於類似電子郵件的Web應用程序的NoSQL數據庫設計

目前,這是數據庫結構

{ 
conversation: { 
    user1: { 
     type: mongoose.Schema.ObjectId, 
     ref: 'User' 
    }, 
    user2: { 
     type: mongoose.Schema.ObjectId, 
     ref: 'User' 
    }, 
    user1Flags: [String], 
    user2Flags: [String], 
    messages: [{ 
     title: String, 
     content: String, 
     sender: { 
      type: mongoose.Schema.ObjectId, 
      ref: 'User', 
     }, 
     sentAt: Date, 
     createdAt: Date, 
     attachments: [String], 
     senderMetaData: { 
      archived: Boolean, 
      deleted: Boolean 
     }, 
     recipientMetaData: { 
      archived: Boolean, 
      deleted: Boolean 
     } 
    }] 
} 
} 

好,我很滿意,但我沒有用的NoSql太多的經驗。

我想聽聽你對此的看法,這是正確的路嗎?

+0

您是否有理由不利用自計算機網絡出現以來已標準化的POP3/IMAP/SMTP協議? – srquinn

+0

這應該是更復雜的應用程序的一小部分,私人消息不基於電子郵件地址。 –

回答

0

對於您的設計而言,一個明顯的性能考慮因素是您要將潛在的large embedded arrays of messages存儲在單個對話文檔中。隨着非常活躍的對話變得越來越大,這些文檔將需要更頻繁的磁盤重定位,最終可能會達到maximum document size(16MB,如MongoDB 2.6)。如果您只關心數組中的最近消息,即使您只通過驅動程序調用來投影最近信息的子集,也會增加將整個文檔加載到MongoDB服務器的內存中的開銷。

有關如何設計高效消息傳遞方法的一些想法,我建議閱讀Socialite項目的文檔。這對你的用例來說絕對是過火,但你可能會發現一些有用的東西需要考慮。例如,Feed Service描述了幾種不同的方法,包括每種方法更合適的缺點和建議。

相關問題