一、目錄
- 需求
- 問題
- 解決方案
二、需求
現在有接近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同步。將同步資料打到同步表中,有同步程式同步,同時服務端有接收程式進行處理。