不同系統之間往往需要進行資料同步,保持資料的一致性。
比如每天需要從
hr主資料中同步人員資料到其他的業務系統系統
對於這種不同資料庫之間的資料同步,無非就是要解決遠端資料變化的三種形式:
insert
、update
、delete。
1、當遠端資料
insert
的時候,新增資料插入為本地資料。 2
、當遠端資料
update
的時候,如果更新的資料為需要的字段,更新本地資料,否則不處理 3
、當遠端資料
delete
的時候,在本地資料執行物理刪除或者邏輯刪除。
解決第一種情況需要乙個唯一字段:比如下表中的id,
id全域性唯一,當遠端資料產生新的
id可判斷為
insert,
解決第二種情況需要乙個唯一字段
+乙個增長字段:比如下表中的
updatetime
,該欄位根據時間增長,通過比較兩天的資料id,
id重複的為
update
解決第三種情況需要在第二種情況的基礎上加上乙個刪除標誌位,當滿足第二種情況且刪除標準位為
y,則為
delete
總結一下要實現兩個資料庫之間的資料同步需要滿足以上描述的三種條件:
唯一字段、增長字段、刪除標誌位
id
data1
data2
updatetime
isdelete
1
新增資料1
a 2013-10-20 n
2
新增資料2
b 2013-10-20 n
3
新增資料3
c 2013-10-20 n
id
data1
data2
updatetime
isdelete
2
更新資料2
a 2013-10-21 n
3
刪除資料3
b 2013-10-21 y
4
新增資料4
c 2013-10-21 n
假設另外一種情況、以上的條件只有乙個唯一的
id,比如下面的**,沒有增長字段、沒有刪除標誌位。
如何去同步兩邊的資料?
id
data1
data2
1
新增資料1
a 2
新增資料2
b 3
新增資料3
c
id
data1
data2
2
更新資料2
a 3
刪除資料3
c 4
新增資料4
b
解決的方法是:第一次同步資料之後,生成一張表
a,包含兩個字段,第乙個欄位是
id,第二個欄位是除了
id之外的其他所有字段拼接起來的
hash
字段;
第二次同步的時候將源表做同樣的處理生成
b表,關聯a表和
b表,比較
id相同,
hash
欄位不相等的,為更新的資料;
id在a
表存在、
b表不存在,為刪除的資料;
id在b
表存在、
a表不存在,為新增的資料
資料同步系統
l 資料節點 乙個資料庫例項稱為乙個資料節點,簡稱節點。資料庫不限於關聯式資料庫。資料同步是在資料節點之間進行。同步是節點表之間的資料的提取,轉換,寫入過程。資料在節點之間的同步,不要求強一致性,只需要保證最終一致性。資料節點標識,命名,儲存 對每個資料節點,全域性唯一dsid編碼和唯一的uname...
程序間的同步(作業系統)
乙個資料檔案或記錄,可被多個程序共享,我們把只要求讀該檔案的程序稱為 reader程序 其他程序則稱為 writer 程序 1.允許多個程序同時讀乙個共享物件,因為讀操作不會使資料檔案混亂。2.但不允許乙個 writer 程序和其他 reader 程序或 writer 程序同時訪問共享物件,因為這種...
執行緒間的同步
因為之前對執行緒的同步不是很清晰,並且也沒有怎麼重視,其實就是懶得動手,正好現在沒事所以練習一下。首先用到的幾個函式 handle hthread createthread null,0,fun,null,0,null 建立執行緒 fun的實現在下面貼出來 hmutex createmutex nu...