如何通過外部表做資料一致性檢查和配平

2021-09-26 13:19:17 字數 1695 閱讀 3701

隨著微服務和分布式架構的興起及使用者對資料高可用的重視。現在系統中的資料會通過程式定時同步、抽數工具、複製工具等在多個資料庫中存在多份。但因為程式異常、網路異常、資料異常等各種原因,會出現資料不一致的情況。如何能簡單快速檢測出資料不一致並且配平呢?本文通過postgresql的fdw機制,介紹一種簡單的配平方法。

目標庫

#假設資料庫已經安裝了postgres_fdw,未安裝可以通過

create schema  db_uim_1122;
# 也可以通過create foregin table 手動建立

import foreign schema db_uim limit to (t_aty_user,t_aty_corp) from server uim_1122 into db_uim_1122;

select u1.c_id from db_uim_1122.t_aty_user u1 where not exists (select * from db_uim.t_aty_user u2 where u1.c_id = u2.c_id);

c_id

-----------

219545603

158072921

(2 rows)

select c_id from db_uim.t_aty_user u1 where not exists (select * from db_uim_1122.t_aty_user u2 where u1.c_id = u2.c_id);

c_id

------

(0 rows)

# 可以手動寫sql檢查

# 例如,檢查c_id,c_name,c_passoword 不一致:

select c_id from db_uim.t_aty_user u1 where not exists (select * from db_uim_1122.t_aty_user u2 where u1.c_id = u2.c_id and u1.c_name = u2.c_name and u1.c_password = u2.c_password);

insert into db_uim.t_aty_user select u1.* from db_uim_1122.t_aty_user u1 where not exists (select * from db_uim.t_aty_user u2 where u1.c_id = u2.c_id);
delete from db_uim.t_aty_user where c_id in (select c_id from db_uim.t_aty_user u1 where not exists (select * from db_uim_1122.t_aty_user u2 where u1.c_id = u2.c_id))
可以依據專案情況,寫矯正sql
對於一些簡單的情況,如資料量不是很大,要配平的表不是很多,可以通過資料庫自帶的外部表機制檢測,如postgresql的fdw,sybase和sqlserver的**表、oracle的dblink、mysql的federated 。當然,最好的方式是通過我司的「資料配平平台」實現!

資料一致性

資料一致性通常指關聯資料之間的邏輯關係是否正確和完整。而資料儲存的一致性模型則可以認為是儲存系統和資料使用者之間的一種約定。如果使用者遵循這種約定,則可以得到系統所承諾的訪問結果。常用的一致性模型有 a 嚴格一致性 linearizability,strict atomic consistency ...

資料一致性

丟失更新 未確定的相關性 不一致的分析和幻想讀 事務a讀取與搜尋條件相匹配的若干行。事務b以插入或刪除行等方式來修改事務a的結果集,然後再提交。幻讀是指當事務不是獨立執行時發生的一種現象,例如第乙個事務對乙個表中的資料進行了修改,比如這種修改涉及到表中的 全部資料行 同時,第二個事務也修改這個表中的...

資料一致性

資料一致性通常指關聯資料之間的邏輯關係是否正確和完整。而資料儲存的一致性模型則可以認為是儲存系統和資料使用者之間的一種約定。如果使用者遵循這種約定,則可以得到系統所承諾的訪問結果。常用的一致性模型有 a 嚴格一致性 linearizability,strict atomic consistency ...