欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Springboot使用sharedingjdbc實(shí)現(xiàn)分庫分表

 更新時(shí)間:2024年07月13日 09:06:03   作者:可樂cc呀  
這篇文章主要介紹了Springboot使用sharedingjdbc實(shí)現(xiàn)分庫分表,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

一、簡介

Apache ShardingSphere 是一套開源的分布式數(shù)據(jù)庫解決方案組成的生態(tài)圈,它由 JDBC、Proxy 和 Sidecar(規(guī)劃中)這 3 款既能夠獨(dú)立部署,又支持混合部署配合使用的產(chǎn)品組成。 它們均提供標(biāo)準(zhǔn)化的數(shù)據(jù)水平擴(kuò)展、分布式事務(wù)和分布式治理等功能,可適用于如 Java 同構(gòu)、異構(gòu)語言、云原生等各種多樣化的應(yīng)用場景。

Apache ShardingSphere 5.x 版本開始致力于可插拔架構(gòu),項(xiàng)目的功能組件能夠靈活的以可插拔的方式進(jìn)行擴(kuò)展。

目前,數(shù)據(jù)分片、讀寫分離、數(shù)據(jù)加密、影子庫壓測等功能,以及 MySQL、PostgreSQL、SQLServer、Oracle 等 SQL 與協(xié)議的支持,均通過插件的方式織入項(xiàng)目。

開發(fā)者能夠像使用積木一樣定制屬于自己的獨(dú)特系統(tǒng)。Apache ShardingSphere 目前已提供數(shù)十個(gè) SPI 作為系統(tǒng)的擴(kuò)展點(diǎn),仍在不斷增加中。

二、使用注意事項(xiàng)

  • 使用版本問題,不同版本之間存在差異較大(參數(shù)),請參考官方文檔,切記不可隨意百度
  • update 時(shí),不可對分片字段進(jìn)行更新(分片字段必須在規(guī)則上保持固定)
  • 5.1.0版本使用shardingsphere-jdbc-core-spring-boot-starter時(shí),并且使用druid時(shí),需要加dbcp依賴
  • 時(shí)間字段作為分片字段時(shí),需要使用date類型,不可使用localDataTime 或者localDate類型
  • 數(shù)據(jù)分片后主鍵自增問題,需要使用分布式主策略,例如利用redis自增主鍵,雪花算法,UUID等
  • 分頁查詢跨表較大時(shí)候,shareding會進(jìn)行表的union 操作,可能會造成數(shù)據(jù)瓶頸(業(yè)務(wù)上做處理)
  • 不支持自動建表,自動分片功能需自行編碼
  • 部分復(fù)雜查詢不支持,請參考官網(wǎng):https://shardingsphere.apache.org/document/5.1.0/cn/user-manual/shardingsphere-jdbc/unsupported/

三、項(xiàng)目使用

添加pom依賴

<dependency>
    <groupId>org.apache.shardingsphere</groupId>
    <artifactId>shardingsphere-jdbc-core-spring-boot-starter</artifactId>
</dependency>
<!-- ShardingJDBC 5.1.0使用druid連接池需要加dbcp依賴 -->
<dependency>
    <groupId>org.apache.tomcat</groupId>
    <artifactId>tomcat-dbcp</artifactId>
</dependency>

yml配置信息

spring:
    ### 處理連接池沖突 #####
    main:
        allow-bean-definition-overriding: true
    shardingsphere:
        # 是否啟用 Sharding
        enabled: false
        # 打印sql
        props:
          sql-show: false
        datasource:
            names: ds0
            ds0:
                type: com.alibaba.druid.pool.DruidDataSource
                driver-class-name: com.mysql.cj.jdbc.Driver
