女人自慰AV免费观看内涵网,日韩国产剧情在线观看网址,神马电影网特片网,最新一级电影欧美,在线观看亚洲欧美日韩,黄色视频在线播放免费观看,ABO涨奶期羡澄,第一导航fulione,美女主播操b

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

為什么要分庫分表?MySQL分庫分表實踐

馬哥Linux運(yùn)維 ? 來源:稀土掘金 ? 2023-11-25 17:47 ? 次閱讀

一、為什么要分庫分表

數(shù)據(jù)庫架構(gòu)演變

剛開始多數(shù)項目用單機(jī)數(shù)據(jù)庫就夠了,隨著服務(wù)器流量越來越大,面對的請求也越來越多,我們做了數(shù)據(jù)庫讀寫分離, 使用多個從庫副本(Slave)負(fù)責(zé)讀,使用主庫(Master)負(fù)責(zé)寫,master和slave通過主從復(fù)制實現(xiàn)數(shù)據(jù)同步更新,保持?jǐn)?shù)據(jù)一致。slave 從庫可以水平擴(kuò)展,所以更多的讀請求不成問題

但是當(dāng)用戶量級上升,寫請求越來越多,怎么保證數(shù)據(jù)庫的負(fù)載足夠?增加一個Master是不能解決問題的, 因為數(shù)據(jù)要保存一致性,寫操作需要2個master之間同步,相當(dāng)于是重復(fù)了,而且架構(gòu)設(shè)計更加復(fù)雜

這時需要用到分庫分表(sharding),把庫和表存放在不同的MySQL Server上,每臺服務(wù)器可以均衡寫請求的次數(shù)

二、庫表太大產(chǎn)生的問題

單庫太大:單庫處理能力有限、所在服務(wù)器上的磁盤空間不足、遇到IO瓶頸,需要把單庫切分成更多更小的庫

單表太大:CRUD效率都很低,數(shù)據(jù)量太大導(dǎo)致索引文件過大,磁盤IO加載索引花費(fèi)時間,導(dǎo)致查詢超時。所以只用索引還是不行的,需要把單表切分成多個數(shù)據(jù)集更小的表。MyCat提供的分表算法都在rule.xml,可以根據(jù)不同的分表算法進(jìn)行拆分,比如根據(jù)時間拆分、一致性哈希、直接用主鍵對分表的個數(shù)取模等

拆分策略

單個庫太大,先考慮是表多還是數(shù)據(jù)多:

如果因為表多而造成數(shù)據(jù)過多,則使用垂直拆分,即根據(jù)業(yè)務(wù)拆分成不同的庫

如果因為單張表的數(shù)據(jù)量太大,則使用水平拆分,即把表的數(shù)據(jù)按照某種規(guī)則(mycat/conf/rule.xml定義的分表算法)拆分成多張表

分庫分表的原則應(yīng)該是先考慮垂直拆分,再考慮水平拆分

三、垂直拆分

分庫分表和讀寫分離可以共同進(jìn)行

1. 垂直分庫

server.xml



123456
USERDB1,USERDB2

配置了USERDB1、USERDB2這兩個邏輯庫

schema.xml





  
   
  
  
    
    
  
  
    select user()
    
  
  
  
    select user()
    
  

兩個邏輯庫對應(yīng)兩個不同的數(shù)據(jù)節(jié)點,兩個數(shù)據(jù)節(jié)點對應(yīng)兩個不同的物理機(jī)器

d78658b6-8b76-11ee-939d-92fbcf53809c.jpg

mytest1和mytest2分成了不同機(jī)器上的不同的庫,各包含一部分表,它們原來是合在一塊的,在一臺機(jī)器上,現(xiàn)在做了垂直的拆分。

客戶端就需要去連接不同的邏輯庫了,根據(jù)業(yè)務(wù)操作不同的邏輯庫

d79f1cf2-8b76-11ee-939d-92fbcf53809c.jpg

然后配置了兩個寫庫,兩臺機(jī)器把庫平分了,分擔(dān)了原來單機(jī)的壓力。分庫伴隨著分表,從業(yè)務(wù)上對表拆分

2. 垂直分表

垂直分表,基于列字段進(jìn)行。一般是針對幾百列的這種大表,也避免查詢時,數(shù)據(jù)量太大造成的“跨頁”問題。

一般是表中的字段較多,將不常用的, 數(shù)據(jù)較大,長度較長(比如text類型字段)的拆分到擴(kuò)展表。訪問頻率較高的字段單獨放在一張表

四、水平分表

針對數(shù)據(jù)量巨大的單張表(比如訂單表),按照某種規(guī)則(RANGE、HASH取模等),切分到多張表里面去。但是這些表還是在同一個庫中,所以庫級別的數(shù)據(jù)庫操作還是有IO瓶頸,不建議采用

將單張表的數(shù)據(jù)切分到多個服務(wù)器上去,每個服務(wù)器具有一部分庫與表,只是表中數(shù)據(jù)集合不同。水平分庫分表能夠有效的緩解單機(jī)和單庫的性能瓶頸和壓力,突破IO、連接數(shù)、硬件資源等的瓶頸

