日本免费全黄少妇一区二区三区-高清无码一区二区三区四区-欧美中文字幕日韩在线观看-国产福利诱惑在线网站-国产中文字幕一区在线-亚洲欧美精品日韩一区-久久国产精品国产精品国产-国产精久久久久久一区二区三区-欧美亚洲国产精品久久久久

一次sharding,shardingjdbc( 二 )


此外,由于這一類型的業(yè)務(wù)數(shù)據(jù)量普遍較大,比如清算系統(tǒng)的清分明細(xì)、云管平臺(tái)的資源計(jì)量明細(xì)、訂單系統(tǒng)的訂單流水和云計(jì)算主機(jī)資源上報(bào)的性能數(shù)據(jù)等,如果只是使用單庫(kù)單表存儲(chǔ)的普通方案,那么在單表數(shù)據(jù)量達(dá)到千萬(wàn)級(jí)別以上的時(shí)候,單庫(kù)的IO讀寫能力將持續(xù)降低,會(huì)成為業(yè)務(wù)系統(tǒng)整體吞吐量和性能的瓶頸 。對(duì)于上述的問題,有一些對(duì)DB較為熟悉的同學(xué)第一時(shí)間想到的解決方案,可能會(huì)是MySQL的分區(qū)表 。
MySQL的分區(qū)表比較適合用于解決業(yè)務(wù)數(shù)據(jù)具有較強(qiáng)時(shí)間序列特點(diǎn),且數(shù)據(jù)量偏大的場(chǎng)景 。但是,如果SQL的查詢條件并非基于時(shí)間維度的,那么執(zhí)行起來(lái)的效率并不會(huì)有所改觀,同時(shí)對(duì)于處理單表千萬(wàn)級(jí)別以上數(shù)據(jù)量時(shí),MySQL的分區(qū)表方案還是會(huì)顯得有些“力不從心” 。對(duì)于以上這種“流水”/“明細(xì)”類的業(yè)務(wù)數(shù)據(jù),作者還是推薦使用水平切分的方案從根本上來(lái)解決業(yè)務(wù)上遇到的單表數(shù)據(jù)過(guò)大的問題 。
由于該類型的業(yè)務(wù)數(shù)據(jù)基本不會(huì)涉及跨庫(kù)的Join連表SQL查詢、只需保證分庫(kù)的本地事務(wù),且并不會(huì)遇到上面水平切分方案中的幾個(gè)需要考慮的問題,對(duì)于這樣子的業(yè)務(wù)場(chǎng)景可以考慮使用水平切分的方案 。那么,我們應(yīng)該選擇哪一款開源的分庫(kù)分表組件,又或者是根據(jù)業(yè)務(wù)情況來(lái)自己定制化研發(fā)呢?選型分庫(kù)分表中間件的分析如果業(yè)務(wù)系統(tǒng)設(shè)計(jì)之初打算采用水平切分方案的話,那么有必要好好思考下如何來(lái)選型分庫(kù)分表的中間件 。
在當(dāng)前業(yè)界開源組件中比較流行的兩款代表分別為ShardingJdbc和MyCat 。ShardingJdbc這款分庫(kù)分表組件代表了客戶端類的分庫(kù)分表技術(shù)框架,其定位為輕量級(jí)數(shù)據(jù)庫(kù)驅(qū)動(dòng),可以由Spring Boot這樣的業(yè)務(wù)工程直接快速集成,以jar包形式提供服務(wù),無(wú)需額外部署和其他依賴 。對(duì)于業(yè)務(wù)系統(tǒng)的開發(fā)人員與數(shù)據(jù)庫(kù)運(yùn)維人員無(wú)需改變?cè)械拈_發(fā)與運(yùn)維方式 。
在2.X版本中,采用"半理解"理念的SQL解析引擎,以達(dá)到性能與兼容性的最大平衡 。因此,ShardingJdbc即為增強(qiáng)版的JDBC驅(qū)動(dòng),其優(yōu)勢(shì)在于無(wú)需對(duì)原有的業(yè)務(wù)工程進(jìn)行任何改造的基礎(chǔ)上,即可使其擁有分庫(kù)分表的能力,成本較低,易于上手 。但是,也有缺點(diǎn),中間件與業(yè)務(wù)應(yīng)用工程綁定在一起,對(duì)應(yīng)用本身有侵入 。
并且目前只支持Java語(yǔ)言,問題難以追蹤 。而MyCat是一個(gè)開源的分布式數(shù)據(jù)庫(kù)系統(tǒng)(屬于代理類框架),相當(dāng)于一個(gè)實(shí)現(xiàn)了MySQL協(xié)議的數(shù)據(jù)庫(kù)代理服務(wù)器 。用戶可以使用MySQL客戶端工具和命令行訪問,而其后端使用MySQL原生協(xié)議與多個(gè)MySQL數(shù)據(jù)庫(kù)服務(wù)器通信,也可以用JDBC協(xié)議與大多數(shù)主流數(shù)據(jù)庫(kù)服務(wù)器通信 。
其分庫(kù)分表的方案優(yōu)點(diǎn)在于,能夠處理非常復(fù)雜的需求,不受數(shù)據(jù)庫(kù)訪問層原來(lái)實(shí)現(xiàn)的限制,擴(kuò)展性強(qiáng)且對(duì)于應(yīng)用服務(wù)透明且沒有增加任何額外負(fù)載 。其缺點(diǎn)是上線部署需要額外的中間件,增加運(yùn)維成本;應(yīng)用服務(wù)需經(jīng)過(guò)代理來(lái)連接數(shù)據(jù)庫(kù),網(wǎng)絡(luò)上多了一層鏈接的開銷,性能有損失且有額外風(fēng)險(xiǎn) 。使用ShardingJdbc解決的基本業(yè)務(wù)場(chǎng)景選擇ShardingJdbc組件后,就需要使用該組件來(lái)解決實(shí)際的問題 。
這一節(jié)主要根據(jù)之前提到的“流水”/“明細(xì)”一類的業(yè)務(wù)數(shù)據(jù),同時(shí)結(jié)合ShardingJdbc組件的特點(diǎn)來(lái)進(jìn)行一定的分析,使得讀者對(duì)正確使用ShardingJdbc組件進(jìn)行業(yè)務(wù)系統(tǒng)水平切分有一定的了解 。前面已經(jīng)提到了“流水”/ “明細(xì)”類的業(yè)務(wù)數(shù)據(jù),一般是準(zhǔn)實(shí)時(shí)或者說(shuō)相對(duì)滯后,需要按小時(shí)、按日和按月匯總處理后生成最終的業(yè)務(wù)數(shù)據(jù)(如賬單、報(bào)表和話單等) 。
我們對(duì)“流水”/“明細(xì)型”業(yè)務(wù)數(shù)據(jù)處理過(guò)程中,一般都會(huì)涉及數(shù)據(jù)落庫(kù)(Insert SQL)、數(shù)據(jù)分組匯總和分組查詢(Select sum(xxx) Group By SQL)以及刪除數(shù)據(jù)表(Delete SQL)等業(yè)務(wù)處理操作 。這里有必要對(duì)這幾種類型的SQL進(jìn)行一定的說(shuō)明:a. 數(shù)據(jù)落庫(kù)(Insert SQL):流水/明細(xì)類的數(shù)據(jù)一般都需要先DB持久化處理;以云計(jì)算平臺(tái)中10W臺(tái)虛擬機(jī)同時(shí)產(chǎn)生性能明細(xì)數(shù)據(jù)上報(bào),如果是單庫(kù)單表,則這個(gè)數(shù)據(jù)庫(kù)會(huì)進(jìn)行每小時(shí)會(huì)有10W次的寫請(qǐng)求;如果使用100個(gè)分表(分10個(gè)庫(kù),每庫(kù)10個(gè)表)則每個(gè)表平均承受1000次寫請(qǐng)求,每個(gè)庫(kù)平均分擔(dān)1W次的請(qǐng)求壓力,這樣子就可以將原來(lái)單庫(kù)單表的寫請(qǐng)求壓力成倍的減少;一般業(yè)務(wù)研發(fā)人員使用ShardingJdbc組件,設(shè)置合理的數(shù)據(jù)分片路由規(guī)則,即可使得流水/明細(xì)類的數(shù)據(jù)基本均勻落在我們預(yù)先設(shè)置的分庫(kù)分表中 。

推薦閱讀