一、目錄
- 需求
- 問題
- 解決方案
二、需求
現在有接近Z台分布式數據庫服務器,M台匯總數據庫。當前需要將Z台數據庫中的每個數據庫中的關鍵性數據同步到匯總數據庫上。匯總數據庫上的數據要求:實時,准確。

三、問題:
當前數據量比較大,數據插入更新頻繁。當前根據類型分庫,如果這一類數據出現問題,那影響的是這一類數據。
比如,當前有一億條數據,這些數據分為A類,B類,C類等等。同時,A類數據在Z1數據庫上,B類在Z2數據庫上,C類在Z3數據庫上。這些數據都會有一個唯一的Key。
這樣每個類別的數據庫分別建立同步機制。當前選擇的同步機制是MSSQL發布訂閱機制:
優點:方便
缺點:實時性差(數據量大時)
穩定性差(同步數據量大時,服務會停止,需要重新初始化,千萬級別的數據就會同步半天甚至一天更多)
不夠靈活(同步掛掉的時候,要從頭開始同步,沒有標志節點等等)
這樣根據以上的數據庫設計,如果這個庫的數據同步服務掛掉,那么這一類數據的實時性、准確性都會受到影響。
四、解決方案
(一)數據存儲
因為數據有唯一的key。不再根據A、B、C類去分類,我們將這些數據全部打散。根據算法存入設置的數據庫。每個數據庫400萬的數據。
唯一標識 —> 算法—> 轉化成1~255 —>分組—>存入數據庫
1)、唯一標識算法碼取到對應的值(1~255)
2)、我們將1~255,分位5組
Index Value
1 1~50
2 51~100
3 101~150
4 151~200
5 201~255
3)、數據庫和表
庫: 國家&區域 — Index — 組別
D1—Index—1 * D國家1區 —Index — Index=1的,即Value1~50
表: 國家&區域 — Index(組別) — Data—表編號
D1—1—Data—1 * D國家1區 — 組別為1 — Data — Table1
D1—1—Data—2 * D國家1區 — 組別為1 — Data — Table2
庫: 國家&區域 — Index — 組別
D1—Index—5 * D國家1區 —Index — Index=5的,即Value201~255
表: 國家&區域 — Index(組別) — Data—表編號
D1—5—Data—1 *D國家1區 — 組別為1 — Data — Table1
D1—5—Data—2 *D國家1區 — 組別為1 — Data — Table2
庫: 國家&區域 — Index — 組別
G11—Index—3 * G國家11區 —Index — Index=3的,即Value101~150
表: 國家&區域 — Index(組別) — Data—表編號
G11—3—Data—1 *G國家11區 — 組別為3 — Data — Table1
G11—3—Data—2 *G國家11區 — 組別為3 — Data — Table2
說明:
數據根據算法得到的值(1~255),分別存入到對應組別下的數據庫中,並且存入第一個表。當對應的的組別下的第一個表存滿400萬數據,立即在當前組別的數據庫下創建第二個表,以此類推。
好處:
所有數據Key值算法得到的值(1~255),分散比較平均,而且值是不會變的。這樣存儲得平均而且分散,如果有新的大量數據進入,也會有很好的擴展性,每個表存滿后就會創建新表。
問題:我們怎樣去查數據?
數據Key—通過算法得到Value—找到對應的Index組別—到對應組別數據庫下的表中查詢相關數據(多個表可以多個並發)
(二)數據同步
因為業務庫不能直連,我們采用webservice同步。將同步數據打到同步表中,有同步程序同步,同時服務端有接收程序進行處理。
