最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

ShardingSphere數(shù)據(jù)分片算法及測(cè)試實(shí)戰(zhàn)

 更新時(shí)間:2023年03月29日 10:50:43   作者:劉牌  
這篇文章主要為大家介紹了ShardingSphere數(shù)據(jù)分片算法及測(cè)試實(shí)戰(zhàn)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

前言

堅(jiān)持是一件比較難的事,堅(jiān)持并不是自欺欺人的一種自我麻痹和安慰,也不是做給被人的,我覺(jué)得,堅(jiān)持的本質(zhì)并沒(méi)有帶著過(guò)多的功利主義,如果滿是功利主義,那么這個(gè)堅(jiān)持并不會(huì)長(zhǎng)久,也不會(huì)有好的收獲,堅(jiān)持應(yīng)該帶著熱愛(ài),帶著思想,把它當(dāng)成習(xí)慣,但是并不是內(nèi)卷,而是一種發(fā)自內(nèi)心的喜歡和平實(shí)!希望我們都有自己的堅(jiān)持,堅(jiān)持寫一篇文章,堅(jiān)持愛(ài)一個(gè)人,堅(jiān)持讀一本書(shū),堅(jiān)持走向遠(yuǎn)方!

上一篇我們說(shuō)了ShardingSphere的讀寫分離,使用讀寫分離能夠減輕單庫(kù)的讀寫操作,從而提升數(shù)據(jù)庫(kù)的吞吐量,但是當(dāng)數(shù)據(jù)庫(kù)中表的數(shù)據(jù)量到達(dá)一定數(shù)量時(shí),我們可能就會(huì)需要進(jìn)行分片了, 分片又分為垂直分片和水平分片,下面我們對(duì)二者進(jìn)行簡(jiǎn)單的分析。

垂直分片

我們的一個(gè)數(shù)據(jù)庫(kù)中通常是有很多數(shù)據(jù)表的,不過(guò)可能由于我們的分類不到位,就會(huì)出現(xiàn)澇的澇死旱的旱死的局面,比如某些數(shù)據(jù)表的讀寫操作十分頻繁,而我的這個(gè)庫(kù)中大量的集中了這種 讀寫操作頻繁的表,那么整體的吞吐量就會(huì)降低,而某個(gè)庫(kù)中又集中了讀寫不頻繁的表,吞吐量十分的高(但是好像沒(méi)什么卵用),所以我們應(yīng)該合理的分配,以保證整理的吞吐量達(dá)到最大值, 下圖將數(shù)據(jù)表各分到了一個(gè)數(shù)據(jù)庫(kù)中。

不過(guò)垂直分片不能從根本上解決讀寫瓶頸,因?yàn)椴还苣阍僭趺捶?,所有的?shù)據(jù)始終都集中在一張表里面,就算數(shù)據(jù)庫(kù)的性能再好,也解決不了這個(gè)問(wèn)題。所以我們需要進(jìn)行 更加細(xì)粒度的劃分,下面我們來(lái)講解水平分片。

水平分片

水平分片又可以叫做橫向拆分,就是將一張大表拆分為若干張小表,比如我一張表中有1億條數(shù)據(jù),那么我拆分為10張表,每張表中存1000萬(wàn)條數(shù)據(jù),那么效率就會(huì)變高, 還有些數(shù)據(jù)需要進(jìn)行分類和歸檔,那么我們也需要進(jìn)行分表,之前我們系統(tǒng)中一個(gè)表用來(lái)存儲(chǔ)文檔信息,有十多年因?yàn)閿?shù)據(jù)量十分龐大,在業(yè)務(wù)中需要對(duì)文檔進(jìn)行排序等操作,本來(lái)查詢就比較 耗時(shí)了,再加上需要進(jìn)行邏輯上的處理,所以就更加耗時(shí),于是就進(jìn)行了分表,將每一年的數(shù)據(jù)存進(jìn)一個(gè)表,這樣就提高了查詢效率,并且更加容易對(duì)數(shù)據(jù)進(jìn)行追蹤和管理,如下就是水平 分片的圖例。

ShardingSphere數(shù)據(jù)分片實(shí)戰(zhàn)

