天天看點

水準切分和垂直切分的了解

前言

做資料庫分表的時候,總是能看到水準切分、垂直切分,但是并不能了解何為水準、何為垂直。僅此做個記錄。

1.切分

一般情況下說的水準切分、垂直切分,都是指的資料庫層面的。

随着業務量的增加,資料量肯定快速增長,拿Mysql來說,單表資料量在百萬級内讀取效率還是可以的,可是一旦達到千萬級,性能會有較大的降低。如果是複雜的搜尋,那麼組合索引對于記憶體來說也是一筆很大的開銷。這個時候就需要從資料庫層面來進行優化了。

普遍采用的方式就是資料庫 垂直切分+ 水準切分的方式來進行改進。

1.1垂直切分

垂直拆分:原來一個表的資訊,拆分到兩個或者多個表中,通過主鍵來進行關聯。(垂直拆分列,列資料拆分到不同表中)

垂直切分的優點

  • 資料庫的拆分簡單明了,拆分規則明确;
  • 應用程式子產品清晰明确,整合容易;
  • 資料維護友善易行,容易定位;

垂直切分的缺點

  • 部分表關聯無法在資料庫級别完成,需要在程式中完成;
  • 單表大資料量仍然存在性能瓶頸;
  • 事務處理相對更為複雜;
  • 切分達到一定程度之後,擴充性會遇到限制;

1.2水準切分

水準切分:把一個表的資料按照某種規則劃分到不同表或資料庫裡。(水準拆分行,行資料拆分到不同表中)

水準切分的優點

  • 解決單表大資料量性能遇到瓶頸的問題;
  • 應用程式端整體架構改動相對較少;
  • 事務處理相對簡單;
  • 隻要切分規則能夠定義好,基本上較難遇到擴充性限制;

水準切分的缺點

  • 切分規則相對更為複雜,很難抽象出一個能夠滿足整個資料庫的切分規則;
  • 後期資料的維護難度有所增加,人為手工定位資料更困難;
  • 應用系統各子產品耦合度較高,可能會對後面資料的遷移拆分造成一定的困難。

2.擴充

一般情況下說的水準擴充、垂直擴充,都是指的服務層面的。

當一個開發人員提升計算機系統負荷時,通常會考慮兩種方式垂直擴充和水準擴充。選用哪種政策主要依賴于要解決的問題 以及系統資源的限制。

2.1垂直擴充

在垂直擴充模型中,想要增加系統負荷就意味着要在系統現有的部件上下工夫,即通過提高系統部件的能力來實作。

比如增加機器的記憶體,提高單機處理能力,拆分功能到不同的機器上部署等等。

垂直擴充旨在提高自身效率,但總會遇到自身的瓶頸。

2.2水準擴充

在水準擴充模型中,通過增加更多的系統成員來實作。也就是通常所說的加機器。

當你的大量請求并發的時候,可以通過分布式的方式,讓請求均勻的分布到不同的機器上,減小壓力。

總結

簡而言之:

垂直擴充:拆分功能為小功能,來轉移壓力的發生。

水準擴充:複制相同的表、庫、伺服器來共同承擔壓力。