mysql分表實踐

一、爲什麼分表

爲了解決大數據表導致的mysql性能低下的問題。那多少數據量算大數據表呢?當你的單表存儲數據量達到百萬,千萬級別時就該考慮分表了。我們部分業務的單表存儲已經達到了億級,分表前爲了加個字段,DBA和開發人員需要值守一晚上,還不一定能成功。終於忍不了了,媽的,拆表。

二、如何分表

常用的分表方式分爲兩類,垂直分表和水平分表

1、 垂直分表

所謂垂直分表,就是增加擴展表,來分單主表的壓力,原則是:
1.1 常用和不常用的分開,這種方式很常見,實現起來也比較簡單。
1.2 把大字段拆到單獨的表裏,我們會把text類型的字段單獨存儲。

2、水平分表

水平分表就是根據不同的維度把表拆分成多個。我們要根據不同的業務模型選擇不同的分表方式,這裏簡單介紹下我們用到的也是比較常用的兩種。

2.1冷熱數據分表:對於雖然存量數據很多,但是日常查詢只會用到近期數據的情況下,推薦這種方式。把冷熱數據分別放到兩張表裏,定時把熱數據表裏的數據遷到冷數據表裏,增刪改查都是操作的熱數據表。這種方式改造成本小,效果很好。

ticket_old //存儲存量不常用數據
ticket_tmp //存儲最新數據

2.2按業務屬性分表:分析業務場景中主要用的查詢字段是什麼,根據該字段對數據進行業務切分。比如說時間,類型等等。選取字段的時候既要兼顧業務需求,也要防止區分度太低導致分表的數據量依然龐大問題。

tikcet_201901
ticket_201902
...

2.3哈希分表:個人覺得跟2.2方式類似,如果業務查詢的字段是id類型,我們需要通過哈希取模來分表,如下。這也是我們系統目前採用的分表方式。當然具體用什麼哈希值去取模請根據自己的業務場景選定。
在這裏插入圖片描述

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