資料庫水平切分的實現原理解析 分庫,分表

2021-09-02 17:18:15 字數 1293 閱讀 8958

[size=x-large][color=black][b]第1章 引言[/b][/color][/size]

隨著網際網路應用的廣泛普及,海量資料的儲存和訪問成為了系統設計的瓶頸問題。對於乙個大型的網際網路應用,每天幾十億的pv無疑對資料庫造成了相當高的負載。對於系統的穩定性和擴充套件性造成了極大的問題。通過資料切分來提高**效能,橫向擴充套件資料層已經成為架構研發人員首選的方式。

[list]

[*]水平切分資料庫:可以降低單台機器的負載,同時最大限度的降低了宕機造成的損失

[*]負載均衡策略:可以降低單台機器的訪問負載,降低宕機的可能性

[*]集群方案:解決了資料庫宕機帶來的單點資料庫不能訪問的問題

[*]讀寫分離策略:最大限度了提高了應用中讀取資料的速度和併發量

[/list]

[size=x-large][color=black][b]第2章 基本原理和概念[/b][/color][/size]

[size=large][color=black][b]什麼是資料切分[/b][/color][/size]

[img]

面對這樣的乙個表,我們怎樣切分呢?怎樣將這樣的資料分布到不同的資料庫中的表中去呢?我們可以這樣做,將user_id為1~10000的所有的文章資訊放入db1中的article表中,將user_id為10001~20000的所有文章資訊放入db2中的 article表中,以此類推,一直到dbn。這樣一來,文章資料就很自然的被分到了各個資料庫中,達到了資料切分的目的。

接下來要解決的問題就是怎樣找到具體的資料庫呢?其實問題也是簡單明顯的,既然分庫的時候我們用到了區分欄位user_id,那麼很自然,資料庫路由的過程當然還是少不了user_id的。就是我們知道了這個blog的user_id,就利用這個user_id,利用分庫時候的規則,反過來定位具體的資料庫。比如user_id是234,利用剛才的規則,就應該定位到db1,假如user_id是12343,利用該才的規則,就應該定位到db2。以此類推,利用分庫的規則,反向的路由到具體的db,這個過程我們稱之為「[color=red][b]db路由[/b][/color]」。

平常我們會自覺的按照正規化來設計我們的資料庫,考慮到資料切分的db設計,將違背這個通常的規矩和約束。為了切分,我們不得不在資料庫的表中出現冗餘字段,用作區分字段或者叫做分庫的標記字段。比如上面的article的例子中的user_id這樣的字段(當然,剛才的例子並沒有很好的體現出user_id的冗餘性,因為user_id這個字段即使就是不分庫,也是要出現的,算是我們撿了便宜吧)。當然冗餘欄位的出現並不只是在分庫的場景下才出現的,在很多大型應用中,冗餘也是必須的,這個涉及到高效db的設計,本文不再贅述。

參考:[url]

資料庫水平切分實現原理(一)

1.引言 隨著網際網路應用的普及,海量資料的儲存和訪問成為了系統設計的瓶頸問題。對於乙個大型的網際網路應用,每天幾十億pv無疑對資料庫造成了相當高的負載。對於系統的穩定性和擴充套件性造成了極大的問題。1 水平切分資料庫 可以降低單台機器的負載,同時最大限度的降低了宕機造成的損失 2 通過負載均衡策略...

資料庫切分之水平切分

資料庫切分之水平切分 水平切分的目的是為了控制單錶記錄數,從而保證同一型別的資料雜湊到不同的表或者不同的庫中。資料庫水平切分就是對某個表按照路由規則儲存在多個表中,如表t會拆分成t1,t2,t3這些表也有可能儲存在不同的庫中,也有可能儲存在同乙個庫中,如t表分別存在server1.t,server2...

資料庫的垂直切分和水平切分

分類 資料庫技術 2013 04 08 22 39 664人閱讀收藏 舉報資料切分可以是物理上的,對資料通過一系列的切分規則將資料分布到不同的db伺服器上,通過路由規則路由訪問特定的資料庫,這樣一來每次訪問面對的就不是單台伺服器了,而是n臺伺服器,這樣就可以降低單台機器的負載壓力。數據切分也可以是資...