天天看點

分表分庫:水準分割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上。