国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

詳解數(shù)據(jù)庫(kù)分片,大幅提升Spring Boot查詢(xún)MySQL性能

數(shù)據(jù)庫(kù) 其他數(shù)據(jù)庫(kù)
我們既使用了表分片又使用了數(shù)據(jù)庫(kù)分片。除此以外,我們可以進(jìn)一步提高性能,方法是在單個(gè)服務(wù)器中增加更多的數(shù)據(jù)庫(kù),可能總共有1000個(gè)表的副本。

背景

微服務(wù)項(xiàng)目中通常包含各種服務(wù)。其中一項(xiàng)服務(wù)與存儲(chǔ)用戶(hù)相關(guān)的數(shù)據(jù)有關(guān)。我們使用Spring Boot作為后端,使用MySQL數(shù)據(jù)庫(kù)。

目標(biāo)

隨著用戶(hù)基數(shù)的增長(zhǎng),服務(wù)性能受到了影響,延遲也上升了。由于只有一個(gè)數(shù)據(jù)庫(kù)和一張表,許多查詢(xún)和更新由于鎖異常返回錯(cuò)誤。此外,隨著數(shù)據(jù)庫(kù)的規(guī)模不斷擴(kuò)大,性能進(jìn)一步下降。因此,需要一種解決方案來(lái)處理不斷增長(zhǎng)的用戶(hù)基數(shù)。

解決方案

表格分片

圖片圖片

第一種方法是在單個(gè)數(shù)據(jù)庫(kù)中創(chuàng)建多個(gè)類(lèi)似的表,并使用user_id作為分片鍵。

我們?cè)趗ser_id列出現(xiàn)的任何地方創(chuàng)建了每個(gè)表的10個(gè)副本。因此,代碼中需要進(jìn)行兩個(gè)更改。第一個(gè)更改是獲取用戶(hù)請(qǐng)求中的user_id。第二個(gè)更改是替換由Hibernate生成的查詢(xún)中的表名。

關(guān)于第一個(gè)更改,獲取user_id很容易,因?yàn)槲覀円呀?jīng)在請(qǐng)求標(biāo)頭中獲取了user_id。

對(duì)于第二個(gè)更改,我們擴(kuò)展了Hibernate的EmptyInterceptor類(lèi),并覆蓋了onPrepareStatement方法,該方法在準(zhǔn)備SQL字符串時(shí)調(diào)用。該方法有一個(gè)字符串參數(shù),即SQL語(yǔ)句。該SQL語(yǔ)句中也包含表名。因此,這里根據(jù)請(qǐng)求頭中存在的user_id用所需的表名替換表名。例如,如果user_id為77。我們?nèi)∷?0的模得到7,并將表名user_profile替換為user_profile_7,因?yàn)槲覀円呀?jīng)在數(shù)據(jù)庫(kù)中創(chuàng)建了10個(gè)副本。以下是擴(kuò)展EmptyInterceptor類(lèi)的代碼。如果您使用的是spring boot 3,則EmptyInterceptor已經(jīng)棄用,你可以使用StatementInspector接口,并覆蓋inspect方法,并將邏輯從onPrepareStatement方法移動(dòng)到inspect方法中。

public class DynamicTableNameSharding extends EmptyInterceptor {
    @Override
    public String onPrepareStatement(String sql) {
        // 替換表名
        if (Boolean.parseBoolean(DatabaseEnvironment.TABLE_SHARDING_ENABLED.label)) {
            for (String tableName : SHARDED_TABLES) {
                if(sql.contains(tableName)) {
                    ServletRequestAttributes attr = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
                    String shardingNumber = getSharding(attr);
                    sql = sql.replace(tableName, tableName + shardingNumber);
                    // 這里不要使用break,因?yàn)橐粭l查詢(xún)可以包含多個(gè)表,因此需要更改所有已啟用分片的表的名稱(chēng)
                }
            }
        }
        return super.onPrepareStatement(sql);
    }
}

在上述函數(shù)中,SHARDED_TABLES是已啟用分片的表的列表。getSharding方法根據(jù)請(qǐng)求頭中傳遞的用戶(hù)ID返回分片號(hào)。由于在單個(gè)查詢(xún)中存在多個(gè)表(例如連接或復(fù)雜邏輯),因此我們使用for循環(huán)來(lái)正確替換查詢(xún)中出現(xiàn)的所有表。

我們還通過(guò)擴(kuò)展DefaultVisitListener類(lèi),在某些操作中使用了JOOQ。

數(shù)據(jù)庫(kù)分片

圖片圖片

雖然通過(guò)表格分片提升了一定性能,但還有進(jìn)一步改進(jìn)的空間,我們進(jìn)一步對(duì)數(shù)據(jù)庫(kù)進(jìn)行分片。與創(chuàng)建表副本類(lèi)似,我們創(chuàng)建10個(gè)數(shù)據(jù)庫(kù)服務(wù)器/實(shí)例的副本,每個(gè)服務(wù)器都有10個(gè)表的副本。總共有100個(gè)表副本。

