您好,登錄后才能下訂單哦!
數據庫拆分的方式有哪幾種?相信很多沒有經驗的人對此束手無策,為此本文總結了問題出現的原因和解決方法,通過這篇文章希望你能解決這個問題。
數據庫拆分有:1、按功能劃分【垂直切分】,將不同功能相關的表放到不同的數據庫中,這樣做的好處是非常直觀;2、按表中某一字段值的范圍劃分【水平切分】,當伴隨著某一個表的數據量越來越大,以至于不能承受的時候,就需要對它進行進一步的切分。
數據庫做拆分的幾種方式:
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算法可以隨意更改
缺點:可能引入額外的單點
看完上述內容,你們掌握數據庫拆分的方式有哪幾種的方法了嗎?如果還想學到更多技能或想了解更多相關內容,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。