#                url: jdbc:mysql://123.57.164.186:13306/digital_constr?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
#                username: root
#                password: JoygisIot@2023
                url: jdbc:mysql://123.57.23.160:13306/digital_constr?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=false&serverTimezone=GMT%2B8
                username: root
                password: JoygisIot@2023
                # 數(shù)據(jù)源其他配置
                initialSize: 5
                minIdle: 5
                maxActive: 20
                maxWait: 60000
                timeBetweenEvictionRunsMillis: 60000
                minEvictableIdleTimeMillis: 300000
                validationQuery: SELECT 1 FROM DUAL
                testWhileIdle: true,
                testOnBorrow: false
                testOnReturn: false
                poolPreparedStatements: true
                # 配置監(jiān)控統(tǒng)計(jì)攔截的filters,去掉后監(jiān)控界面sql無法統(tǒng)計(jì),'wall'用于防火墻
                #filters: stat,wall,log4j
                maxPoolPreparedStatementPerConnectionSize: 20
                useGlobalDataSourceStat: true
                connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=500
        rules:
            sharding:
                # 表策略配置
                tables:
                    # t_user 是邏輯表
                    b_compaction_data:
                        # 配置數(shù)據(jù)節(jié)點(diǎn),這里是按月分表
                        # 示例1:時(shí)間范圍設(shè)置在202201 ~ 210012
                        # actualDataNodes: mydb.t_user_$->{2022..2100}0$->{1..9},mydb.t_user_$->{2022..2100}1$->{0..2}
                        # 示例2:時(shí)間范圍設(shè)置在202201 ~ 202203
                        #actualDataNodes: ds${0..1}.tmp_order_item
                        actualDataNodes: ds0.b_compaction_data
                        tableStrategy:
                            complex:
                                sharding-columns: gps_time,sn
                                algorithm-class-name:
                                shardingAlgorithmName: time-sn-sharding-altorithm
                        keyGenerateStrategy:
                            column: id
                            keyGeneratorName: compaction-data-id
                # 分片算法配置
                keyGenerators:
                    compaction-data-id:
                        type: 'INCREMENT'
                shardingAlgorithms:
                    time-sn-sharding-altorithm:
                        # 類型:自定義策略
                        type: CLASS_BASED
                        props:
                            # 分片策略
                            strategy: complex
                            # 分片算法類
                            algorithmClassName: com.joygis.sharding.algorithm.ComplexTimeAndSnShardingAlgorithm

代碼配置

  • a. 自定義數(shù)據(jù)源

image.png

說明:shardingSphereDataSource 為默認(rèn)數(shù)據(jù)源,如需修改配置信息,可重新定義 重新注入即可

  • b. 使用動態(tài)數(shù)據(jù)源

image.png

說明: 查詢接口中,直接標(biāo)記數(shù)據(jù)類型即可,如為mabatisplus 請使用@Ds注解

自定義主鍵策略

image.png

image.png

說明:shareding中用了大量的java spi 加載機(jī)制進(jìn)行代碼解耦,包括主鍵生成策略,spi機(jī)制此處不做介紹請自行百度,此處使用的為redis自增主鍵(查詢中例如id比較),保證id 全局唯一,type類型必須與yml文件中保持一致

單字段分表策略

說明: 類型指定為Standard ,實(shí)現(xiàn)StandardShardingAlgorithm類即可,項(xiàng)目中因要求不同,此處代碼完成但為使用,需要實(shí)現(xiàn)兩個(gè)doshared方法,PreciseShardingValue 為精確匹配 例如 in、= 等方式,RangeShardingValue為范圍匹配 例如 between,< ,> 等

單字段分表策略

說明: 如上述yml 所示配置,實(shí)現(xiàn)ComplexKeysShardingAlgorithm接口即可,僅一個(gè)接口ComplexKeysShardingValue 中存在兩個(gè)屬性,分別為范圍屬性及精確指定屬性

自動創(chuàng)建表

