我有兩個MongoDB的集合多個文檔更新MongoDB的卡斯巴斯卡拉
促銷採集:
{
"_id" : ObjectId("5115bedc195dcf55d8740f1e"),
"curr" : "USD",
"desc" : "durable bags.",
"endDt" : "2012-08-29T16:04:34-04:00",
origPrice" : 1050.99,
"qtTotal" : 50,
"qtClaimd" : 30,
}
聲稱集合:
{
"_id" : ObjectId("5117c749195d62a666171968"),
"proId" : ObjectId("5115bedc195dcf55d8740f1e"),
"claimT" : ISODate("2013-02-10T16:14:01.921Z")
}
每當有人聲稱促銷,新文件將被創建其中proId是第一個(促銷)收藏的(虛擬)外鍵。每個聲明都應增加「促銷」集合中的「qtClaimd」計數器。以事務性方式增加另一個集合中的值的最佳方式是什麼?我知道MongoDB沒有隔離多個文檔。
另外,之所以我去「非嵌入式」的做法是遵循
宣傳片被創建併發布到用戶,那麼索賠將數千數百金額發生。考慮到寫入次數會在單個文檔中發生,因此我認爲在宣傳集合中嵌入聲明是不合邏輯的('因爲數以千計的聲明導致大小增加時,會調整大小的促銷集合')。採用非嵌入式方法可以使促銷收藏不受影響,但可以在「索賠」集合中插入新文檔。稍後在生成報告時,我將不得不顯示「促銷」細節以及該促銷的「聲明」細節。使用非嵌入式方法,我必須首先查詢「promo」集合,然後使用「proId」來「索取」集合。 * 另外值得一提的是,可能有幾次「索賠」可能同時發生在同一個「促銷」*。
用這兩個集合實現事務處理效果的最佳方法是什麼?我使用Scala 2.10版本的Scala,Casbah和Salat。