分庫解決方案—數據存儲


一、目錄

  • 需求
  • 問題
  • 解決方案

二、需求

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

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM