欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

MySQL分庫分表的幾種方式

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

一、為什么要分庫分表

如果一個(gè)網(wǎng)站業(yè)務(wù)快速發(fā)展,那這個(gè)網(wǎng)站流量也會(huì)增加,數(shù)據(jù)的壓力也會(huì)隨之而來,比如電商系統(tǒng)來說雙十一大促對(duì)訂單數(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)化后查詢性能還是很低,需要分。

二、什么是分庫分表

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

三、分庫分表的幾種方式

1.垂直拆分

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

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

(2)表垂直拆分

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

垂直拆分特點(diǎn):

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

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

優(yōu)點(diǎn):

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

缺點(diǎn):

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

2. 水平拆分

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

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

(2) 表水平拆分

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

水平拆分的其他方式:

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

(3) 水平拆分特點(diǎn)

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

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

優(yōu)點(diǎn):

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

缺點(diǎn):

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

四、分庫分表帶來的問題

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

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

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

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

jdbc直連層

jdbc直連層又叫jdbc應(yīng)用層,是因?yàn)樗蟹制?guī)則,所有分片邏輯,包括處理分布式事務(wù) 所有這些問題它都是在應(yīng)用層,所有項(xiàng)目都是由war包構(gòu)成的,所有分片都寫成了jar包,放到了war包里面,java需要虛擬機(jī)去運(yùn)行的,虛擬機(jī)運(yùn)行的時(shí)候就會(huì)把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)缺點(diǎn)

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

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

相關(guān)文章

最新評(píng)論