一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

Mysql|Sql Server|Oracle|Redis|MongoDB|PostgreSQL|Sqlite|DB2|mariadb|Access|數(shù)據(jù)庫技術|

服務器之家 - 數(shù)據(jù)庫 - MongoDB - mongoDB 4.0事務回滾的辛酸歷程探究

mongoDB 4.0事務回滾的辛酸歷程探究

2020-05-18 15:42歐兜兜是素姀 MongoDB

這篇文章主要給大家介紹了關于mongoDB 4.0事務回滾的相關資料,文中通過示例代碼介紹的非常詳細,對大家學習或者使用MongoDB具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

前言

主管前幾天發(fā)現(xiàn)mongoDB已經(jīng)升級到4.0了,迫不及待得讓我實現(xiàn)他期待已久的事務回滾,發(fā)現(xiàn)還是有很多坑啊!

下面是我將已有的本地mongoDB升級到支持事務回滾的歷程,分享出來,有錯誤的地方歡迎指正!

以mac為例哈

部署mongodb事務回滾

1.準備工作

升級mongodb至4.0.0

?
1
$ brew upgrade mongodb

升級或安裝mongodb.js v3.1.0 以上

?
1
$ npm i mongodb --save-dev

升級完上述后,db.js里連接mongo時,

會警告,讓你在connect的option里加一個字段

useNewUrlParser:true

這時如果有用戶驗證,還需要在connect的option里再加一個字段

authSource:用戶所在的db,一般為admin

否則會報驗證失敗,找不到用戶的錯誤,比如

?
1
2
3
4
5
6
7
8
const mongoClient = await MongoClient.connect(mongoClientUrl, {
 auth: {
 user: config.dbUserName,
 password: config.dbUserPassword,
 },
 authSource:'admin',
 useNewUrlParser:true,
});

2.將已有的數(shù)據(jù)庫改造成復制集

目前事務回滾只能在復制集上操作,單獨的mongodb server是不能操作事務的

關掉所有的mongod

在平時啟動mongod的命令后添加--replSet rs0,比如

?
1
$ mongod -dbpath ./db --port 27017 --replSet rs0

再開個shell,創(chuàng)一個不同端口的mongo實例,比如

?
1
$ mongod -dbpath ./db_repl --port 27018 --replSet rs0

連接27017的mongo實例,并設置

?
1
2
3
$ mongo
$ rs.initiate()
$ rs.add('localhost:27018');

完成

3.寫回滾代碼

在db.js里新增了一個方法

?
1
2
3
export const getSession = async function() {
 return await state.mongoClient.startSession();
};

每次在需要回滾的mongo代碼前調(diào)用這個方法拿到session,開始回滾的標記

?
1
2
3
4
5
const session = await db.getSession();
session.startTransaction({
 readConcern: {level: 'snapshot'},
 writeConcern: {w: 'majority'},
});

在每次調(diào)用mongodb.js的方法操作數(shù)據(jù)庫時,都要帶上session,比如

?
1
2
3
db
.collection(this.collecitonName)
.insertOne(doc,{session});

在你處理錯誤并覺得需要回滾了,執(zhí)行

?
1
await session.abortTransaction();

在你覺得沒問題,一起正常結束時,執(zhí)行

?
1
await session.commitTransaction();

我的代碼里可能有一些封裝的代碼沒有放上去,導致不一定能理解。我只是舉個栗子去實現(xiàn),具體的代碼實現(xiàn)可以看參考鏈接1

4.總結

useNewUrlParser這個屬性會在url里識別驗證用戶所需的db,未升級前是不需要指定的,升級到一定要指定,不管是在url后面,還是用authSource

事務回滾只能在復制集上操作,我猜測實現(xiàn)的原理可能是這樣:先記錄主節(jié)點的session,然后回滾的話,通過這個session查找副節(jié)點的數(shù)據(jù)快照,然后將這快照再應用到主節(jié)點上,實現(xiàn)回滾。當然,實際情況應該相當復雜,不然mongoDB也不會用3年時間來實現(xiàn)這個操作。

5.參考鏈接

總結

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對服務器之家的支持。

原文鏈接:https://segmentfault.com/a/1190000015458880

延伸 · 閱讀