使用ShardingSphere數(shù)據(jù)分片,我們只需通過(guò)簡(jiǎn)單的配置就能實(shí)現(xiàn),ShardingSphere幫我們屏蔽了底層邏輯,我們也可通過(guò)ShardingSphere預(yù)留的 接口和SPI進(jìn)行擴(kuò)展我們的需求,比如可以實(shí)現(xiàn)我們自己的分片算法,主鍵生成策略等等。

下面演示將文檔按照年份進(jìn)行分表,將文檔數(shù)據(jù)分表至2013年至2022年來(lái)存,一般我們的配置文件都是配置在nacos上面,所以能夠靈活的進(jìn)行配置, 當(dāng)?shù)搅?023年,我們可以添加一個(gè)2023年的表,改下nacos的配置,當(dāng)然,一般會(huì)先預(yù)留出數(shù)據(jù)表,nacos上面也留出空間,我們的是預(yù)留到2032年, 留出了10年。

yml文件

我們重點(diǎn)關(guān)注下面的一些配置,actual-data-nodes代表進(jìn)行分片的表,使用表達(dá)式,document.document_$->{2013..2022}代表document數(shù)據(jù)庫(kù) 下面的document_前綴的表進(jìn)行分片,如document_2022document_2021,{2013..2022}代表2013到2022這個(gè)區(qū)間,sharding-column是分片列, 是我們數(shù)據(jù)表中的某個(gè)字段,就是根據(jù)它來(lái)進(jìn)行分片,sharding-algorithms是分片算法,我們可以通過(guò)SPI來(lái)實(shí)現(xiàn)自己的分片算法,接口是StandardShardingAlgorithm, 如下我們使用的是INLINE基于行表達(dá)式的分片算法,algorithm-expression是分片表達(dá)式,ShardingSphere底層會(huì)進(jìn)行解析表達(dá)式,然后分片到對(duì)應(yīng)的數(shù)據(jù)表上面, 我們的表達(dá)式是document_$->{year},也就是根據(jù)年進(jìn)行分片,當(dāng)然,我們可以根據(jù)自己的需求去寫表達(dá)式,比如根據(jù)主鍵取模進(jìn)行分片等,需要根據(jù)我們的實(shí)際場(chǎng)景去做, key-generate-strategy是主鍵生成策略,ShardingSphere支持自定義主鍵生成策略,我們只需要通過(guò)SPI就可以實(shí)現(xiàn),接口是KeyGenerateAlgorithm,已經(jīng) 實(shí)現(xiàn)了UUIDsnowflake雪花算法等主鍵生成策略。

spring:
  shardingsphere:
    mode:
      type: Standalone
      repository:
        type: File
      overwrite: true
    datasource:
      names: document
      document:
        jdbc-url: jdbc:mysql://localhost:3306/document?serverTimezone=UTC&useSSL=false&useUnicode=true&characterEncoding=UTF-8
        type: com.zaxxer.hikari.HikariDataSource
        driver-class-name: com.mysql.jdbc.Driver
        username: root
        password: qwer123@
    rules:
      sharding:
        tables:
          document:
            actual-data-nodes: document.document_$->{2013..2022}
            table-strategy:
              standard:
                sharding-column: year #分片列
                sharding-algorithm-name: document-inline # 分片算法名稱
            key-generate-strategy:
              column: id # 主鍵列
              key-generator-name: timestamp #主鍵生成算法
        sharding-algorithms: #分片算法
          document-inline:
            type: INLINE
            props:
              algorithm-expression: document_$->{year}
        key-generators:
          timestamp:
            type: SNOWFLAKE

測(cè)試數(shù)據(jù)數(shù)據(jù)分片

虛幻插入十次,每次都插入2013年到2022年的數(shù)據(jù)。

void addDocSliceYear(){
    for (int i = 0; i < 10; i++) {
        for (int year = 2013; year <= 2022; year++) {
            Document document = new Document()
                .setDocumentName("document year【" + year + "】")
                .setDocumentDetail("year【" + year + "】")
                .setYear(year);
            documentService.save(document);
        }
    }
}

我們可以看出,數(shù)據(jù)分片成功,我們看一下分片的數(shù)據(jù)怎么查詢的(此處只是單表查詢),我們看一下ShardingSphere-SQL輸出的sql語(yǔ)句

