大战熟女丰满人妻av-荡女精品导航-岛国aaaa级午夜福利片-岛国av动作片在线观看-岛国av无码免费无禁网站-岛国大片激情做爰视频

專注Java教育14年 全國咨詢/投訴熱線:400-8080-105
動力節(jié)點(diǎn)LOGO圖
始于2009,口口相傳的Java黃埔軍校
首頁 hot資訊 Mycat分表的原理是什么

Mycat分表的原理是什么

更新時間:2021-06-15 16:21:04 來源:動力節(jié)點(diǎn) 瀏覽1565次

MyCat適應(yīng)于那些場景

數(shù)據(jù)量大到單機(jī)hold不住,而又不希望調(diào)整架構(gòu)切換為NoSQL數(shù)據(jù)庫,這個場景下可以考慮適用mycat。當(dāng)然,使用前也應(yīng)該做規(guī)劃,哪些表需要分片等等。另外mycat對跨庫join的支持不是很好,在使用mycat的時候要注意規(guī)避這種場景。其實(shí)不至這一種方式,還有其他的一些數(shù)據(jù)庫中間件。比如說TIDB或者是shardingsphere。shardingsphere沒有使用過,但是TIDB的的確確可以用于生產(chǎn)環(huán)境。

非分片字段查詢

MyCat中的路由結(jié)果是通過分片字段和分片方法來確定的。例如下圖中的MyCat分庫方案

根據(jù)tt_waybill表的id字段來進(jìn)行分片

分片方法為id值取3的模,根據(jù)模值確定在DB1,DB2,DB3中的某個分片

mycat分表

如果查詢條件中有 id 字段的情況還好,查詢將會落到某個具體的分片。例如:

mysql>select * from tt_waybill where id = 12330;

此時Mycat會計算路由結(jié)果

12330 % 3 = 0 –> DB1

并將該請求路由到DB1上去執(zhí)行。 


如果查詢條件中沒有 分片字段 條件,例如:

mysql>select * from tt_waybill where waybill_no =88661;

此時Mycat無法計算路由,便發(fā)送到所有節(jié)點(diǎn)上執(zhí)行:

DB1 –> select * from tt_waybill where waybill_no =88661; 
DB2 –> select * from tt_waybill where waybill_no =88661; 
DB3 –> select * from tt_waybill where waybill_no =88661;

如果該分片字段選擇度高,也是業(yè)務(wù)常用的查詢維度,一般只有一個或極少數(shù)個DB節(jié)點(diǎn)命中(返回結(jié)果集)。示例中只有3個DB節(jié)點(diǎn),而實(shí)際應(yīng)用中的DB節(jié)點(diǎn)數(shù)遠(yuǎn)超過這個,假如有50個,那么前端的一個查詢,落到MySQL數(shù)據(jù)庫上則變成50個查詢,會極大消耗Mycat和MySQL數(shù)據(jù)庫資源。如果設(shè)計使用Mycat時有非分片字段查詢,請考慮放棄!

分頁排序

先看一下Mycat是如何處理分頁操作的,假如有如下Mycat分庫方案:一張表有30份數(shù)據(jù)分布在3個分片DB上,具體數(shù)據(jù)分布如下:

DB1:[0,1,2,3,4,10,11,12,13,14]

DB2:[5,6,7,8,9,16,17,18,19]

DB3:[20,21,22,23,24,25,26,27,28,29]

mycat分表

當(dāng)應(yīng)用執(zhí)行如下分頁查詢時

mysql>select * from table limit 2;

Mycat將該SQL請求分發(fā)到各個DB節(jié)點(diǎn)去執(zhí)行,并接收各個DB節(jié)點(diǎn)的返回結(jié)果

DB1: [0,1] 
DB2: [5,6] 
DB3: [20,21]

但Mycat向應(yīng)用返回的結(jié)果集取決于哪個DB節(jié)點(diǎn)最先返回結(jié)果給Mycat。如果Mycat最先收到DB1節(jié)點(diǎn)的結(jié)果集,那么Mycat返回給應(yīng)用端的結(jié)果集為[0,1],如果Mycat最先收到DB2節(jié)點(diǎn)的結(jié)果集,那么返回給應(yīng)用端的結(jié)果集為[5,6]。也就是說,相同情況下,同一個SQL,在Mycat上執(zhí)行時會有不同的返回結(jié)果。

在Mycat中執(zhí)行分頁操作時必須顯示加上排序條件才能保證結(jié)果的正確性,下面看一下Mycat對排序分頁的處理邏輯。

假如在前面的分頁查詢中加上了排序條件(假如表數(shù)據(jù)的列名為id)。比如如下所示:

	mysql>select * from table order by id limit 2;