因此,同時(shí)保持10個(gè)數(shù)據(jù)庫(kù)服務(wù)器運(yùn)行也需要路由查詢(xún)到正確的數(shù)據(jù)庫(kù)。

首先,在的Spring Boot應(yīng)用程序中創(chuàng)建了10個(gè)數(shù)據(jù)源,每個(gè)數(shù)據(jù)源都有不同的數(shù)據(jù)庫(kù)URL。現(xiàn)在,我們需要一種方法將數(shù)據(jù)庫(kù)連接路由到正確的數(shù)據(jù)源。因此,我們使用了AbstractRoutingDataSource,它是一個(gè)路由getConnection()調(diào)用到其中一個(gè)多個(gè)目標(biāo)數(shù)據(jù)源的抽象DataSource實(shí)現(xiàn),這個(gè)目標(biāo)數(shù)據(jù)源基于一個(gè)查找鍵。然后,我們重寫(xiě)了這個(gè)方法determineCurrentLookupKey。

因此,這個(gè)方法返回一個(gè)鍵,用于標(biāo)識(shí)我們已定義的10個(gè)數(shù)據(jù)源中的一個(gè)特定數(shù)據(jù)源。因此,我們也更改了一些用于確定表和數(shù)據(jù)庫(kù)的邏輯。我們使用個(gè)位數(shù)字標(biāo)識(shí)數(shù)據(jù)庫(kù)服務(wù)器,使用十位數(shù)來(lái)標(biāo)識(shí)表。例如,用戶(hù)ID為447將被路由到第7個(gè)數(shù)據(jù)庫(kù)服務(wù)器及該服務(wù)器上的第4個(gè)表副本。因此,我們?cè)?0個(gè)數(shù)據(jù)庫(kù)服務(wù)器上有100個(gè)表,這大大提高了性能。

結(jié)論

在這個(gè)例子中,我們既使用了表分片又使用了數(shù)據(jù)庫(kù)分片。除此以外,我們可以進(jìn)一步提高性能,方法是在單個(gè)服務(wù)器中增加更多的數(shù)據(jù)庫(kù),可能總共有1000個(gè)表的副本。


責(zé)任編輯:武曉燕 來(lái)源: Java學(xué)研大本營(yíng)
相關(guān)推薦

2024-04-29 18:55:16

緩存Spring性能

2011-04-19 11:02:57

數(shù)據(jù)庫(kù)分頁(yè)

2009-03-30 14:19:26

優(yōu)化數(shù)據(jù)庫(kù)MySQL

2024-11-19 13:11:19

2024-06-25 10:57:08

2010-10-28 15:37:36

高可用架構(gòu)

2015-05-04 14:17:16

數(shù)據(jù)庫(kù)架構(gòu)高可用

2023-04-10 09:15:25

Vite 4.3SWC 插件

2013-03-29 09:28:41

2011-03-28 15:44:45

惠普數(shù)據(jù)庫(kù)Oracle數(shù)據(jù)庫(kù)

2024-03-14 10:10:03

MySQL優(yōu)化事務(wù)

2023-11-09 08:46:24

2015-04-28 10:44:09

分片MySQL

2023-11-26 09:04:10

Vue性能

2009-05-11 14:19:55

Oracle性能優(yōu)化數(shù)據(jù)庫(kù)

2011-04-18 09:03:36

數(shù)據(jù)庫(kù)查詢(xún)

2021-01-31 17:50:41

數(shù)據(jù)庫(kù)查詢(xún)程序員

2010-08-17 09:22:34

2020-11-10 08:38:43

數(shù)據(jù)庫(kù)HugePages內(nèi)存

2024-12-10 00:00:05

點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

