天天看點

資料庫同步過程中一緻性和完整性的保證

  第一、效率

  資料庫同步過程主要分為三個階段,即抽取、分析、裝載。

  分析過程主要是分析sql語句并把源日志轉化為備庫的可裝載日志,這部分的主要時間是寫檔案時間,由于普通硬碟寫入時間是50m/秒左右,故對于大交易量情況,如果每秒主庫陣列産生日志量上300m/秒左右,那相比之下分析元件還是會有秒級延遲的,因為我們同步軟體一般都不安裝在主庫,無法使用高速陣列的寫入速度,是以秒級别延遲還是會産生的,但是隻要不是持續高峰日志量的産生速度,再經過一段時間後資料會自行同步,如果要追求實時抽取的同時又要實時分析,那建議隻能給同步伺服器配置一個陣列了;

  裝載過程主要是根據分析元件的結果進行備庫sql語句的裝載,是以并發裝載是提高效率的唯一方法,不過對于備庫伺服器配置不是很高的情況,建議資料庫長連接配接的數目需要能夠合理配置,因為備庫有時會作為查詢統計的負載分擔,是以如果備庫的資源有限,對于查詢統計分擔的效果會大打折扣。

  第二、一緻性

  如何能夠保證備庫的資料和主庫一緻,這個問題如果在業務層面提出來,大家肯定沒什麼好的辦法,一個共同的回答就是“檢視備庫”,用應用去連,之後檢查剛剛同步的資料是正确的就可以了,不過這樣的抽查很有可能檢查不出來特殊錯誤的資料,我想從幾個機制方面來分析這個問題。

  1、分析日志(analysis log)

  就是即将裝載到備庫的sql語句,這部分是裝載正确的根本,這部分資料如果正确了,則保證了資料源的正确。

  2、裝載日志(upload log)

  就是裝載資料時是否出現問題,有時備庫和主庫表定義有不一緻,那麼在這個日志就會記錄出錯,根據此日志就能夠檢查出問題出現在什麼地方。

  通過以上兩個日志基本能保證同步過程中的錯誤捕捉,同時再加上同步資料檢查程式(此資料需要主、備庫檢查過程中不能更改資料)和應用程式。

  連接配接備庫抽查是兩個輔助檢查方式,同時備庫作為查詢統計分析進行實時提供服務也會把抽查變成常态,進而保證資料的一緻性。

  第三、完整性

  資料庫的完整性,主要從容錯機制來考慮,例如出現下面錯誤情況時需要同步程式能夠自動恢複:

  1、源庫斷電或重起

  2、源庫shutdown

  3、源庫網絡斷

  4、備庫斷電或重起

  5、備庫shutdown

  6、備庫網絡斷

  7、資料庫裝載出錯

  針對上面主要幾種情況,同步軟體必須進行一一考慮斷點的記錄方式和位置,保證任何情況下同步程式能夠續抽、續傳,甚至對錯誤處理也可以通過人為參與後繼續同步,同時還有兩方面功能必須考慮:

  1、不停機初始化

  2、日志已經歸檔

  3、自身程式停止的重起

  4、同步伺服器斷電之後斷點啟動

  資料庫同步軟體隻有充分考慮了以上三個方面的名額,才能為行業客戶提供優秀的、實時的、資料完整一緻的同步産品,滿足相關基于資料庫同步的業務需求。

====================================分割線================================

最新内容請見作者的github頁:http://qaseven.github.io/