分表分庫:水平分割VS垂直分割

For Example(分表):

登錄系統的user表不同場景分割。

(分表詳述)1、登錄系統的user表水平分割:假設登錄用戶數據累計數百億,若只有一張表,每次用戶登錄發起請求的時候都要從數百億數據中select,select速度會非常慢。現可將一張表的模式拆分成100份,每張表數據量則降到數(個位數)億級,當用戶登錄的時候,可以將獲取到的用戶id取餘(id%100),執行DB操作select的時候將取模的數跟拆分的表名連接起來,構成新的表名,這時select的time會大幅度縮短。

(分表詳述)2、登錄系統的user表垂直分割:假設用戶表記錄並不多,若用戶通過問題與答案的方式找回密碼,若果問題與答案字段未加以長度限制,根據不同的用戶習慣,表中問題與答案字段會很長,表佔用空間很大,檢索表的時候需要執行大量的IO,性能嚴重降低。現可將大的字段拆分到另一表中,並且該表與原表是一對一的關係,這時當select不與問題跟答案相關的字段,就不會掃描問題與答案屬性了。

For Example(分庫):

在線商城購物系統現有如下:product產品表(數據量數十萬級,穩定),user用戶表(數據量百萬級,且有增長趨勢),訂單表(數據量數百萬級(200,300...),且有增長趨勢)。

(分庫簡述)1、水平拆分解決單表中數據量增長出現的壓力,不解決表與表之間的IO競爭。

First:user表以性別拆分爲man user表和women user表。

Second:product表未完成訂單放一個server上,已完成訂單表跟man user表放一個server上,women user表放一個server上。

Third:訂單表以是否完成拆分爲完成訂單和未完成訂單。

(分庫簡述)2、垂直拆分解決表與表之間的IO競爭,不解決單表中數據量增長出現的壓力。

First:將product表與user表放置到同一個server上。

Second:將訂單表獨立放置到一個server上。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章