分庫分表可以和主從復(fù)制同時進(jìn)行,但不基于主從復(fù)制;讀寫分離才基于主從復(fù)制

1. 配置水平分表

server.xml



  123456
  USERDB

schema.xml





  
  
    
select user() select user()

d7b7cdec-8b76-11ee-939d-92fbcf53809c.jpg

user表示一個普通的表,直接放在數(shù)據(jù)節(jié)點dn1上,放在一臺機(jī)器上,這張表不用進(jìn)行拆分

student表的primaryKey是id,根據(jù)id拆分,放在dn1和dn2上,最終這個表要分在兩臺機(jī)器上,在物理上分開了,但是在邏輯上還是一個,往哪張表里增加,在2臺機(jī)器上查詢?nèi)缓笕绾魏喜⑦@些操作都是由mycat完成的

拆分的規(guī)則是取模(mod - long),每次插入用id模上存在的機(jī)器數(shù)(2)

此外還需要在rule.xml中配置以下拆分算法

找到算法mod-long,因為我們將邏輯表student分開映射到兩臺主機(jī)上,所以修改數(shù)據(jù)節(jié)點的數(shù)量為2

d7c959cc-8b76-11ee-939d-92fbcf53809c.jpg

2. 測試水平分表

Linux主機(jī)

d7d92852-8b76-11ee-939d-92fbcf53809c.jpg

Windows主機(jī)

d7ed7e2e-8b76-11ee-939d-92fbcf53809c.jpg

登錄到mycat的8066端口

d80afac6-8b76-11ee-939d-92fbcf53809c.jpg

使用MyCat給user表插入兩條數(shù)據(jù)

d818fff4-8b76-11ee-939d-92fbcf53809c.jpg

由于schema.xml配置文件中,邏輯表user只在Linux主機(jī)的mytest1庫中存在,mycat操作的邏輯表user會影響Linux主機(jī)上的物理表,而不會影響Windows主機(jī)上的表。我們分別查看一下Linux和Windows主機(jī)的user表:

d82fc40a-8b76-11ee-939d-92fbcf53809c.jpg

d83f9de4-8b76-11ee-939d-92fbcf53809c.jpg

我們再通過MyCat給student表插入兩條數(shù)據(jù)

d848736a-8b76-11ee-939d-92fbcf53809c.jpg

我們知道schema.xml配置文件中,邏輯表student對應(yīng)兩臺主機(jī)上的兩個庫mytest1、mytest2中的兩張表,所以對邏輯表插入的兩條數(shù)據(jù),會實際影響到兩張物理表(用id%機(jī)器數(shù),決定插入到哪張物理表)。我們分別查看一下Linux和Windows主機(jī)的student表:

d85938b2-8b76-11ee-939d-92fbcf53809c.jpg

再通過MyCat插入id=3和id=4的數(shù)據(jù),應(yīng)該插入不同主機(jī)上的不同物理表

d87106e0-8b76-11ee-939d-92fbcf53809c.jpg

d88a09ce-8b76-11ee-939d-92fbcf53809c.jpg

這就相當(dāng)于把student表進(jìn)行水平拆分了

通過MyCat查詢的時候只需要正常輸入就行,我們配置的是表拆分后放在這2個數(shù)據(jù)節(jié)點上,MyCat會根據(jù)配置在兩個庫上查詢并進(jìn)行數(shù)據(jù)合并

d8a37742-8b76-11ee-939d-92fbcf53809c.jpg






審核編輯:劉清

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • Linux
    +關(guān)注

    關(guān)注

    87

    文章

    11465

    瀏覽量

    212832
  • MySQL
    +關(guān)注

    關(guān)注

    1

    文章

    849

    瀏覽量

    27558

原文標(biāo)題:MySQL 分庫分表實踐

文章出處:【微信號:magedu-Linux,微信公眾號:馬哥Linux運(yùn)維】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦
    熱點推薦

    數(shù)據(jù)庫分區(qū)、分庫

    今天先說說數(shù)據(jù)庫的數(shù)據(jù)分區(qū),分庫以及的內(nèi)容吧! 數(shù)據(jù)庫分區(qū)、分庫 數(shù)據(jù)庫分區(qū)、
    的頭像 發(fā)表于 09-30 11:24 ?3387次閱讀

    談分布式數(shù)據(jù)庫中間件之分庫   

      分庫,顧名思義就是把原本存儲于一個庫的數(shù)據(jù)分塊存儲到多個庫上,把原本存儲于一個的數(shù)據(jù)分塊存儲到多個上。那么關(guān)于
    發(fā)表于 08-02 20:19

    分庫是什么?怎么實現(xiàn)?

    數(shù)據(jù)庫分庫、讀寫分離的原理實現(xiàn),使用場景
    發(fā)表于 10-25 17:24

    利用Mycat實現(xiàn)MySQL讀寫分離、分庫最佳實踐

    利用Mycat實現(xiàn)MySQL讀寫分離、分庫最佳實踐
    發(fā)表于 09-08 10:20 ?14次下載
    利用Mycat實現(xiàn)<b class='flag-5'>MySQL</b>讀寫分離、<b class='flag-5'>分庫</b><b class='flag-5'>分</b><b class='flag-5'>表</b>最佳<b class='flag-5'>實踐</b>

    結(jié)合實踐對水平分庫做一個系統(tǒng)地剖析

    及實施落地,這里結(jié)合項目實踐,對水平分庫做一個系統(tǒng)地剖析,希望為大家水平分庫(包括去IOE)改造提供思路,主要內(nèi)容包括: 水平分庫說明分庫
    發(fā)表于 10-11 17:46 ?0次下載
    結(jié)合<b class='flag-5'>實踐</b>對水平<b class='flag-5'>分庫</b>做一個系統(tǒng)地剖析

    數(shù)據(jù)庫分庫基礎(chǔ)和實踐

    決上述問題?如果僅僅通過增加一個主實例來分擔(dān)寫請求,寫操作如何在兩個主實例之間同步來保證數(shù)據(jù)一致性,如何避免雙寫,問題會變的更加復(fù)雜。這時就需要用到分庫(sharding),對寫操作進(jìn)行切分
    發(fā)表于 09-05 16:40 ?327次閱讀

    你們知道為什么分庫

    ? 這些問題你都搞清楚了嗎?相信看完這篇文章會有答案。 為什么分庫? 首先回答一下為什么
    的頭像 發(fā)表于 08-16 10:37 ?1690次閱讀

    優(yōu)化MySQL數(shù)據(jù)庫中樸實無華的和花里胡哨的分庫

    4、水平分庫 總結(jié) 首先我們要知道分庫都是干啥的,本文主角還是我們的MySQL為第一視角。首先從字面意思來看:
    的頭像 發(fā)表于 08-26 16:33 ?1405次閱讀

    你是否知道分庫需要哪些要素?

    分庫會重新影響數(shù)據(jù)的分布,無論是全量還是增量,都會涉及到數(shù)據(jù)遷移,所以Databus是必要的。
    的頭像 發(fā)表于 10-12 10:39 ?973次閱讀

    什么是分庫?為什么分庫?什么情況下會用分庫呢?

    分庫是由分庫這兩個獨立概念組成的,只不過通常分庫
    的頭像 發(fā)表于 11-30 09:37 ?7917次閱讀

    分庫的21條法則速來碼住(上)

    還是不著急實戰(zhàn),咱們先介紹下在分庫架構(gòu)實施過程中,會接觸到的一些通用概念,了解這些概念能夠幫助理解市面上其他的分庫表工具,盡管它們的實
    的頭像 發(fā)表于 05-26 17:33 ?731次閱讀
    <b class='flag-5'>分庫</b><b class='flag-5'>分</b><b class='flag-5'>表</b>的21條法則速來碼住(上)

    分庫的21條法則速來碼住(下)

    還是不著急實戰(zhàn),咱們先介紹下在分庫架構(gòu)實施過程中,會接觸到的一些通用概念,了解這些概念能夠幫助理解市面上其他的分庫表工具,盡管它們的實
    的頭像 發(fā)表于 05-26 17:33 ?774次閱讀
    <b class='flag-5'>分庫</b><b class='flag-5'>分</b><b class='flag-5'>表</b>的21條法則速來碼住(下)

    分庫后復(fù)雜查詢的應(yīng)對之道:基于DTS實時性ES寬構(gòu)建技術(shù)實踐

    1 問題域 業(yè)務(wù)發(fā)展的初期,我們的數(shù)據(jù)庫架構(gòu)往往是單庫單,外加讀寫分離來快速的支撐業(yè)務(wù),隨著用戶量和訂單量的增加,數(shù)據(jù)庫的計算和存儲往往會成為我們系統(tǒng)的瓶頸,業(yè)界的實踐多數(shù)采用分而治之的思想:分庫
    的頭像 發(fā)表于 06-25 18:30 ?1269次閱讀
    <b class='flag-5'>分庫</b><b class='flag-5'>分</b><b class='flag-5'>表</b>后復(fù)雜查詢的應(yīng)對之道:基于DTS實時性ES寬<b class='flag-5'>表</b>構(gòu)建技術(shù)<b class='flag-5'>實踐</b>

    軟件系統(tǒng)數(shù)據(jù)庫的分庫設(shè)計

    軟件系統(tǒng)數(shù)據(jù)庫的分庫設(shè)計 系統(tǒng)讀寫分離、分庫技術(shù)實現(xiàn)采用MyCat中間件,MyCat 是
    的頭像 發(fā)表于 08-22 11:39 ?530次閱讀
    軟件系統(tǒng)數(shù)據(jù)庫的<b class='flag-5'>分庫</b><b class='flag-5'>分</b><b class='flag-5'>表</b>設(shè)計

    或許我們都被分庫約束了思維

    、Polardb、StarDB等等。 國內(nèi)的項目好像很多都聚焦于分庫的概念,包括很多的數(shù)據(jù)庫團(tuán)隊都在嘗試這個概念的落地和沉溺于性能的跑。 最近我在預(yù)覽
    的頭像 發(fā)表于 02-21 09:51 ?217次閱讀