1. 程式人生 > 其它 >關於資料可水平拆分和垂直拆分的學習記錄

關於資料可水平拆分和垂直拆分的學習記錄

前言

理解資料庫水平拆分、垂直拆分。學習記錄。

水平拆分

因為資料量非常大,所以針對資料量進行的分層,稱為水平拆分。

例:一個訂單表有100億條資料,如果查詢一條資料,得從這100億裡面查詢,會非常慢,如果將這一張表分成100份,每張表有1億條,就小了很多,比如order0,order1,order1...order99表 。

查詢訂單時候訂單orderid=123456789,可以將orderid%100,得到0-99的數,這裡得到89,然後就是查的是表名為order89的資料。這樣查詢的時間會大大縮短。

水平層面的拆分,就是行的拆分。即分層拆分。

垂直拆分

資料量不是特別大,但是存在著某些欄位很長,所以表佔用的空間很大,檢索的表的時候需要執行大量的IO,導致效能降低。需要將大的欄位拆分到另外的表裡,與原表形成一一對應的關係,這就是垂直拆分。

例如文章表article:有如下欄位:

Id writerName 點贊數 文章內容 瀏覽數 評論

其中文章內容評論是比較大的欄位,其他的欄位都比較小。

如果我們只想查詢id為2的文章的點贊數時候:

select 點贊數 from tt where id = 2

雖然只是查詢點贊數,但是文章內容評論這兩個大欄位也是要被掃描的,很消耗效能。這就可以使用垂直分割。我們可以把文章內容單獨放到一張表中,通過id與article表建立一對一的關係,同樣將評論單獨放到一張表中。這樣我們查詢article中的點贊數的時候就不會掃描文章內容評論了。

優缺點

解決的問題(優點) 不能解決的問題(缺點)
水平拆分 單表中資料量增長出現的壓力 表與表之間的io爭奪
垂直拆分 表與表之間的io競爭 單表中資料量增長出現的壓力

原博:https://www.cnblogs.com/sns007/p/5790838.html
參考:https://www.cnblogs.com/selinamee/p/6873969.html

拆分的本質

無論是水平拆分還是垂直拆分,本質上是為了解決“讀”的瓶頸問題。

參考:

https://baijiahao.baidu.com/s?id=1614304400276051465&wfr=spider&for=pc