最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時間:2018年07月06日 14:34:37   作者:歐兜兜是素姀  
這篇文章主要給大家介紹了關于mongoDB 4.0事務回滾的相關資料,文中通過示例代碼介紹的非常詳細,對大家學習或者使用MongoDB具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

前言

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

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

以mac為例哈

部署mongodb事務回滾

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.將已有的數(shù)據庫改造成復制集

目前事務回滾只能在復制集上操作,單獨的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的方法操作數(shù)據庫時,都要帶上session,比如

 db
 .collection(this.collecitonName)
 .insertOne(doc,{session});

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

await session.abortTransaction();

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

await session.commitTransaction();

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

4.總結

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

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

5.參考鏈接

總結

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

相關文章

  • 老生常談MongoDB數(shù)據庫基礎操作

    老生常談MongoDB數(shù)據庫基礎操作

    下面小編就為大家?guī)硪黄仙U凪ongoDB數(shù)據庫基礎操作。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-07-07
  • 關于Mongodb 認證鑒權你需要知道的一些事

    關于Mongodb 認證鑒權你需要知道的一些事

    最近因為mongodb被黑了,早先我就疑惑過怎么這東西開啟服務就能用了,后來找了各方資料,知道MongoDB默認是沒有鑒權的,所以這篇文章主要給大家介紹了關于Mongodb認證鑒權你需要知道的一些事,需要的朋友可以參考下。
    2017-10-10
  • MongoDB中的定時索引示例詳解

    MongoDB中的定時索引示例詳解

    這篇文章主要給大家介紹了關于MongoDB中定時索引的相關資料,文中通過示例代碼介紹的非常詳細,對大家學習或者使用MongoDB具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧
    2019-08-08
  • MongoDB安裝及接入springboot的詳細過程

    MongoDB安裝及接入springboot的詳細過程

    MongoDB是一個開源、高性能、無模式(模式自由)的文檔(Bson)型數(shù)據庫,這篇文章主要介紹了MongoDB安裝及接入springboot,需要的朋友可以參考下
    2024-05-05
  • MongoDB使用場景總結

    MongoDB使用場景總結

    這篇文章介紹了什么場景該用MongoDB,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-02-02
  • MongoDB 復制(副本集)學習筆記

    MongoDB 復制(副本集)學習筆記

    這篇文章主要介紹了MongoDB 復制(副本集),結合實例形式分析了MongoDB數(shù)據庫復制的相關原理、配置、使用方法及操作注意事項,需要的朋友可以參考下
    2019-10-10
  • MongoDB 3.6版本中bind_ip設置詳解

    MongoDB 3.6版本中bind_ip設置詳解

    這篇文章主要給大家介紹了關于MongoDB 3.6版本中bind_ip設置的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2018-12-12
  • MongoDB 語法使用小結

    MongoDB 語法使用小結

    MongoDB是一個介于關系數(shù)據庫和非關系數(shù)據庫之間的產品,是非關系數(shù)據庫當中功能最豐富,最像關系數(shù)據庫的
    2011-10-10
  • MongoDB時間戳轉日期及日期分組實例代碼

    MongoDB時間戳轉日期及日期分組實例代碼

    時間戳(timestamp)通常是一個字符序列,唯一地標識某一刻的時間,下面這篇文章主要給大家介紹了關于MongoDB時間戳轉日期及日期分組的相關資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2023-05-05
  • MongoDB TTL索引的實例詳解

    MongoDB TTL索引的實例詳解

    這篇文章主要介紹了 MongoDB TTL索引的實例詳解的相關資料,希望通過本文能幫助到大家,讓大家理解掌握這部分內容,需要的朋友可以參考下
    2017-10-10

最新評論

渝中区| 鄢陵县| 奇台县| 都匀市| 左贡县| 苍溪县| 阜新市| 岳普湖县| 阳山县| 安国市| 抚州市| 博乐市| 长治县| 莲花县| 汉中市| 白沙| 金坛市| 璧山县| 板桥市| 宣武区| 大洼县| 本溪| 无锡市| 浮梁县| 辉县市| 大关县| 南岸区| 海兴县| 勐海县| 贵阳市| 广南县| 万荣县| 枣庄市| 宁河县| 耿马| 贡觉县| 新乐市| 海伦市| 阜平县| 平湖市| 若羌县|