假設你有一個應用程序,其中來自用戶的一個單操作涉及從不同集合更新多個文件。MongoDB - 如何確保多個更新都是成功的?
其實我有問題;-)
是什麼做的最好的辦法,以及如何確保要麼一切都正確保存或取消操作?
im使用Mongoose
解甲 - 嵌套回調
假設兩個用戶id和EVENTID由客戶端POST呼叫或經由套接字
User.findById(userId,{},function(err,myUser){
if(err){
console.log('Error updating user...');
return;
}
else{
Event.findById(eventId,{},function(err,myEvent){
if(err){
console.log('Error updating user's Event...');
return;
}else{
console.log('Both user and event were successfully updated');
socket.emit('Update success!') || res.send(...);
});
});
溶液B中提供 - 並行電話
User.findById(userId,{},function(err,myUser){
if(err){
console.log('Error updating user...');
return;
}
else{
console.log('Success updating user');
socket.emit('..') || res.send('...');
});
Event.findById(eventId,{},function(err,myEvent){
if(err){
console.log('Error updating user's Event...');
return;
}else{
console.log('Success updating Event');
socket.emit('Update success!') or res.send(...);
});
假設從頭開始都知道userId和eventId,解決方案B似乎明顯更快。無論如何,在這兩種情況下,只有在所有寫入操作都成功後,如何確保對數據庫執行WRITE操作?
是否我必須這樣做的事實意味着我的模式設計得不好,我應該合併信息?
感謝您的答覆
它向我建議你真的想要ACID並且應該切換回關係數據庫。 – duffymo 2014-09-19 20:11:05