新聞中心
本篇文章為大家展示了MongoDB 4.0中怎么實現事務回滾,內容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細介紹希望你能有所收獲。

公司主營業(yè)務:成都做網站、成都網站建設、移動網站開發(fā)等業(yè)務。幫助企業(yè)客戶真正實現互聯網宣傳,提高企業(yè)的競爭能力。創(chuàng)新互聯是一支青春激揚、勤奮敬業(yè)、活力青春激揚、勤奮敬業(yè)、活力澎湃、和諧高效的團隊。公司秉承以“開放、自由、嚴謹、自律”為核心的企業(yè)文化,感謝他們對我們的高要求,感謝他們從不同領域給我們帶來的挑戰(zhàn),讓我們激情的團隊有機會用頭腦與智慧不斷的給客戶帶來驚喜。創(chuàng)新互聯推出印臺免費做網站回饋大家。
1.準備工作
升級mongodb至4.0.0
$ brew upgrade mongodb
升級或安裝mongodb.js v3.1.0 以上
$ npm i mongodb --save-dev
坑
升級完上述后,db.js里連接mongo時,
會警告,讓你在connect的option里加一個字段
useNewUrlParser:true,
這時如果有用戶驗證,還需要在connect的option里再加一個字段
authSource:用戶所在的db,一般為admin
否則會報驗證失敗,找不到用戶的錯誤,比如
const mongoClient = await MongoClient.connect(mongoClientUrl, {
auth: {
user: config.dbUserName,
password: config.dbUserPassword,
},
authSource:'admin',
useNewUrlParser:true,
});2.將已有的數據庫改造成復制集
目前事務回滾只能在復制集上操作,單獨的mongodb server是不能操作事務的
關掉所有的mongod
在平時啟動mongod的命令后添加--replSet rs0,比如
$ mongod -dbpath ./db --port 27017 --replSet rs0
再開個shell,創(chuàng)一個不同端口的mongo實例,比如
$ mongod -dbpath ./db_repl --port 27018 --replSet rs0
連接27017的mongo實例,并設置
$ mongo
$ rs.initiate()
$ rs.add('localhost:27018');完成
3.寫回滾代碼
在db.js里新增了一個方法
export const getSession = async function() {
return await state.mongoClient.startSession();
};每次在需要回滾的mongo代碼前調用這個方法拿到session,開始回滾的標記
const session = await db.getSession();
session.startTransaction({
readConcern: {level: 'snapshot'},
writeConcern: {w: 'majority'},
});在每次調用mongodb.js的方法操作數據庫時,都要帶上session,比如
db
.collection(this.collecitonName)
.insertOne(doc,{session});在你處理錯誤并覺得需要回滾了,執(zhí)行
await session.abortTransaction();
在你覺得沒問題,一起正常結束時,執(zhí)行
await session.commitTransaction();
我的代碼里可能有一些封裝的代碼沒有放上去,導致不一定能理解。我只是舉個栗子去實現,具體的代碼實現可以看參考鏈接1
4.總結
useNewUrlParser這個屬性會在url里識別驗證用戶所需的db,未升級前是不需要指定的,升級到一定要指定,不管是在url后面,還是用authSource
事務回滾只能在復制集上操作,我猜測實現的原理可能是這樣:先記錄主節(jié)點的session,然后回滾的話,通過這個session查找副節(jié)點的數據快照,然后將這快照再應用到主節(jié)點上,實現回滾。當然,實際情況應該相當復雜,不然mongoDB也不會用3年時間來實現這個操作。
上述內容就是mongoDB 4.0中怎么實現事務回滾,你們學到知識或技能了嗎?如果還想學到更多技能或者豐富自己的知識儲備,歡迎關注創(chuàng)新互聯行業(yè)資訊頻道。
新聞名稱:mongoDB4.0中怎么實現事務回滾
分享路徑:http://www.dlmjj.cn/article/ihhgsh.html


咨詢
建站咨詢