說明: 判斷表是否存在(例如本地緩存,提升速度),如果存在則不創(chuàng)建表,如果不存在,則直接創(chuàng)建表,創(chuàng)建完成后需要更新shareding 配置信息,詳細(xì)代碼 請查看ShardingAlgorithmTool.tableNameCacheReloadAll();類

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Java Swing 多線程加載圖片(保證順序一致)

    Java Swing 多線程加載圖片(保證順序一致)

    這篇文章主要為大家詳細(xì)介紹了Java Swing 多線程加載圖片,保證順序一致,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-12-12
  • Java中的上下文加載器ContextClassLoader詳解

    Java中的上下文加載器ContextClassLoader詳解

    這篇文章主要介紹了Java中的上下文加載器ContextClassLoader詳解,ContextClassLoader是通過Thread.currentThread().getContextClassLoader()返回該線程上下文的ClassLoader,需要的朋友可以參考下
    2023-10-10
  • java計(jì)算給定字符串中出現(xiàn)次數(shù)最多的字母和該字母出現(xiàn)次數(shù)的方法

    java計(jì)算給定字符串中出現(xiàn)次數(shù)最多的字母和該字母出現(xiàn)次數(shù)的方法

    這篇文章主要介紹了java計(jì)算給定字符串中出現(xiàn)次數(shù)最多的字母和該字母出現(xiàn)次數(shù)的方法,涉及java字符串的遍歷、轉(zhuǎn)換及運(yùn)算相關(guān)操作技巧,需要的朋友可以參考下
    2017-02-02
  • Java并發(fā)教程之Callable和Future接口詳解

    Java并發(fā)教程之Callable和Future接口詳解

    Java從發(fā)布的第一個(gè)版本開始就可以很方便地編寫多線程的應(yīng)用程序,并在設(shè)計(jì)中引入異步處理,這篇文章主要給大家介紹了關(guān)于Java并發(fā)教程之Callable和Future接口的相關(guān)資料,需要的朋友可以參考下
    2021-07-07
  • spring.profiles使用的方法步驟

    spring.profiles使用的方法步驟

    本文主要介紹了spring.profiles使用與spring.profiles.active和spring.profiles.include區(qū)別,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-07-07
  • IDEA創(chuàng)建SpringBoot項(xiàng)目整合mybatis時(shí)mysql-connector-java報(bào)錯(cuò)異常的詳細(xì)分析

    IDEA創(chuàng)建SpringBoot項(xiàng)目整合mybatis時(shí)mysql-connector-java報(bào)錯(cuò)異常的詳細(xì)分析

    最近工作中發(fā)現(xiàn)了個(gè)錯(cuò)誤,分享給同樣遇到這個(gè)問題的朋友,這篇文章主要給大家介紹了關(guān)于IDEA創(chuàng)建SpringBoot項(xiàng)目整合mybatis時(shí)mysql-connector-j報(bào)錯(cuò)異常的詳細(xì)分析,需要的朋友可以參考下
    2023-02-02
  • Spring MVC 接口 ResponseBodyAdvice 及其應(yīng)用最佳實(shí)踐記錄

    Spring MVC 接口 ResponseBodyAdvice 及其應(yīng)用最佳實(shí)

    ResponseBodyAdvice?是 Spring MVC 提供的一個(gè)強(qiáng)大接口,允許你在響應(yīng)體被寫入 HTTP 響應(yīng)之前對其進(jìn)行全局處理,下面我將全面介紹它的工作原理、使用場景和最佳實(shí)踐,感興趣的朋友一起看看吧
    2025-04-04
  • Java8時(shí)間api之LocalDate/LocalDateTime的用法詳解

    Java8時(shí)間api之LocalDate/LocalDateTime的用法詳解

    在項(xiàng)目中,時(shí)間的使用必不可少,而java8之前的時(shí)間api?Date和Calander等在使用上存在著很多問題,于是,jdk1.8引進(jìn)了新的時(shí)間api-LocalDateTime,本文就來講講它的具體使用吧
    2023-05-05
  • java 字符串分割的三種方法(總結(jié))

    java 字符串分割的三種方法(總結(jié))

    下面小編就為大家?guī)硪黄猨ava 字符串分割的三種方法(總結(jié))。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2016-11-11
  • Java生成條形碼code128(親測有效)

    Java生成條形碼code128(親測有效)

    這篇文章主要介紹了Java生成條形碼code128,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-05-05

最新評論