數據庫同步過程,最嚴格的指標,第一是效率,即每秒同步SQL條數;其次是一致性,即主庫產生的數據,備庫同步后是否一致;第三就是數據庫同步的完整性如何保證,即當同步各個環節出現問題時,如何考慮出錯處理,下面我們將分別進行討論并進行合理性分析。
第一、效率
數據庫同步過程主要分為三個階段,即抽取、分析、裝載。
抽取過程主要是實時讀取數據庫日志,這部分可以作到毫秒級別間隔,所以不存在效率問題,基本上可以作到實時抽取;
分析過程主要是分析SQL語句并把源日志轉化為備庫的可裝載日志,這部分的主要時間是寫文件時間,由于普通硬盤寫入時間是50M/秒左右,故對于大交易量情況,如果每秒主庫陣列產生日志量上300M/秒左右,那相比之下分析組件還是會有秒級延遲的,因為我們同步軟件一般都不安裝在主庫,無法使用高速陣列的寫入速度,所以秒級別延遲還是會產生的,但是只要不是持續高峰日志量的產生速度,再經過一段時間后數據會自行同步,如果要追求實時抽取的同時又要實時分析,那建議只能給同步服務器配置一個陣列了;
裝載過程主要是根據分析組件的結果進行備庫SQL語句的裝載,所以并發裝載是提高效率的唯一方法,不過對于備庫服務器配置不是很高的情況,建議數據庫長連接的數目需要能夠合理配置,因為備庫有時會作為查詢統計的負載分擔,所以如果備庫的資源有限,對于查詢統計分擔的效果會大打折扣。
第二、一致性
如何能夠保證備庫的數據和主庫一致,這個問題如果在業務層面提出來,大家肯定沒什么好的辦法,一個共同的回答就是“查看備庫”,用應用去連,之后檢查剛剛同步的數據是正確的就可以了,不過這樣的抽查很有可能檢查不出來特殊錯誤的數據,我想從幾個機制方面來分析這個問題。
1、分析日志(Analysis Log)
就是即將裝載到備庫的SQL語句,這部分是裝載正確的根本,這部分數據如果正確了,則保證了數據源的正確。
2、裝載日志(Upload Log)
就是裝載數據時是否出現問題,有時備庫和主庫表定義有不一致,那么在這個日志就會記錄出錯,根據此日志就能夠檢查出問題出現在什么地方。
通過以上兩個日志基本能保證同步過程中的錯誤捕捉,同時再加上同步數據檢查程序(此數據需要主、備庫檢查過程中不能更改數據)和應用程序。
連接備庫抽查是兩個輔助檢查方式,同時備庫作為查詢統計分析進行實時提供服務也會把抽查變成常態,從而保證數據的一致性。
第三、完整性
數據庫的完整性,主要從容錯機制來考慮,例如出現下面錯誤情況時需要同步程序能夠自動恢復:
1、源庫斷電或重起
2、源庫SHUTDOWN
3、源庫網絡斷
4、備庫斷電或重起
5、備庫SHUTDOWN
6、備庫網絡斷
7、數據庫裝載出錯
針對上面主要幾種情況,同步軟件必須進行一一考慮斷點的記錄方式和位置,保證任何情況下同步程序能夠續抽、續傳,甚至對錯誤處理也可以通過人為參與后繼續同步,同時還有兩方面功能必須考慮:
1、不停機初始化
2、日志已經歸檔
3、自身程序停止的重起
4、同步服務器斷電之后斷點啟動
數據庫同步軟件只有充分考慮了以上三個方面的指標,才能為行業客戶提供優秀的、實時的、數據完整一致的同步產品,滿足相關基于數據庫同步的業務需求。