數據庫做拆分的幾種方式


數據庫做拆分的幾種方式:
1.按功能划分(垂直切分)

將不同功能相關的表放到不同的數據庫中,這樣做的好處是非常直觀。但當某一部分的功能其數據量或性能要求超出了可控的范圍,就需要繼續對其進行深入的再切分。

 

2.按表中某一字段值的范圍划分(水平切分)

當伴隨着某一個表的數據量越來越大,以至於不能承受的時候,就需要對它進行進一步的切分。一種選擇是根據key 的范圍來做切分,譬如ID 為 1-10000的放到A上,ID 為10000~20000的放到B。這樣的擴展就是可預見的。另一種是根據某一字段值來划分,譬如根據用戶名的首字母,如果是A-D,就屬於A,E-H就屬於B。這樣做也存在不均衡性,當某個范圍超出了單點所能承受的范圍就需要繼續切分。還有按日期切分等等。

 

優點:單表大小可控,天然水平擴展

缺點:無法解決集中寫入瓶頸的問題


3.基於hash的切分

一般采用mod來切分,一開始確定切分數據庫的個數,通過hash取模來決定使用哪台。這種方法能夠平均地來分配數據,但是伴隨着數據量的增大,需要進行擴展的時候,這種方式無法做到在線擴容。每增加節點的時候,就需要對hash 算法重新運算。

 

所以采用這種方法推薦采用mod 2^n這種一致性哈希

以點評統一訂單庫為例,分庫分表的方案是32*32的,即通過userId后四位mod 32分到32個庫中,同時再將userId后四位div 32 mod 32將每個庫分為32個表,共計分為1024張表。其線上部署情況為8個集群(主從),每個集群4個庫

 

 

4.基於路由表的切分

前面的幾種方式都是根據應用的數據來決定操作的,基於路由表的切分是一種更加松散的方法。它單獨維護一張路由表,根據用戶的某一屬性來查找路由表決定使用哪個數據庫,這種方式是一種更加通用的方案

 

優點:id和庫的mapping算法可以隨意更改

缺點:可能引入額外的單點


免責聲明!

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



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