1. 程式人生 > >路漫漫其修遠兮,吾將上下而求索。

路漫漫其修遠兮,吾將上下而求索。

目錄

背景介紹

背景介紹

剛進入專案組的時候,就聽老大說我們系統用了分庫分表,主要為了解決不同租戶的資料都存放在一起,資料量太大的問題。

但之前一直沒注意,正好這段時間好好看看,也瞭解一下分庫分表的功能是如何實現的。

分庫分表主要有幾種型別

垂直分庫:按照業務功能來劃分出不同的資料庫

基本思路就是按照業務功能來劃分出不同的資料庫,比如我們系統有賬戶模組,庫存模組,訂單模組,商品模組,倉庫模組,運輸模組等,那麼就可以將他們各自放在不同的資料庫中,如下圖:

垂直分表:大表拆小表

這種在日常開發和設計中比較常見,也就是“大表拆小表”的過程,是基於關於資料庫中的“列進行”的。

通常情況下,某個表的欄位比較多,就新增一張“擴充套件表”,將不經常使用的欄位拆分到“擴充套件表”裡面,具體如下圖,一個是使用者表,一個是使用者附加資訊表,其他他們可以合為一張表,但是這樣的話,使用者表的欄位就太多了,而且使用者附加資訊並不經常用到,只有在編輯使用者的時候才用到,所以我們將他分為兩張表。

 

 需要注意的是,拆分欄位的操作最好在資料庫設計階段就做好。如果在過程中拆分,就要修改原來的業務邏輯,很容易又引出新的bug。不要問我是怎麼知道的,emmmmm。

水平分表:資料表中不同行分佈在不同的資料表中

這個也就是將表中的資料行按一定的規律分在不同的資料表中(這些表儲存在同一資料庫中)。這樣可以降低單表的資料量,優化查詢效能。最常見的方式就是按主鍵取模拆分(如下圖的使用者表,為了使表內的資料更加平均。如果不平均的話,那麼一個表裡面的資料特別多,一個表裡面的資料特別少,則分表就沒有意義),和按日期拆分(日誌表,按每月拆分日誌表)。

但這樣多表還是存在於同一庫中,這樣對於庫來說,效能瓶頸還是存在的。

水平分庫分表:終極boss,大佬來了

也就是將上圖的水平分表再加上分庫,如下圖: