首頁 >常見問題 >資料庫拆分有幾種方式

資料庫拆分有幾種方式

hzc
hzc原創
2020-06-29 13:20:255605瀏覽

資料庫拆分有: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演算法可以隨意更改

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

以上是資料庫拆分有幾種方式的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn