色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

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

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

一、為什么要分庫分表

數據庫架構演變

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

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

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

二、庫表太大產生的問題

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

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

拆分策略

單個庫太大,先考慮是表多還是數據多:

如果因為表多而造成數據過多,則使用垂直拆分,即根據業務拆分成不同的庫

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

分庫分表的原則應該是先考慮垂直拆分,再考慮水平拆分

三、垂直拆分

分庫分表和讀寫分離可以共同進行

1. 垂直分庫

server.xml



123456
USERDB1,USERDB2

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

schema.xml





  
   
  
  
    
    
  
  
    select user()
    
  
  
  
    select user()
    
  

兩個邏輯庫對應兩個不同的數據節點,兩個數據節點對應兩個不同的物理機器

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

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

客戶端就需要去連接不同的邏輯庫了,根據業務操作不同的邏輯庫

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

然后配置了兩個寫庫,兩臺機器把庫平分了,分擔了原來單機的壓力。分庫伴隨著分表,從業務上對表拆分

2. 垂直分表

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

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

四、水平分表

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

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

分庫分表可以和主從復制同時進行,但不基于主從復制;讀寫分離才基于主從復制

1. 配置水平分表

server.xml



  123456
  USERDB

schema.xml





  
  
    
select user() select user()

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

user表示一個普通的表,直接放在數據節點dn1上,放在一臺機器上,這張表不用進行拆分

student表的primaryKey是id,根據id拆分,放在dn1和dn2上,最終這個表要分在兩臺機器上,在物理上分開了,但是在邏輯上還是一個,往哪張表里增加,在2臺機器上查詢然后如何合并這些操作都是由mycat完成的

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

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

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

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

2. 測試水平分表

Linux主機

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

Windows主機

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

登錄到mycat的8066端口

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

使用MyCat給user表插入兩條數據

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

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

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

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

我們再通過MyCat給student表插入兩條數據

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

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

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

再通過MyCat插入id=3和id=4的數據,應該插入不同主機上的不同物理表

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

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

這就相當于把student表進行水平拆分了

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

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






審核編輯:劉清

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • Linux
    +關注

    關注

    87

    文章

    11312

    瀏覽量

    209695
  • MySQL
    +關注

    關注

    1

    文章

    816

    瀏覽量

    26606

原文標題:MySQL 分庫分表實踐

文章出處:【微信號:magedu-Linux,微信公眾號:馬哥Linux運維】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    數據庫分區、分庫

    今天先說說數據庫的數據分區,分庫以及的內容吧! 數據庫分區、分庫 數據庫分區、
    的頭像 發表于 09-30 11:24 ?2834次閱讀

    談分布式數據庫中間件之分庫   

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

    關于MySQL分區和的詳細介紹

    MySQL分區和
    發表于 07-10 07:40

    分庫是什么?怎么實現?

    數據庫分庫、讀寫分離的原理實現,使用場景
    發表于 10-25 17:24

    利用Mycat實現MySQL讀寫分離、分庫最佳實踐

    利用Mycat實現MySQL讀寫分離、分庫最佳實踐
    發表于 09-08 10:20 ?14次下載
    利用Mycat實現<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>

    結合實踐對水平分庫做一個系統地剖析

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

    數據庫分庫基礎和實踐

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

    你們知道為什么分庫

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

    優化MySQL數據庫中樸實無華的和花里胡哨的分庫

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

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

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

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

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

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

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

    分庫的21條法則速來碼?。ㄏ拢?/a>

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

    分庫后復雜查詢的應對之道:基于DTS實時性ES寬構建技術實踐

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

    軟件系統數據庫的分庫設計

    軟件系統數據庫的分庫設計 系統讀寫分離、分庫技術實現采用MyCat中間件,MyCat 是
    的頭像 發表于 08-22 11:39 ?330次閱讀
    軟件系統數據庫的<b class='flag-5'>分庫</b><b class='flag-5'>分</b><b class='flag-5'>表</b>設計
    主站蜘蛛池模板: 国产精品内射久久久久欢欢| 亚洲一区自拍高清亚洲精品| 国产CHINESE HD精品| 亚洲XXX午休国产熟女屁| 妹妹成人网| 日本护士性生活| 国产在线亚洲精品观看不卡| 在镜头里被CAO翻了H| 日本毛片久久国产精品| 狠狠色狠狠色狠狠五月ady| 99久久亚洲| 双性大乳浪受噗呲噗呲h总| 久久青草免费线观最新| 大胸美女被吊起来解开胸罩 | 快播av网址| 成人毛片手机版免费看| 亚洲人成77777在线视频| 青青久| 久久超碰色中文字幕| 粉色视频午夜网站入口| 中国老太性色xxxxxhd| 天堂岛www| 欧美成人精品高清在线观看| 激情欧美日韩一区二区| 国产 交换 丝雨 巅峰| 这里只有精品网| 午夜国产高清精品一区免费| 蜜桃传媒在线观看入口| 很很射影院| 国产成人8x视频一区二区| 99国内精精品久久久久久婷婷| 亚洲高清视频在线| 日韩熟女精品一区二区三区| 免费国产成人高清在线看软件 | 百性阁综合社区| 最新无码国产在线视频9299| 亚洲成AV人电影在线观看| 色人阁影视| 免费一区在线观看| 久久只精品99品免费久| 久草在线在线精品观看|
    <li id="qeuoc"><dl id="qeuoc"></dl></li>
    <abbr id="qeuoc"><source id="qeuoc"></source></abbr>
  • <dl id="qeuoc"><xmp id="qeuoc"></xmp></dl>
      <li id="qeuoc"></li>
    • <code id="qeuoc"></code>
    • <dl id="qeuoc"><acronym id="qeuoc"></acronym></dl>