一、背景
隨著零售門店數量的增長,庫存表,優惠劵表,訊息表,訂單表資料量不斷的增多,目前一主(寫)多從的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 基本思想之為什麼要分庫分表?資料庫中的資料量不一定是可控的,在未進行分庫分表的情況下,隨著時間和業務的發展,庫中的表會越來越多,表中的資料量也會越來越大,相...
資料庫分庫 分表
分庫的優點是 實現簡單,庫與庫之間界限分明,便於維護,缺點是不利於頻繁跨庫操作,單錶資料量大的問題解決不了。分表的優點是 能解決分庫的不足點,但是缺點卻恰恰是分庫的優點,分表實現起來比較複雜,特別是分表規則的劃分,程式的編寫,以及後期的 資料庫拆分移植維護。實際應用中,一般網際網路企業的路線都是先分...
資料庫分庫分表
簡單了解資料庫分庫分表,以及資料庫的分片 什麼是分庫分表 原本儲存於乙個庫的資料分塊儲存到多個庫上,把原本儲存於乙個表的資料分塊儲存在到多個表上 為什麼分庫分表 當一張表的資料達到幾千萬時,你查詢一次所花的時間會變多,如果有聯合查詢的花,我想啃根會死在那。分表的目的就在於此,減少資料庫的負擔,縮短查...