分庫解決方案—資料儲存

K戰神發表於2014-12-23

一、目錄

  • 需求
  • 問題
  • 解決方案

二、需求

現在有接近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同步。將同步資料打到同步表中,有同步程式同步,同時服務端有接收程式進行處理。        

  

相關文章