前言
做資料庫分表的時候,總是能看到水準切分、垂直切分,但是并不能了解何為水準、何為垂直。僅此做個記錄。
1.切分
一般情況下說的水準切分、垂直切分,都是指的資料庫層面的。
随着業務量的增加,資料量肯定快速增長,拿Mysql來說,單表資料量在百萬級内讀取效率還是可以的,可是一旦達到千萬級,性能會有較大的降低。如果是複雜的搜尋,那麼組合索引對于記憶體來說也是一筆很大的開銷。這個時候就需要從資料庫層面來進行優化了。
普遍采用的方式就是資料庫 垂直切分+ 水準切分的方式來進行改進。
1.1垂直切分
垂直拆分:原來一個表的資訊,拆分到兩個或者多個表中,通過主鍵來進行關聯。(垂直拆分列,列資料拆分到不同表中)
垂直切分的優點
- 資料庫的拆分簡單明了,拆分規則明确;
- 應用程式子產品清晰明确,整合容易;
- 資料維護友善易行,容易定位;
垂直切分的缺點
- 部分表關聯無法在資料庫級别完成,需要在程式中完成;
- 單表大資料量仍然存在性能瓶頸;
- 事務處理相對更為複雜;
- 切分達到一定程度之後,擴充性會遇到限制;
1.2水準切分
水準切分:把一個表的資料按照某種規則劃分到不同表或資料庫裡。(水準拆分行,行資料拆分到不同表中)
水準切分的優點
- 解決單表大資料量性能遇到瓶頸的問題;
- 應用程式端整體架構改動相對較少;
- 事務處理相對簡單;
- 隻要切分規則能夠定義好,基本上較難遇到擴充性限制;
水準切分的缺點
- 切分規則相對更為複雜,很難抽象出一個能夠滿足整個資料庫的切分規則;
- 後期資料的維護難度有所增加,人為手工定位資料更困難;
- 應用系統各子產品耦合度較高,可能會對後面資料的遷移拆分造成一定的困難。
2.擴充
一般情況下說的水準擴充、垂直擴充,都是指的服務層面的。
當一個開發人員提升計算機系統負荷時,通常會考慮兩種方式垂直擴充和水準擴充。選用哪種政策主要依賴于要解決的問題 以及系統資源的限制。
2.1垂直擴充
在垂直擴充模型中,想要增加系統負荷就意味着要在系統現有的部件上下工夫,即通過提高系統部件的能力來實作。
比如增加機器的記憶體,提高單機處理能力,拆分功能到不同的機器上部署等等。
垂直擴充旨在提高自身效率,但總會遇到自身的瓶頸。
2.2水準擴充
在水準擴充模型中,通過增加更多的系統成員來實作。也就是通常所說的加機器。
當你的大量請求并發的時候,可以通過分布式的方式,讓請求均勻的分布到不同的機器上,減小壓力。
總結
簡而言之:
垂直擴充:拆分功能為小功能,來轉移壓力的發生。
水準擴充:複制相同的表、庫、伺服器來共同承擔壓力。