SELECT  id,document_name,document_detail,year  FROM document_2013 
UNION ALL SELECT  id,document_name,document_detail,year  FROM document_2014 
UNION ALL SELECT  id,document_name,document_detail,year  FROM document_2015 
UNION ALL SELECT  id,document_name,document_detail,year  FROM document_2016 
UNION ALL SELECT  id,document_name,document_detail,year  FROM document_2017 
UNION ALL SELECT  id,document_name,document_detail,year  FROM document_2018 
UNION ALL SELECT  id,document_name,document_detail,year  FROM document_2019 
UNION ALL SELECT  id,document_name,document_detail,year  FROM document_2020 
UNION ALL SELECT  id,document_name,document_detail,year  FROM document_2021 
UNION ALL SELECT  id,document_name,document_detail,year  FROM document_2022

從控制臺(tái)打印的SQL語(yǔ)句中看出,ShardingSphere分片查詢使用的是UNION ALL,UNION ALL實(shí)現(xiàn)把前后兩個(gè)SELECT集合的數(shù)據(jù)聯(lián)合起來(lái),組成一個(gè)結(jié)果集查詢輸出, 聯(lián)合查詢需要每個(gè)表中的的字段相同,字段類型相同,數(shù)量相同,這也是分片的基本要求。

上面我們只演示了單表的數(shù)據(jù)分片查詢,如果是多表查詢,我們需要配置binding-tables綁定表,這樣能夠減少查詢的笛卡爾積,從而提升查詢效率,我們就不做 詳細(xì)的介紹,可去官網(wǎng)自己查看。

分片算法

ShardingSphere的分片算法有多種,我們也可以自己實(shí)現(xiàn)一套分片算法,通過(guò)SPI,分片算法的頂層接口是ShardingAlgorithm,目前實(shí)現(xiàn)了多種算法。

BoundaryBasedRangeShardingAlgorithm: 基于分片邊界的范圍分片算法

VolumeBasedRangeShardingAlgorithm: 基于分片容量的范圍分片算法

ComplexInlineShardingAlgorithm: 基于行表達(dá)式的復(fù)合分片算法

AutoIntervalShardingAlgorithm: 基于可變時(shí)間范圍的分片算法

ClassBasedShardingAlgorithm: 基于自定義類的分片算法

HintInlineShardingAlgorithm: 基于行表達(dá)式的 Hint 分片算法

IntervalShardingAlgorithm: 基于固定時(shí)間范圍的分片算法

HashModShardingAlgorithm: 基于哈希取模的分片算法

InlineShardingAlgorithm: 基于行表達(dá)式的分片算法

ModShardingAlgorithm: 基于取模的分片算法

CosIdModShardingAlgorithm: 基于 CosId 的取模分片算法

CosIdIntervalShardingAlgorithm: 基于 CosId 的固定時(shí)間范圍的分片算法

CosIdSnowflakeIntervalShardingAlgorithm: 基于 CosId 的雪花ID固定時(shí)間范圍的分片算法

分布式主鍵生成算法

ShardingSphere也可以自定義實(shí)現(xiàn)主鍵生成策略,通過(guò)SPI,頂層接口為KeyGenerateAlgorithm,目前實(shí)現(xiàn)的算法有。

SnowflakeKeyGenerateAlgorithm 基于雪花算法的分布式主鍵生成算法

UUIDKeyGenerateAlgorithm: 基于 UUID 的分布式主鍵生成算法

CosIdKeyGenerateAlgorithm: 基于 CosId 的分布式主鍵生成算法

CosIdSnowflakeKeyGenerateAlgorithm: 基于 CosId 的雪花算法分布式主鍵生成算法

NanoIdKeyGenerateAlgorithm: 基于 NanoId 的分布式主鍵生成算法

總結(jié)

ShardingSphere能夠方便的實(shí)現(xiàn)數(shù)據(jù)分片,但是數(shù)據(jù)分片本身就是一件迫不得已的事情,它會(huì)是我們的業(yè)務(wù)變得更加的復(fù)雜,在設(shè)計(jì)的時(shí)候需要經(jīng)過(guò)嚴(yán)格的考量后再進(jìn)行數(shù)據(jù)分片,防止出現(xiàn)一些不必要的麻煩。

