文章目錄
- 為什么需要分庫
- 為什么需要分表
- 什么時候需要分庫分表
- 只需要分庫
- 只需要分表
- 分庫分表解決方案
- 垂直分庫
- 水平分庫
- 垂直分表
- 水平分表
- 分庫分表常用算法
- 范圍算法
- hash分片
- 查表分片
- 分庫分表模式
- 客戶端模式
- 代理模式
今天跟著訓練營學習了分庫分表,整理了學習筆記。

為什么需要分庫
單機的數據庫連接數是有限的,在高并發的場景下同時操作一個數據庫容易將連接耗盡,使后序的數據庫訪問無法正常進行。
同時也是容量問題,單機容量畢竟使有限的,當存儲量不斷增加,數據庫的容量無法全部承載。用多個庫在存儲,增加數據庫的實列。
為什么需要分表
當一張表的數據庫很大的時候,查詢會變得很慢,雖然底層基于b+樹速度還是很快的。分表可以減少每個表中的數據量,提高查詢的效率。
提升寫入性能,分表分散寫入壓力。
減輕鎖的競爭,大表容易出現鎖的競爭,導致性能下降。
什么時候需要分庫分表
只需要分庫
連接數不夠需要進行分庫。
微服務場景業務拆分,進行微服務拆分的時候根據業務邊界,將各個業務的數據從數據庫中拆分出來。
比如電商微服務系統,將訂單、物流、商品、會員等分別存儲到獨立數據庫中。
只需要分表
數據量太大了,單表超過了500萬行或者單表數據量超過了2GB,就推薦分表了。單表數據庫多,并發量不高,查詢和存儲性能遇到了瓶頸。
分庫分表解決方案
垂直分庫
專庫專用,根據不同的業務將數據放在不同的數據庫中去。
水平分庫
將單表數據庫切分到多個數據庫服務器上去,每個庫結構一樣。來實現水平拓展。
垂直分表
垂直分表使對業務中字段較多的大表進行的一種優化策略,比如用戶表分為兩個,一個是用戶的基本信息,還有一個是用戶的詳細信息。拆分后的小標只包含部分字段,兩個表之間通過主鍵和外鍵關聯。
水平分表
將一個表數據分到多個表中去。
分庫分表常用算法
范圍算法
根據時間、地點等信息,進行分庫分表。
hash分片
查表分片
分庫分表模式
客戶端模式
小公司使用
代理模式