PostgreSQL學習(七)—— Transaction兩階段提交(中)
阿新 • • 發佈:2019-02-08
Transaction事務
** 兩階段提交 **
在PostgreSQL中是可以支援兩階段提交協議的;
在分散式系統當中,事務往往包含了多臺資料庫上的操作,單臺數據庫可以很好的保證原子性,而多臺資料庫之間的原子性就需要通過兩階段提交來實現了;
兩階段提交協議的步驟:
1) 應用程式進行一組操作,不提交事務; 然後呼叫事務協調器中的提交方法;
2) 事務協調器聯絡事務中涉及的資料庫,並通知他們準備提交事務,這是"階段1",在PostgreSQL中使用"Prepare Transaction"命令;
3) 事務中涉及的資料庫接收到"Prepare Transaction"命令後,資料庫必須將自己置於下列狀態:
1. 確保後續在被要求提交事務時提交事務;
2. 再被要求回滾事務時能夠回滾事務;
PostgreSQL會將已經準備好的事務提交的資訊持久化儲存(寫盤),如果資料庫無法提交事務,則返回失敗資訊給事務協調器;
4) 事務協調器收到事務涉及的資料庫的響應資訊;
5) 接下來是"階段2",事務接收到相應資訊後,如果是FAILURE,那麼就傳送給所有節點"ROLLBACK PREPARED"指令; 如果返回成功,則返回"COMMIT PREPARED"指令,通知該事務的完成;