2013-06-04 83 views
2

我對MongoDB和NoSQL運動非常陌生,對我一無所知。到目前爲止,我已經遇到了三種不同方式的「加盟」集合:MongoDB - DBRefs vs Map/Reduce vs手冊參考

  1. 手動保持「外鍵,ESK」參考你想與你的目標集合加入
  2. 使用DBRefs
  3. 集合
  4. 寫了一系列的Map/Reduce功能來維護關係

有人能解釋的好處時,我應該每一個?

我的第一印象是Map/Reduce適用於大型常用集合,另外兩個主要用於小型/快速查詢。

+2

我會說你永遠不應該通過一個MR來保持連接,而DBRef只是第一個的另一個版本,除了DBRef還有一個集合名稱 – Sammaye

+0

有意義。你知道一種方法來優化引用,所以你不需要從客戶端做額外的查詢來獲取引用的記錄嗎?在返回數據集之前,是否有辦法在服務器上執行此操作? – Adam

+0

不,mongodb沒有解析服務器端引用 – Sammaye

回答

1

很抱歉的響應晚 - 在這裏是一個用貓鼬嵌入文檔的一個簡單的例子:

var postSchema = new Schema({ 
    author : {type : String}, 
    title : {type : String, require : true}, 
    content : {type : String, require : true}, 
    comment : { 
    owner : {type : String}, 
    subject : {type: String, require}, 
    content : {type String, require} 
    } 
}); 

這裏的文件是postSchema(以及它的模式,但我想你明白我的意思) 。
評論嵌入式文件,你可以看到它是一個內部定義的對象。
好處是,您每次打電話發佈信息時都會收到評論,而無需額外查詢,但是如果您有很多評論,它會使發佈文檔變得非常大!

+0

謝謝。我最終得到了第二個註釋模式,以便我可以通過所有者或Post(引用您的示例中的命名結構)來引用它們。它似乎最適合我的特殊用例,但我可以看到,在MongoDB和基於文檔的數據庫中,您必須以不同的方式思考您的想法。 – Adam

+0

我同意,從RDBMS切換到基於文檔的數據庫需要一些時間。 –