精彩推薦
  • MongoDBMongoDB 內(nèi)存使用情況分析

    MongoDB 內(nèi)存使用情況分析

    都說 MongoDB 是個內(nèi)存大戶,但是怎么知道它到底用了多少內(nèi)存呢...

    MongoDB教程網(wǎng)10002020-09-29
  • MongoDBMongoDB中javascript腳本編程簡介和入門實例

    MongoDB中javascript腳本編程簡介和入門實例

    作為一個數(shù)據(jù)庫,MongoDB有一個很大的優(yōu)勢——它使用js管理數(shù)據(jù)庫,所以也能夠使用js腳本進行復雜的管理——這種方法非常靈活 ...

    MongoDB教程網(wǎng)6982020-04-24
  • MongoDB分布式文檔存儲數(shù)據(jù)庫之MongoDB分片集群的問題

    分布式文檔存儲數(shù)據(jù)庫之MongoDB分片集群的問題

    這篇文章主要介紹了分布式文檔存儲數(shù)據(jù)庫之MongoDB分片集群的問題,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋...

    Linux-18743072020-12-20
  • MongoDBmongodb基本命令實例小結

    mongodb基本命令實例小結

    這篇文章主要介紹了mongodb基本命令,結合實例形式總結分析了MongoDB數(shù)據(jù)庫切換、查看、刪除、查詢等基本命令用法與操作注意事項,需要的朋友可以參考下...

    dawn-liu3652020-05-26
  • MongoDB遷移sqlserver數(shù)據(jù)到MongoDb的方法

    遷移sqlserver數(shù)據(jù)到MongoDb的方法

    這篇文章主要介紹了遷移sqlserver數(shù)據(jù)到MongoDb的方法,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下...

    聽楓xl9682021-01-03
  • MongoDBMongoDB憑什么躋身數(shù)據(jù)庫排行前五

    MongoDB憑什么躋身數(shù)據(jù)庫排行前五

    MongoDB以比去年同期超出65.96分的成績繼續(xù)雄踞榜單前五,這個增幅在全榜僅次于PostgreSQL的77.99,而其相對于4月份的6.10分的增長也是僅次于微軟SQL Server排名...

    孫浩峰3892020-05-22
  • MongoDBMongodb實現(xiàn)定時備份與恢復的方法教程

    Mongodb實現(xiàn)定時備份與恢復的方法教程

    這篇文章主要給大家介紹了Mongodb實現(xiàn)定時備份與恢復的方法教程,文中通過示例代碼介紹的非常詳細,對大家具有一定的參考學習價值,需要的朋友們下面...

    chenjsh364522020-05-13
  • MongoDBMongoDB安裝圖文教程

    MongoDB安裝圖文教程

    這篇文章主要為大家詳細介紹了MongoDB安裝圖文教程,分為兩大部分為大家介紹下載MongoDB和安裝MongoDB的方法,感興趣的小伙伴們可以參考一下 ...

    Yangyi.He6132020-05-07
主站蜘蛛池模板: 欧美视| 国产午夜视频在线观看网站 | free service性v极品 | 2019年国产不卡在线刷新 | 国产网站免费看 | 好男人在线观看hd中字 | 波多野结衣女教师在线观看 | 欧美另类xxx精品人妖 | 日本一区二区免费在线 | 日本中文字幕一区二区有码在线 | 日本在线观看免费观看完整版 | 天天天综合网 | 成品人视频w免费观看w | 2019nv天堂| 日本特级a禁片在线播放 | 91精品国产麻豆国产自产在线 | 四虎黄色影视 | 青青青国产精品国产精品久久久久 | 国产精品一区二区三区免费 | 日本剧情片在线播放中文版 | 美女班主任让我爽了一夜视频 | 精品久久久久久影院免费 | 午夜一级| 女同学用白丝脚玩我的故事 | 精品国产福利一区二区在线 | 午夜片无码区在线观看 | 日本高清色视频www 日本高清免费观看 | 热99re国产久热在线 | 欧美一区二区不卡视频 | 免费国产成人高清视频网站 | 挑色视频 | 女学生被老师调教在教室 | 国产肥老上视频 | 亚洲性综合网 | 好大用力深一点女公交车 | 91桃花视频| 国产91精品露脸国语对白 | 国产欧美日韩高清专区ho | 亚洲福利电影一区二区? | 青涩体验在线观看未删减 | 国内精品免费一区二区三区 |