mycat分表

在有排序的條件的情況下,Mycat接收到各個DB節(jié)點(diǎn)的返回結(jié)果后,對其進(jìn)行最小堆運(yùn)算,計算出所有結(jié)果集中最小的兩條記錄 [0,1] 返回給應(yīng)用。但是,當(dāng)排序分頁中有 偏移量 (offset)時,處理邏輯又有不同。假如應(yīng)用的查詢SQL如下:

mysql>select * from table order by id limit 5,2;

mycat分表

Mycat將各個DB節(jié)點(diǎn)返回的數(shù)據(jù)[10,11],[16,17],[20,21]經(jīng)過最小堆計算后返回給應(yīng)用的結(jié)果集是[10,11]。可是,對于應(yīng)用而言,該表的所有數(shù)據(jù)明明是0-29這30個數(shù)據(jù)的集合,limit 5,2操作返回的結(jié)果集應(yīng)該是[5,6],如果返回[10,11]則是錯誤的處理邏輯。所以Mycat在處理有偏移量的排序分頁時是另外一套邏輯——改寫SQL。如下圖:

mycat分表

MyCat在下發(fā)有 limit m,n 的SQL語句時會對其進(jìn)行改寫,改寫成 limit 0, m+n 來保證查詢結(jié)果的邏輯正確性。所以,Mycat發(fā)送到后端DB上的SQL語句是:

mysql>select * from table order by id limit 0,7;
各個DB返回給Mycat的結(jié)果集是

DB1: [0,1,2,3,4,10,11] 
DB2: [5,6,7,8,9,16,17] 
DB3: [20,21,22,23,24,25,26]
經(jīng)過最小堆計算后得到最小序列 [0,1,2,3,4,5,6] ,然后返回偏移量為5的兩個結(jié)果為 [5,6] 。

雖然Mycat返回了正確的結(jié)果,但是仔細(xì)推敲發(fā)現(xiàn)這類操作的處理邏輯是及其消耗(浪費(fèi))資源的。應(yīng)用需要的結(jié)果集為2條,Mycat中需要處理的結(jié)果數(shù)為21條。也就是說,對于有t個DB節(jié)點(diǎn)的全分片limit m,n操作,Mycat需要處理的數(shù)據(jù)量為(m+n)*t個。比如實(shí)際應(yīng)用中有50個DB節(jié)點(diǎn),要執(zhí)行l(wèi)imit 1000,10操作,則Mycat處理的數(shù)據(jù)量為50500條,返回結(jié)果集為10,當(dāng)偏移量更大時,內(nèi)存和CPU資源的消耗則是數(shù)十倍增加。如果設(shè)計使用MyCat時有分頁排序,請考慮放棄!

以上就是動力節(jié)點(diǎn)Java培訓(xùn)機(jī)構(gòu)的小編針對“Mycat分表的原理是什么”的內(nèi)容進(jìn)行的回答,希望對大家有所幫助,如有疑問,請在線咨詢,有專業(yè)老師隨時為你服務(wù)。

提交申請后,顧問老師會電話與您溝通安排學(xué)習(xí)

免費(fèi)課程推薦 >>
技術(shù)文檔推薦 >>
主站蜘蛛池模板: 97色老99久久九九爱精品 | 欧美日韩在线播放 | 手机看片一区 | 一级网站片 | 女人18毛片特级一级免费视频 | 国产精品91视频 | 成 人 黄 色 视频播放1 | 国产亚洲欧美日韩在线看片 | 久久精品综合一区二区三区 | 久久桃花网| 综合啪啪 | 亚洲国产精品综合欧美 | 高清国产天干天干天干不卡顿 | 亚洲国产日韩综合久久精品 | 玖玖在线资源 | 天天爱天天干天天操 | 国产精品乱 | 久久精品国产99国产精品亚洲 | 福利午夜国产网站在线不卡 | 爱爱免费视屏 | a毛片在线还看免费网站 | 四虎成人国产精品视频 | 亚洲综合图片区 | 久99久热只有精品国产99 | 免费人成网站在线高清 | 日韩亚洲一区中文字幕 | 国产在线精品观看一区 | 国内精品久久久久影院嫩草 | 国产剧情自拍 | 91香蕉网站| 欧美一级片网站 | 久久久精品 | 精品无人区乱码1区2区 | 久久精品国产亚洲麻豆 | 欧美破处在线 | 日日夜人人澡人人澡人人看免 | 国产一区二区三区久久 | 亚洲精品中文字幕乱码三区一二 | 久久亚洲国产精品五月天 | 国产第一区二区三区在线观看 | 国产成人精品免费视频大全办公室 |