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

MySQL分庫(kù)分表的幾種方式

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

一、為什么要分庫(kù)分表

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

二、什么是分庫(kù)分表

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

三、分庫(kù)分表的幾種方式

1.垂直拆分

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

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

(2)表垂直拆分

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

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

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

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

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

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

缺點(diǎn):

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

2. 水平拆分

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

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

(2) 表水平拆分

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

水平拆分的其他方式:

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

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

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

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

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

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

缺點(diǎn):

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

四、分庫(kù)分表帶來(lái)的問(wèn)題

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

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

(1) 分庫(kù)分表的開(kāi)源框架

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

jdbc直連層

jdbc直連層又叫jdbc應(yīng)用層,是因?yàn)樗蟹制?guī)則,所有分片邏輯,包括處理分布式事務(wù) 所有這些問(wèn)題它都是在應(yīng)用層,所有項(xiàng)目都是由war包構(gòu)成的,所有分片都寫(xiě)成了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寫(xiě)好了,所有分片邏輯都是基于mycat方進(jìn)行操作

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

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

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

相關(guān)文章

  • Windows下MySQL下載與安裝、配置與使用教程

    Windows下MySQL下載與安裝、配置與使用教程

    這篇文章主要為大家詳細(xì)介紹了Windows下MySQL下載與安裝、配置與使用教程,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-01-01
  • 超詳細(xì)教你怎么升級(jí)Mysql的版本

    超詳細(xì)教你怎么升級(jí)Mysql的版本

    今天教各位小伙伴怎么升級(jí)Mysql的版本,文中非常詳細(xì)的介紹了Mysql更換版本的操作,包括數(shù)據(jù)備份,卸載,安裝.對(duì)不會(huì)升級(jí)的小伙伴們很有幫助哦,需要的朋友可以參考下
    2021-05-05
  • 安裝MySQL 5.7出現(xiàn)報(bào)錯(cuò):unknown variable ‘mysqlx_port=0.0‘的解決方法

    安裝MySQL 5.7出現(xiàn)報(bào)錯(cuò):unknown variable ‘mysqlx_port

    這篇文章主要介紹了安裝MySQL 5.7出現(xiàn)報(bào)錯(cuò):unknown variable ‘mysqlx_port=0.0‘的解決方法,文中通過(guò)圖文結(jié)合的方式介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下
    2024-06-06
  • MySQL該如何判斷不為空詳析

    MySQL該如何判斷不為空詳析

    在MySQL數(shù)據(jù)庫(kù)中,在不同的情形下,空值往往代表不同的含義,這是MySQL數(shù)據(jù)庫(kù)的一種特性,下面這篇文章主要給大家介紹了關(guān)于MySQL該如何判斷不為空的相關(guān)資料,需要的朋友可以參考下
    2023-02-02
  • Mysql 5.7.19 免安裝版遇到的坑(收藏)

    Mysql 5.7.19 免安裝版遇到的坑(收藏)

    這篇文章給大家分享了mysql 5.7.19免安裝版在安裝過(guò)程中遇到的一些問(wèn)題,以前有mysql服務(wù)的話 需要去停掉mysql服務(wù)。具體內(nèi)容介紹大家參考下本文
    2017-08-08
  • 幾個(gè)縮減MySQL以節(jié)省磁盤(pán)空間的建議

    幾個(gè)縮減MySQL以節(jié)省磁盤(pán)空間的建議

    這篇文章主要介紹了幾個(gè)縮減MySQL以節(jié)省磁盤(pán)空間的建議,主要從表結(jié)構(gòu)和存儲(chǔ)內(nèi)容兩個(gè)方面來(lái)談減容,需要的朋友可以參考下
    2015-05-05
  • MySQL8.0.11版本的新增特性介紹

    MySQL8.0.11版本的新增特性介紹

    這篇文章主要介紹了MySQL8.0.11版本的新增特性介紹,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下
    2018-05-05
  • MySQL(基于GTID方式)實(shí)現(xiàn)主從復(fù)制和單主復(fù)制詳細(xì)教程

    MySQL(基于GTID方式)實(shí)現(xiàn)主從復(fù)制和單主復(fù)制詳細(xì)教程

    在分布式數(shù)據(jù)庫(kù)系統(tǒng)中,主從復(fù)制是實(shí)現(xiàn)高可用性和數(shù)據(jù)冗余的重要手段,基于GTID的復(fù)制模式可以提供更強(qiáng)的復(fù)制一致性和簡(jiǎn)化故障轉(zhuǎn)移過(guò)程,本文將詳細(xì)介紹如何配置單主復(fù)制的GTID模式,以便在MySQL數(shù)據(jù)庫(kù)中實(shí)現(xiàn)穩(wěn)定可靠的數(shù)據(jù)復(fù)制,需要的朋友可以參考下
    2024-07-07
  • MySQL中ESCAPE關(guān)鍵字的用法詳解

    MySQL中ESCAPE關(guān)鍵字的用法詳解

    這篇文章主要介紹了MySQL中ESCAPE關(guān)鍵字的用法詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12
  • Mysql字符串字段判斷是否包含某個(gè)字符串的2種方法

    Mysql字符串字段判斷是否包含某個(gè)字符串的2種方法

    這篇文章主要介紹了Mysql字符串字段判斷是否包含某個(gè)字符串的2種方法,本文使用Like和find_in_set兩種方法實(shí)現(xiàn),需要的朋友可以參考下
    2015-01-01

最新評(píng)論