資料庫切分

2021-10-08 07:31:13 字數 1645 閱讀 4652

千萬量級的資料,用 mysql 要怎麼存?

初學者在看到這個問題的時候,可能首先想到的是 mysql 一張表到底能存放多少條資料?

根據 mysql 官方文件的介紹,mysql 理論上限是 (232)2 條資料,然而實際操作中,往往還受限於下面兩條因素:

myisam_data_pointer_size,mysql 的 myisam_data_pointer_size 一般預設是 6,即 48 位,那麼對應的行數就是 248-1。

表的儲存大小 256tb

那有人會說,只要我的資料大小不超過上限,資料行數也不超過上限,是不是就沒有問題了?其實不盡然。

在實際專案中,一般沒有哪個專案真的觸發到 mysql 資料的上限了,因為當資料量變大了之後,查詢速度會慢的嚇人,而一般這個時候,你的資料量離 mysql 的理論上限還遠著呢!

傳統的企業應用一般資料量都不大,資料也都比較容易處理,但是在網際網路專案中,上千萬、上億的資料量並不鮮見。在這種時候,還要保證資料庫的操作效率,我們就不得不考慮資料庫的分庫分表了。

這樣做有兩個好處:

1降低單台資料庫例項的負載

2可以方便的實現對資料庫的擴容

水平切分

原本放在乙個 db 中的 table 現在放在兩個 db 中,觀察之後我們發現:

1、兩個 db 中表的個數都是完整的,就是原來 db 中有幾張表,現在還是幾張。

2、每張表中的資料是不完整的,資料被拆分到了不同的 db 中去了。

這就是資料庫的水平切分,也可以理解為按照資料行進行切分,即按照表中某個欄位的某種規則來將表資料分散到多個庫之中,每個表中包含一部分資料。

1、按照日期劃分:不容日期的資料存放到不同的資料庫中。

2、對 id 取模:對錶中的 id 字段進行取模運算,根據取模結果將資料儲存到不同的例項中。

3、使用一致性雜湊演算法進行切分。

詳細的用法,將在後面的文章中和大家仔細說。

垂直切分

切分特點如下:

1、每乙個資料庫例項中的表的數量都是不完整的。

2、每乙個資料庫例項中表的資料是完整的。

老實說,在實際專案中,資料庫垂直切分並不是一件容易的事,因為表之間往往存在著複雜的跨庫 join 問題,那麼這個時候如何取捨,就要考驗架構師的水平了!

兩種切分的優缺點

水平切分

優點水平切分最大的優勢在於資料庫的擴充套件性好,提前選好切分規則,資料庫後期可以非常方便的進行擴容。

有效提高了資料庫穩定性和系統的負載能力。拆分規則抽象好, join 操作基本可以資料庫做。

缺點水平切分後,分片事務一致性不容易解決。

拆分規則不易抽象,對架構師水平要求很高。

跨庫 join 效能較差。

垂直切分

優點一般按照業務拆分,拆分後業務清晰,可以結合微服務一起食用。

系統之間整合或擴充套件相對要容易很多。

資料維護相對簡單。

缺點最大的問題在於存在單庫效能瓶頸,資料表擴充套件不易。

跨庫 join 不易。

事務處理複雜。

結語雖然 mysql 中資料儲存的理論上限比較高,但是在實際開發中我們不會等到資料存不下的時候才去考慮分庫分表問題,因為在那之前,你就會明顯的感覺到資料庫的各項效能在下降,就要開始考慮分庫分表了。

好了,今天主要是向大家介紹一點概念性的東西,算是我們分布式資料庫中介軟體正式出場前的一點鋪墊。

資料庫切分之垂直切分

資料庫切分的垂直切分是根據業務而定的,就是把乙個系統所涉及到的表根據業務拆分成多個類,然後沒類放到乙個server上去,就會出現t1,t2,t3這三個表分表放在不同的伺服器上,這個叫水平拆分,根據是t1,t2,t3幾乎沒有關聯查詢。垂直切分的優點 資料庫的拆分簡單明瞭,拆分規則明確 應用程式模組清晰...

資料庫 流量切分 資料庫水平切分方法

在大中型專案中,在資料庫設計的時候,考慮到資料庫最大承受資料量,通常會把資料庫或者資料表水平切分,以降低單個庫,單個表的壓力。我這裡介紹兩個我們專案中常用的資料表切分方法。當然這些方法都是在程式中使用一定的技巧來路由到具體的表的。首先我們要確認根據什麼來水平切分?在我們的系統 sns 中,使用者的u...

資料庫 流量切分 資料庫水平切分方法

在大中型專案中,在資料庫設計的時候,考慮到資料庫最大承受資料量,通常會把資料庫或者資料表水平切分,以降低單個庫,單個表的壓力。我這裡介紹兩個我們專案中常用的資料表切分方法。當然這些方法都是在程式中使用一定的技巧來路由到具體的表的。首先我們要確認根據什麼來水平切分?在我們的系統 sns 中,使用者的u...