mongodb 的事務是依靠 mongodb 連線的客戶端 session 實現,事務執行的流程大致是 建立 session,通過 session starttransaction 啟動事務,如果一系列事務都完成,那麼 committransaction 完成事務操作,並結束當前事務 session;如果一系列事務中有任意事件失敗, 那麼 aborttransaction 中止事務,內部將已完成的任務回退到修改之前,並結束當前事務 session。
session = client.startsession();
session.starttransaction();
session.committransaction();
session.aborttransaction();
session.endsession();
複製**
當前有兩個使用者,a 使用者有餘額 50 軟妹幣,b 使用者有餘額 10 軟妹幣,a 使用者給 b 轉賬 10 ,場景設定 轉賬很安全,網路也很暢通,沒有黑客攔截,沒有發生意外,這次轉賬成功了,這時 a 使用者餘額剩下40 ,b 使用者餘額有20。a 感覺很安全,這時又給 b 轉賬,a 忘記自己餘額有多少,給 b 轉了 50 ,結果出錯了。
在沒有事務的情況下,運算元據庫是這樣的,1.a 賬戶的餘額 -50,2. b 賬戶增加50. 當 a 餘額不足時或在操作 a 賬戶成功後網路發生錯誤,b 賬戶的金額沒能正確修改。
在有事務的情況下,即使在操作 a 賬戶金額後出現錯誤,則事務會將整個轉賬過程回退到修改之前。
複製**
!!! transaction 只適用複製集 replica set, 所以要先搭建mongodb 複製集
// 建立data目錄
mkdir -p data/1301
mkdir -p data/1302
mkdir -p data/1303
// 起三個 mongodb 例項
./bin/mongod --replset shard1 --dbpath=./data/1301 --port=1301
./bin/mongod --replset shard1 --dbpath=./data/1302 --port=1302
./bin/mongod --replset shard1 --dbpath=./data/1303 --port=1303
複製**
// 配置複製集
./bin/mongo --port 1301
rsconf = ] }
rs.initiate( rsconf )
rs.add("127.0.0.1:1302")
rs.add("127.0.0.1:1303")
複製**
//檢視是否是主節點
rs.ismaster()
// 檢視複製集狀態
rs.status()
複製**
mkdir mongodb4
cd mongodb4
npm init
npm i mongodb -s
複製**
(async
function() = require('mongodb');
const uri = 'mongodb://localhost:1301/dbfour';
const client = await mongoclient.connect(uri, );
const db = client.db();
await db.dropdatabase();
console.log('(1) 首先 刪庫 dbfour, then 跑路\n')
// 插入兩個賬戶並充值一些金額
await db.collection('account').insertmany([
,]);
console.log('(2) 執行 insertmany, a 充值 50, b 充值 10\n')
await transfer('a', 'b', 10); // 成功
console.log('(3) 然後 a 給 b 轉賬 10\n')
try catch (error)
// 轉賬邏輯
async
function
transfer(from, to, amount) ;
const a = await db.collection('account').
findoneandupdate(, }, opts).
then(res => res.value);
if (a.balance < 0)
const b = await db.collection('account').
findoneandupdate(, }, opts).
then(res => res.value);
await session.committransaction();
session.endsession();
return ;
} catch (error)
}})()
複製**
複製**
MongoDB4 安裝,配置遠端
wget 或者 找自己想要安裝的版本指定目錄並mv名稱 sudo tar zxvf mongodb linux x86 64 rhel70 4.4.1.tgz c usr local sudo mv mongodb linux x86 64 rhel70 4.4.1 mongodb建立db目錄和日誌...
windows下安裝配置mongodb4 x版本
現在mongod出到4.x的版本,而網上的大多數教程是針對3.x的版本的。很多在3.x的配置操作在4.x看來是很沒有必要的,特此說明一下。首先在官網 我不喜歡把軟體裝在系統盤,所以我選擇 custom,自己選要裝在 然後就跳出來下面這張圖。針對下面這張圖我翻譯一下官方文件上的內容作為解釋。從 mon...
CentOS安裝MongoDB4,並設定遠端連線
首先,說一點自己安裝軟體的感想 第二,盡量在官網找到對應安裝包版本的安裝手冊 第三,如果安裝包不是二進位制可執行檔案或rpm包,而是壓縮包,解壓後,仔細看一下readme中的內容 這裡將個人在centos安裝mongodb4的過程,做個記錄,有需要的朋友可以參考一下 第一,這裡選擇yum安裝,配置m...