關(guān)于ShardingSphere的數(shù)據(jù)分片,我們就說(shuō)到這里,更多關(guān)于ShardingSphere數(shù)據(jù)分片的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Shiro安全框架的主要組件及認(rèn)證過(guò)程簡(jiǎn)介

    Shiro安全框架的主要組件及認(rèn)證過(guò)程簡(jiǎn)介

    這篇文章主要介紹了Shiro安全框架的主要組件及認(rèn)證過(guò)程簡(jiǎn)介,Shiro?是一個(gè)強(qiáng)大靈活的開(kāi)源安全框架,可以完全處理身份驗(yàn)證、授權(quán)、加密和會(huì)話管理,本文就來(lái)介紹一下此框架的核心組成,需要的朋友可以參考下
    2023-08-08
  • 關(guān)于swagger配置及踩坑@Api參數(shù)postion無(wú)效解決接口排序問(wèn)題

    關(guān)于swagger配置及踩坑@Api參數(shù)postion無(wú)效解決接口排序問(wèn)題

    這篇文章主要介紹了關(guān)于swagger配置及踩坑@Api參數(shù)postion無(wú)效解決接口排序問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-06-06
  • SpringBoot使用 druid 連接池來(lái)優(yōu)化分頁(yè)語(yǔ)句

    SpringBoot使用 druid 連接池來(lái)優(yōu)化分頁(yè)語(yǔ)句

    這篇文章主要介紹了SpringBoot使用 druid 連接池來(lái)優(yōu)化分頁(yè)語(yǔ)句,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-11-11
  • Double.parseDouble()與Double.valueOf()的區(qū)別及說(shuō)明

    Double.parseDouble()與Double.valueOf()的區(qū)別及說(shuō)明

    這篇文章主要介紹了Double.parseDouble()與Double.valueOf()的區(qū)別及說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-07-07
  • SpringBoot使用Thymeleaf模板引擎訪問(wèn)靜態(tài)html的過(guò)程

    SpringBoot使用Thymeleaf模板引擎訪問(wèn)靜態(tài)html的過(guò)程

    這篇文章主要介紹了SpringBoot使用Thymeleaf模板引擎訪問(wèn)靜態(tài)html的過(guò)程,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-10-10
  • java代碼mqtt接收發(fā)送消息方式

    java代碼mqtt接收發(fā)送消息方式

    這篇文章主要介紹了java代碼mqtt接收發(fā)送消息方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-09-09
  • java?Web實(shí)現(xiàn)用戶登錄功能圖文教程

    java?Web實(shí)現(xiàn)用戶登錄功能圖文教程

    這篇文章主要給大家介紹了關(guān)于java?Web實(shí)現(xiàn)用戶登錄功能的相關(guān)資料,在開(kāi)發(fā)Web應(yīng)用程序中,用戶登錄是一個(gè)常見(jiàn)的功能,文中通過(guò)代碼以及圖文介紹的非常詳細(xì),需要的朋友可以參考下
    2023-10-10
  • java list常用方法總結(jié)

    java list常用方法總結(jié)

    這篇文章主要介紹了java list常用方法總結(jié),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-11-11
  • SpringSecurity退出功能實(shí)現(xiàn)的正確方式(推薦)

    SpringSecurity退出功能實(shí)現(xiàn)的正確方式(推薦)

    本文將介紹在Spring Security框架下如何實(shí)現(xiàn)用戶的"退出"logout的功能。本文通過(guò)實(shí)例代碼講解的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2019-11-11
  • Maven中錯(cuò)誤使用parent.relativePath導(dǎo)致構(gòu)建失敗問(wèn)題

    Maven中錯(cuò)誤使用parent.relativePath導(dǎo)致構(gòu)建失敗問(wèn)題

    這篇文章主要介紹了Maven中錯(cuò)誤使用parent.relativePath導(dǎo)致構(gòu)建失敗問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-08-08

最新評(píng)論

湖北省| 和静县| 大同市| 集安市| 屯门区| 甘肃省| 天长市| 西城区| 玛沁县| 涟源市| 安达市| 清水县| 会昌县| 十堰市| 炉霍县| 泸水县| 定州市| 渝北区| 阿勒泰市| 南涧| 慈利县| 太保市| 嘉善县| 临清市| 寿光市| 灵宝市| 名山县| 扬州市| 滨州市| 晋城| 乌兰察布市| 房产| 江达县| 佛山市| 那曲县| 岢岚县| 梓潼县| 安吉县| 南江县| SHOW| 鄂托克旗|