国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

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

Mysql|Sql Server|Oracle|Redis|MongoDB|PostgreSQL|Sqlite|DB2|mariadb|Access|數據庫技術|

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

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

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

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

前言

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

下面是我將已有的本地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.將已有的數據庫改造成復制集

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

關掉所有的mongod

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

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

再開個shell,創一個不同端口的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代碼前調用這個方法拿到session,開始回滾的標記

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

在每次調用mongodb.js的方法操作數據庫時,都要帶上session,比如

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

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

?
1
await session.abortTransaction();

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

?
1
await session.commitTransaction();

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

4.總結

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

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

5.參考鏈接

總結

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

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

延伸 · 閱讀

精彩推薦
  • MongoDBMongoDB 內存使用情況分析

    MongoDB 內存使用情況分析

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

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

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

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

    MongoDB教程網6982020-04-24
  • MongoDB分布式文檔存儲數據庫之MongoDB分片集群的問題

    分布式文檔存儲數據庫之MongoDB分片集群的問題

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

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

    mongodb基本命令實例小結

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

    dawn-liu3652020-05-26
  • MongoDB遷移sqlserver數據到MongoDb的方法

    遷移sqlserver數據到MongoDb的方法

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

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

    MongoDB憑什么躋身數據庫排行前五

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

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

    Mongodb實現定時備份與恢復的方法教程

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

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

    MongoDB安裝圖文教程

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

    Yangyi.He6132020-05-07
主站蜘蛛池模板: 99re在线观看 | 狠狠干av | 欧美中文字幕一区二区三区亚洲 | 久久91精品国产 | 伊人久久精品久久亚洲一区 | 777色狠狠一区二区三区 | 精品不卡 | 午夜精品久久久久久久久久久久 | 国产91精品亚洲精品日韩已满 | 欧美国产精品一区二区三区 | 久久久一| 毛片aaa | 亚洲高清视频在线 | 日韩色综合| 一级免费视频 | 久久久久久中文字幕 | 午夜免费 | 久久综合九色综合欧美狠狠 | 成人黄色av| 亚洲成人免费影院 | 黑人巨大精品欧美黑白配亚洲 | 中文字幕91在线 | 欧美亚洲日本 | 国产一区二区三区在线 | 亚洲国产精品99久久久久久久久 | 精品视频在线免费观看 | 99综合在线 | 国产精品欧美久久久 | 99久久精品国产一区二区三区 | 精品久久久久久久 | 中文字幕高清在线观看 | 懂色av成人一区二区三区 | jizzz中国| 精品一区二区免费视频视频 | 在线二区 | 美日韩一区 | 91 久久| 99在线视频播放 | 亚洲福利国产 | 久久国产精品一区二区 | 欧美精品乱码久久久久久按摩 |