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

2021-10-01 00:16:15 字數 1734 閱讀 5395

資料庫同步過程,最嚴格的指標,第一是效率,即每秒同步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、同步伺服器斷電之後斷點啟動

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

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

資料庫一致性

資料庫一致性 database consistency 是指事務執行的結果必須是使資料庫從乙個一致性狀態變到另乙個一致性狀態。保證資料庫一致性是指當事務完成時,必須使所有資料都具有一致的狀態。在關係型資料庫中,所有的規則必須應用到事務的修改上,以便維護所有資料的完整性。保證資料庫的一致性是資料庫管理...

資料庫的強一致性和弱一致性

強一致性可以理解為在任意時刻,所有節點中的資料是一樣的。同一時間點,你在節點a中獲取到key1的值與在節點b中獲取到key1的值應該都是一樣的 弱一致性 相當於非同步 系統並不保證續程序或者執行緒的訪問都會返回最新的更新過的值。系統在資料寫入成功之後,不承諾立即可以讀到最新寫入的值,也不會具體的承諾...

外來鍵的主要作用 保持資料的一致性 完整性

ref sub main 從表 sub 的某列引用 ref 主表 main 的某列的值。比方學生表有個學生編號 sid 分數表中的學生列 stu 引用學生表的學 生編號,此時對於分數表的 stu 來說。學生表的 sid 就是外來鍵。從表也叫外來鍵表,主表也叫主鍵表 外表,列也叫字段。所以在設計的時候...