亚洲看片网站| 午夜激情久久| 久久精品欧美日韩| 一区二区成人在线视频| 亚洲经典中文字幕| 久久爱av电影| 国产成人av电影在线| 欧美日韩一区不卡| 97cao在线| 国产精品欧美日韩久久| 成人国产精品入口免费视频| 欧美视频精品在线观看| 福利片在线免费观看| av动漫一区二区| 麻豆一区二区三区在线观看| 黄色日韩在线| 亚洲最大的av网站| 一区二区日韩欧美| 草莓视频一区| 亚洲国产免费| 精品国产乱码久久久久久蜜柚| 先锋资源久久| 99久久综合狠狠综合久久止| 一区二区在线| 国产精品一区而去| 黑丝一区二区三区| 国产女主播一区二区| 国产偷自视频区视频一区二区| 国产精品视频免费一区| 亚洲一区二区成人| 亚洲精品乱码视频| 国产91精品精华液一区二区三区| 奇米精品一区二区三区| 国产精品免费久久| 日本私人网站在线观看| 色老汉一区二区三区| 1pondo在线播放免费| 日韩欧美www| 欧美日韩国产v| 久久久精品亚洲| 日韩精品丝袜美腿| 91九色国产社区在线观看| 精品不卡视频| 日韩一级特黄毛片| 亚洲色图.com| 香蕉视频免费在线播放| 亚洲男人天堂视频| 亚洲精品中文字幕99999| 97免费高清电视剧观看| 日本亚洲免费观看| 无码人妻丰满熟妇区五十路百度| 一级精品视频在线观看宜春院 | 在线播放色视频| 在线观看区一区二| 欧洲一区二区三区精品| 1769国产精品| av成人毛片| 国产真实老熟女无套内射| 日韩一区在线播放| 超碰在线网址| 欧美极品少妇xxxxⅹ裸体艺术 | 九九九久久国产免费| 国产一区二区三区探花| 国产精品二区在线观看| 国产成a人无v码亚洲福利| 日本高清好狼色视频| 日韩欧美www| 色天下一区二区三区| 久久久精彩视频| 国产亚洲精品精华液| 国产三级电影在线观看| 色婷婷成人综合| 亚洲天堂久久| 99视频在线视频| 5858s免费视频成人| 岛国成人av| 一区二区三区四区五区精品| 一区二区三区免费看视频| 不卡视频观看| 91精品视频在线看| 久久综合九色综合欧美亚洲| 天堂资源在线中文| 91av在线免费观看| 国产精品自拍网站| 嫩草研究院在线| 欧美成人久久久| 日本一区中文字幕| 精品无吗乱吗av国产爱色| 欧美成人国产va精品日本一级| 亚洲欧洲综合| 波多野结衣av在线| 欧美成人激情视频| 久久 天天综合| www.亚洲免费| 欧洲成人免费aa| 成人黄色在线网站| 99自拍视频在线观看| 国产不卡一区二区在线播放| 国产一区二区不卡老阿姨| 高清在线观看av| 日韩av免费在线看| www激情久久| 蜜桃视频m3u8在线观看| 国产超碰91| 亚洲一区二区三区爽爽爽爽爽 | 亚洲美女av网站| av成人黄色| 蜜桃成人在线视频| 国产成人亚洲综合青青| 91色porny蝌蚪| 97成人超碰| 国产四区在线观看| 精品国产91九色蝌蚪| 在线观看日韩av电影| 日韩porn| 国产精品免费视频xxxx| 亚洲国产精品传媒在线观看| 成人免费看黄| 一区二区三区观看| 精品久久久久香蕉网| 国产欧美日韩一区二区三区在线| 日本v片在线免费观看| 国产狼人综合免费视频| 日韩美女精品在线| 77成人影视| 欧美一级黄色片视频| 俺去亚洲欧洲欧美日韩| 成人福利电影精品一区二区在线观看| 超级碰碰不卡在线视频| 欧美人xxxxx| 日韩情涩欧美日韩视频| 久久综合伊人| 成人观看网址| 在线观看精品视频| 亚洲色图激情小说| 成人免费不卡视频| 欧洲精品久久久久毛片完整版| 日本大片免费看| 最新国产精品拍自在线播放 | 高清精品在线| 日韩第一页在线观看| 精品视频在线播放| 国产成人午夜视频| 国产精品毛片无码| 99热.com| 91久久精品国产| 欧美久久久久久久久中文字幕| 香蕉国产精品偷在线观看不卡| 麻豆tv入口在线看| 亚洲一区bb| 日韩在线观看av| 亚洲免费视频中文字幕| 97精品中文字幕| 黄色在线免费网站| 欧美美女黄色网| 欧美激情精品久久久久久免费印度| 国产精品久久久久久亚洲毛片 | 免费在线观看麻豆视频 | 亚洲国产精品久久久久蝴蝶传媒| 免费看男男www网站入口在线| 国产精品加勒比| 精品蜜桃在线看| 不卡的看片网站| 精品一区免费| 成a人v在线播放| 国产成人免费高清视频| 久久久久国产视频| 欧亚一区二区三区| 国产精品自拍av| 日韩有码av| 18+激情视频在线| 久久精品99国产| 91色p视频在线| 日韩理论片久久| 1024国产精品| 99热免费精品| 一区二区三区四区高清视频| 丝袜视频国产在线播放| 亚洲一区二区三区精品动漫| 欧美精品电影在线| 91精品国产综合久久久久久久| www.亚洲激情.com| 中文字幕免费一区二区三区| 人在线成免费视频| 成人在线播放网站| 日韩视频精品| 欧美午夜不卡| 可以免费看不卡的av网站| 日韩福利电影在线观看| 视频国产一区| 欧美网色网址| 欧美精品综合| 手机在线免费看av| 国产一二三四在线视频| 国产欧美亚洲视频| 亚洲国内高清视频| 亚洲一级二级三级在线免费观看| 日本中文在线一区| sdde在线播放一区二区| 忘忧草在线日韩www影院|