您好,登錄后才能下訂單哦!
本文小編為大家詳細介紹“MySQL分庫分表的方式有哪些”,內容詳細,步驟清晰,細節處理妥當,希望這篇“MySQL分庫分表的方式有哪些”文章能幫助大家解決疑惑,下面跟著小編的思路慢慢深入,一起來學習新知識吧。
如果一個網站業務快速發展,那這個網站流量也會增加,數據的壓力也會隨之而來,比如電商系統來說雙十一大促對訂單數據壓力很大,Tps十幾萬并發量,如果傳統的架構(一主多從),主庫容量肯定無法滿足這么高的Tps,業務越來越大,單表數據超出了數據庫支持的容量,持久化磁盤IO,傳統的數據庫性能瓶頸,產品經理業務·必須做,改變程序,數據庫刀子切分優化。數據庫連接數不夠需要分庫,表的數據量大,優化后查詢性能還是很低,需要分。
分庫分表方案是對關系型數據庫數據存儲和訪問機制的一種補充。
分庫:將一個庫的數據拆分到多個相同的庫中,訪問的時候訪問一個庫
分表:把一個表的數據放到多個表中,操作對應的某個表就行
(1) 數據庫垂直拆分
根據業務拆分,如圖,電商系統,拆分成訂單庫,會員庫,商品庫
(2)表垂直拆分
根據業務去拆分表,如圖,把user表拆分成user_base表和user_info表,use_base負責存儲登錄,user_info負責存儲基本用戶信息
垂直拆分特點:
每個庫(表)的結構都不一樣
每個庫(表)的數據至少一列一樣
每個庫(表)的并集是全量數據
垂直拆分優缺點
優點:
拆分后業務清晰(專庫專用按業務拆分)
數據維護簡單,按業務不同,業務放到不同機器上
缺點:
如果單表的數據量,寫讀壓力大
受某種業務決定,或者被限制,也就是說一個業務往往會影響到數據庫的瓶頸(性能問題,如雙十一搶購)
部分業務無法關聯join,只能通過java程序接口去調用,提高了開發復雜度
(1) 數據庫水平拆分
如圖,按會員庫拆分,拆分成會員1庫,會員2庫,以userId拆分,userId尾號0-5為1庫 6-9為2庫,還有其他方式,進行取模,偶數放到1庫,奇數放到2庫
(2) 表水平拆分
如圖把users表拆分成users1表和users2表,以userId拆分,進行取模,偶數放到users1表,奇數放到users2表
水平拆分的其他方式:
range來分,每個庫一段連續的數據,這個一般是按比如時間范圍來的,但是這種一般較少用,因為很容易產生熱點問題,大量的流量都打在最新的數據上了,優點:擴容的時候,就很容易,因為你只要預備好,給每個月都準備一個庫就可以了,到了一個新的月份的時候,自然而然,就會寫新的庫了 缺點:大部分的 請求,都是訪問最新的數據。實際生產用range,要看場景,你的用戶不是僅僅訪問最新的數據,而是均勻的訪問現在的數據以及歷史的數據
hash分發,優點:可以平均分配每個庫的數據量和請求壓力 缺點:擴容起來比較麻煩,會有一個數據遷移的這么一個過程
(3) 水平拆分特點
每個庫(表)的結構都一樣
每個庫(表)的數據都不一樣
每個庫(表)的并集是全量數據
(4) 水平拆分優缺點
優點:
單庫/單表的數據保持在一定量(減少),有助于性能提高
提高了系統的穩定性和負載能力
拆分表的結構相同,程序改造較少。
缺點:
數據的擴容很有難度維護量大
拆分規則很難抽象出來
分片事務的一致性問題部分業務無法關聯join,只能通過java程序接口去調用
分布式事務
跨庫join查詢
分布式全局唯一id
開發成本 對程序員要求高
(1) 分庫分表的開源框架
jdbc 直連層:shardingsphere、tddl
proxy 代理層:mycat,mysql-proxy(360)
jdbc直連層
jdbc直連層又叫jdbc應用層,是因為所有分片規則,所有分片邏輯,包括處理分布式事務 所有這些問題它都是在應用層,所有項目都是由war包構成的,所有分片都寫成了jar包,放到了war包里面,java需要虛擬機去運行的,虛擬機運行的時候就會把war包里面的字節文件進行classLoder加載到jvm內存中,所有分片邏輯都是基于內存方進行操作的
(2) proxy代理層
如圖,proxy代理層,所有分片規則,所有分片邏輯,包括處理分布式事務都在mycat寫好了,所有分片邏輯都是基于mycat方進行操作
(3) jdbc直連層和proxy代理層優缺點
jdbc直連層性能高,只支持java語言,支持跨數據庫
proxy代理層開發成本低,支持跨語言,不支持跨數據庫
讀到這里,這篇“MySQL分庫分表的方式有哪些”文章已經介紹完畢,想要掌握這篇文章的知識點還需要大家自己動手實踐使用過才能領會,如果想了解更多相關內容的文章,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。