亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

MySQL分庫分表的幾種方式

 更新時間:2022年04月28日 14:10:46   作者:請叫我黃同學(xué)  
這篇文章主要介紹了MySQL分庫分表的幾種方式,分庫分表方案是對關(guān)系型數(shù)據(jù)庫數(shù)據(jù)存儲和訪問機(jī)制的一種補(bǔ)充,下文更多相關(guān)介紹需要的小伙伴可以參考一下

一、為什么要分庫分表

如果一個網(wǎng)站業(yè)務(wù)快速發(fā)展,那這個網(wǎng)站流量也會增加,數(shù)據(jù)的壓力也會隨之而來,比如電商系統(tǒng)來說雙十一大促對訂單數(shù)據(jù)壓力很大,Tps十幾萬并發(fā)量,如果傳統(tǒng)的架構(gòu)(一主多從),主庫容量肯定無法滿足這么高的Tps,業(yè)務(wù)越來越大,單表數(shù)據(jù)超出了數(shù)據(jù)庫支持的容量,持久化磁盤IO,傳統(tǒng)的數(shù)據(jù)庫性能瓶頸,產(chǎn)品經(jīng)理業(yè)務(wù)·必須做,改變程序,數(shù)據(jù)庫刀子切分優(yōu)化。數(shù)據(jù)庫連接數(shù)不夠需要分庫,表的數(shù)據(jù)量大,優(yōu)化后查詢性能還是很低,需要分。

二、什么是分庫分表

  • 分庫分表方案是對關(guān)系型數(shù)據(jù)庫數(shù)據(jù)存儲和訪問機(jī)制的一種補(bǔ)充。
  • 分庫:將一個庫的數(shù)據(jù)拆分到多個相同的庫中,訪問的時候訪問一個庫
  • 分表:把一個表的數(shù)據(jù)放到多個表中,操作對應(yīng)的某個表就行

三、分庫分表的幾種方式

1.垂直拆分

(1) 數(shù)據(jù)庫垂直拆分

根據(jù)業(yè)務(wù)拆分,如圖,電商系統(tǒng),拆分成訂單庫,會員庫,商品庫

(2)表垂直拆分

根據(jù)業(yè)務(wù)去拆分表,如圖,把user表拆分成user_base表和user_info表,use_base負(fù)責(zé)存儲登錄,user_info負(fù)責(zé)存儲基本用戶信息

垂直拆分特點:

  • 每個庫(表)的結(jié)構(gòu)都不一樣
  • 每個庫(表)的數(shù)據(jù)至少一列一樣
  • 每個庫(表)的并集是全量數(shù)據(jù)

垂直拆分優(yōu)缺點

優(yōu)點:

  • 拆分后業(yè)務(wù)清晰(專庫專用按業(yè)務(wù)拆分)
  • 數(shù)據(jù)維護(hù)簡單,按業(yè)務(wù)不同,業(yè)務(wù)放到不同機(jī)器上

缺點:

  • 如果單表的數(shù)據(jù)量,寫讀壓力大
  • 受某種業(yè)務(wù)決定,或者被限制,也就是說一個業(yè)務(wù)往往會影響到數(shù)據(jù)庫的瓶頸(性能問題,如雙十一搶購)
  • 部分業(yè)務(wù)無法關(guān)聯(lián)join,只能通過java程序接口去調(diào)用,提高了開發(fā)復(fù)雜度

2. 水平拆分

(1) 數(shù)據(jù)庫水平拆分

如圖,按會員庫拆分,拆分成會員1庫,會員2庫,以userId拆分,userId尾號0-5為1庫 6-9為2庫,還有其他方式,進(jìn)行取模,偶數(shù)放到1庫,奇數(shù)放到2庫

(2) 表水平拆分

如圖把users表拆分成users1表和users2表,以userId拆分,進(jìn)行取模,偶數(shù)放到users1表,奇數(shù)放到users2表

水平拆分的其他方式:

  • range來分,每個庫一段連續(xù)的數(shù)據(jù),這個一般是按比如時間范圍來的,但是這種一般較少用,因為很容易產(chǎn)生熱點問題,大量的流量都打在最新的數(shù)據(jù)上了,優(yōu)點:擴(kuò)容的時候,就很容易,因為你只要預(yù)備好,給每個月都準(zhǔn)備一個庫就可以了,到了一個新的月份的時候,自然而然,就會寫新的庫了 缺點:大部分的 請求,都是訪問最新的數(shù)據(jù)。實際生產(chǎn)用range,要看場景,你的用戶不是僅僅訪問最新的數(shù)據(jù),而是均勻的訪問現(xiàn)在的數(shù)據(jù)以及歷史的數(shù)據(jù)
  • hash分發(fā),優(yōu)點:可以平均分配每個庫的數(shù)據(jù)量和請求壓力 缺點:擴(kuò)容起來比較麻煩,會有一個數(shù)據(jù)遷移的這么一個過程

(3) 水平拆分特點

  • 每個庫(表)的結(jié)構(gòu)都一樣
  • 每個庫(表)的數(shù)據(jù)都不一樣
  • 每個庫(表)的并集是全量數(shù)據(jù)

(4) 水平拆分優(yōu)缺點

優(yōu)點:

  • 單庫/單表的數(shù)據(jù)保持在一定量(減少),有助于性能提高
  • 提高了系統(tǒng)的穩(wěn)定性和負(fù)載能力
  • 拆分表的結(jié)構(gòu)相同,程序改造較少。

缺點:

  • 數(shù)據(jù)的擴(kuò)容很有難度維護(hù)量大
  • 拆分規(guī)則很難抽象出來
  • 分片事務(wù)的一致性問題部分業(yè)務(wù)無法關(guān)聯(lián)join,只能通過java程序接口去調(diào)用

四、分庫分表帶來的問題

  • 分布式事務(wù)
  • 跨庫join查詢
  • 分布式全局唯一id
  • 開發(fā)成本 對程序員要求高

五、分庫分表技術(shù)如何選型

(1) 分庫分表的開源框架

  • jdbc 直連層:shardingsphere、tddl
  • proxy 代理層:mycat,mysql-proxy(360)

jdbc直連層

jdbc直連層又叫jdbc應(yīng)用層,是因為所有分片規(guī)則,所有分片邏輯,包括處理分布式事務(wù) 所有這些問題它都是在應(yīng)用層,所有項目都是由war包構(gòu)成的,所有分片都寫成了jar包,放到了war包里面,java需要虛擬機(jī)去運行的,虛擬機(jī)運行的時候就會把war包里面的字節(jié)文件進(jìn)行classLoder加載到j(luò)vm內(nèi)存中,所有分片邏輯都是基于內(nèi)存方進(jìn)行操作的

(2) proxy代理層

如圖,proxy代理層,所有分片規(guī)則,所有分片邏輯,包括處理分布式事務(wù)都在mycat寫好了,所有分片邏輯都是基于mycat方進(jìn)行操作

(3) jdbc直連層和proxy代理層優(yōu)缺點

  • jdbc直連層性能高,只支持java語言,支持跨數(shù)據(jù)庫
  • proxy代理層開發(fā)成本低,支持跨語言,不支持跨數(shù)據(jù)庫

到此這篇關(guān)于MySQL分庫分表的幾種方式的文章就介紹到這了,更多相關(guān)MySQL分庫分表內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評論