mysql資料庫分庫分表實踐

2021-10-05 16:44:35 字數 1432 閱讀 6540

一、背景

隨著零售門店數量的增長,庫存表,優惠劵表,訊息表,訂單表資料量不斷的增多,目前一主(寫)多從的mysql 架構難於支撐公司業務的爆發式增長

二、調研

前期在於重點解決 mysql 的單機效能和容量無法線性和靈活擴充套件的問題,最終選擇了 mycat,在調研階段,對以下技術特性進行了重點考慮:

協議相容 mysql

支援 sql 92標準

支援讀寫分離,支援mysql雙主多從,以及一主多從的模式

支援全域性表,資料自動分片到多個節點,用於高效表關聯查詢

支援獨有的基於e-r 關係的分片策略,實現了高效的表關聯查詢

三、架構設計改造

目前生產資料庫架構

改造後資料庫架構圖

四、測試環境測試

按範圍分割槽

制定基準列的取值範圍,然後把這一範圍的所有資料都放到乙個dn上面

優點:適用於整體數量可知或總數量為固定值的情況。

缺點:datanode 劃分節點是事先建好的,需要擴充套件時比較麻煩。潛在的問題,如果在短時間發生海量的順序插入操作,而每乙個datanode(分庫)設定的數量比較高(比如說乙個datanode設定的放1000w條資料),那麼在這個時候,會出現某乙個datanode(分庫)io壓力非常高,而其他幾個datanode(分庫)完全沒有io操作,就會出現類似於db中常見的熱塊/熱盤的現象

按列舉分片

此種分片規則理解為列舉分割槽,會比較適合於取值固定的場合,比如說性別(0,1),省份(固定值)。

優點:用逗號分隔可以把多個值放在乙個分割槽裡面。

缺點:其他非列舉情況不適合

按日期分片

切分規則根據配置中輸入的各項值。配置中配置了格式,開始日期,分割槽天數,即預設從開始日期算起,分隔10天乙個分割槽,需要提前將分片規劃好,建好,否則有可能日期超出實際配置分片數

取模切分規則根據配置中輸入的數值n。此種分片規則將資料分成n份(通常dn節點也為n),從而將資料均勻的分布於各節點上。

優點:這種策略可以很好的分散資料庫寫的壓力。比較適合於單點查詢的情景。

缺點:一旦出現了範圍查詢,就需要mycat去合併結果,當資料量偏高的時候,這種跨庫查詢+合併結果消耗的時間有可能會增加很多,尤其是還出現了order by的時候

一致性hash

優點有效解決了分布式資料庫的擴容問題

缺點:在橫向擴充套件的時候,需要遷移部分資料,由於虛擬桶倍數與分片節點數都必須是正整數,而且要服從"虛擬桶倍數×分片節點數=設計極限",因此在橫向擴容的過程中,增加分片節點並不是一台一台地加上去的,而是以一種因式分解的方式增加,因此有浪費物理計算力的可能性

五、線上部署實現

資料庫分庫分表

1 基本思想之什麼是分庫分表?從字面上簡單理解,就是把原本儲存於乙個庫的資料分塊儲存到多個庫上,把原本儲存於乙個表的資料分塊儲存到多個表上。2 基本思想之為什麼要分庫分表?資料庫中的資料量不一定是可控的,在未進行分庫分表的情況下,隨著時間和業務的發展,庫中的表會越來越多,表中的資料量也會越來越大,相...

資料庫分庫 分表

分庫的優點是 實現簡單,庫與庫之間界限分明,便於維護,缺點是不利於頻繁跨庫操作,單錶資料量大的問題解決不了。分表的優點是 能解決分庫的不足點,但是缺點卻恰恰是分庫的優點,分表實現起來比較複雜,特別是分表規則的劃分,程式的編寫,以及後期的 資料庫拆分移植維護。實際應用中,一般網際網路企業的路線都是先分...

資料庫分庫分表

簡單了解資料庫分庫分表,以及資料庫的分片 什麼是分庫分表 原本儲存於乙個庫的資料分塊儲存到多個庫上,把原本儲存於乙個表的資料分塊儲存在到多個表上 為什麼分庫分表 當一張表的資料達到幾千萬時,你查詢一次所花的時間會變多,如果有聯合查詢的花,我想啃根會死在那。分表的目的就在於此,減少資料庫的負擔,縮短查...