關於Mongodb的事務

2021-09-21 07:19:35 字數 1222 閱讀 3404

關於事務:

事務的隔離級別:未提交讀(髒讀資料)  已提交讀  不可重複讀  幻讀(序列化 serializable解決)

uncommitted - read 解決:

unrepeat - read 解決: 

mongodb的部署方式:

單機模式:

乙個primary:(在記憶體中)

包含:乙個databuffer    乙個journalbuffer

步驟: 磁碟中有對應的datafile   journalfile 

使用者傳送請求給primary,先將資料日誌緩衝到journalbuffer,再將資料緩衝到databuffer 然後將資料返回給使用者

之後journalbuffer 資料刷盤到 journalfile (重新整理頻率較高 約100ms一次)最後databuffer資料刷盤到datafile(大概60s一次)

高可用複製集:

乙個primary  乙個secondary  多個secondary

primary中包括:

databuffer  journalbuffer  oplog  其他操作和單機模式一樣

複製集的優點:

複製集在完成主從複製的基礎上,通過心跳機制,一旦primary節點出現宕機,則觸發選舉乙個新的主節點,剩下的secondary節點指向新的primary

不同的是在資料緩衝到databuffer之後 會將 緩衝操作日誌緩衝到oplog中 然後在資料返回給使用者之後,oplog中的日誌緩衝記錄會同步到secondary中 (頻率最快 大概1ms一次)

可擴充套件分片集群:

有關writeconcern:

w = 0 / 1 / 2 / majority;

j  =  1;

w = 0的時候效能最好 但是最不安全  會出現網路丟包 無效資料都不提醒 屬於 unacknowledged

w = 1的時候屬於 acknowledged 是預設的狀態

w = majority 屬於推薦的狀態

j = 1 時候安全性最高 但是效能損耗也是最大

可能會碰到的問題:

journaldata還沒資料刷盤到journalfile時候宕機 會導致資料丟失 使用 j = 1可以解決 

解決方式是:保證日誌落盤後返回確定資訊

oplog緩衝日誌的時候系統宕機:

這個時候需要保證日誌同步到乙個節點才返回確認資訊給客戶端 需要使用w = 2 / majority / j = 1

Mongodb事務模擬

1 建立事務表,新增一條記錄,如果成功,執行第2步,如果失敗,則事務失敗。2 將該事務的id標誌加在要執行事務的一批資料上,並新增狀態字段 待插入狀態。然後執行批量寫操作。如果成功,則執行第3步,如果失敗,則執行第6步。3 update mult 待插入狀態 成功狀態。如果成功,執行第4步。如果失敗...

mongodb 事務操作

事務必須用在複製集上 獲取session session db.getmongo startsession 開啟事務 session.starttransaction 獲得collection yun1 session.getdatabase database yun1 操作 yun1.insert...

MongoDB4 事務 簡單易懂的

mongodb 的事務是依靠 mongodb 連線的客戶端 session 實現,事務執行的流程大致是 建立 session,通過 session starttransaction 啟動事務,如果一系列事務都完成,那麼 committransaction 完成事務操作,並結束當前事務 session...