1. 程式人生 > >PostgreSQL學習(七)—— Transaction兩階段提交(中)

PostgreSQL學習(七)—— Transaction兩階段提交(中)

Transaction事務

** 兩階段提交 **

在PostgreSQL中是可以支援兩階段提交協議的;

在分散式系統當中,事務往往包含了多臺資料庫上的操作,單臺數據庫可以很好的保證原子性,而多臺資料庫之間的原子性就需要通過兩階段提交來實現了;

兩階段提交協議的步驟:

1) 應用程式進行一組操作,不提交事務; 然後呼叫事務協調器中的提交方法;

    2) 事務協調器聯絡事務中涉及的資料庫,並通知他們準備提交事務,這是"階段1",在PostgreSQL中使用"Prepare Transaction"命令;

    3) 事務中涉及的資料庫接收到"Prepare Transaction"命令後,資料庫必須將自己置於下列狀態:

        1. 確保後續在被要求提交事務時提交事務;

        2. 再被要求回滾事務時能夠回滾事務;

       PostgreSQL會將已經準備好的事務提交的資訊持久化儲存(寫盤),如果資料庫無法提交事務,則返回失敗資訊給事務協調器;

    4) 事務協調器收到事務涉及的資料庫的響應資訊;

   5) 接下來是"階段2",事務接收到相應資訊後,如果是FAILURE,那麼就傳送給所有節點"ROLLBACK PREPARED"指令; 如果返回成功,則返回"COMMIT PREPARED"指令,通知該事務的完成;