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

SpringBoot+MybatisPlus+Mysql+Sharding-JDBC分庫(kù)分表

 更新時(shí)間:2022年03月01日 09:58:40   作者:Java知識(shí)圖譜  
本文主要介紹了SpringBoot+MybatisPlus+Mysql+Sharding-JDBC分庫(kù)分表,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

一、序言

在實(shí)際業(yè)務(wù)中,單表數(shù)據(jù)增長(zhǎng)較快,很容易達(dá)到數(shù)據(jù)瓶頸,比如單表百萬(wàn)級(jí)別數(shù)據(jù)量。當(dāng)數(shù)據(jù)量繼續(xù)增長(zhǎng)時(shí),數(shù)據(jù)的查詢性能即使有索引的幫助下也不盡如意,這時(shí)可以引入數(shù)據(jù)分庫(kù)分表技術(shù)。

本文將基于SpringBoot+MybatisPlus+Sharding-JDBC+Mysql實(shí)現(xiàn)企業(yè)級(jí)分庫(kù)分表。

1、組件及版本選擇

  • SpringBoot 2.6.x
  • MybatisPlus 3.5.0
  • Sharding-JDBC 4.1.1
  • Mysql 5.7.35

2、預(yù)期目標(biāo)

  • 使用上述組件實(shí)現(xiàn)分庫(kù)分表,簡(jiǎn)化起見(jiàn)只討論分表技術(shù)
  • 完成分表后的邏輯表與物理表間的增刪查改
  • 引入邏輯刪除和使用MybatisPlus內(nèi)置分頁(yè)技術(shù)

完整項(xiàng)目源碼訪問(wèn)地址

二、代碼實(shí)現(xiàn)

為了簡(jiǎn)化分表復(fù)雜性,專注于分表整體實(shí)現(xiàn),簡(jiǎn)化分表邏輯:按照UserId的奇偶屬性分別進(jìn)行分表。以訂單表這一典型場(chǎng)景為例,一般來(lái)說(shuō)有關(guān)訂單表,通常具有如下共性行為:

  • 創(chuàng)建訂單記錄
  • 查詢XX用戶的訂單列表
  • 查詢XX用戶的訂單列表(分頁(yè))
  • 查詢XX訂單詳情
  • 修改訂單狀態(tài)
  • 刪除訂單(邏輯刪除)

接下來(lái)通過(guò)代碼實(shí)現(xiàn)上述目標(biāo)。

(一)素材準(zhǔn)備

1、實(shí)體類

@Data
@TableName("bu_order")
public class Order {
    @TableId
    private Long orderId;
    private Integer orderType;
    private Long userId;
    private Double amount;
    private Integer orderStatus;
    @TableLogic
    @JsonIgnore
    private Boolean deleted;
}

2、Mapper類

@Mapper
public interface OrderMapper extends BaseMapper<Order> {
}

3、全局配置文件

spring:
  config:
    use-legacy-processing: true
  shardingsphere:
    datasource:
      ds1:
        driver-class-name: com.mysql.cj.jdbc.Driver
        type: com.alibaba.druid.pool.DruidDataSource
        url: jdbc:mysql://127.0.0.1:3306/sharding-jdbc2?serverTimezone=UTC
        username: root
        password: 123456
      names: ds1
    props:
      sql:
        show: true
    sharding:
      tables:
        bu_order:
          actual-data-nodes: ds1.bu_order_$->{0..1}
          key-generator:
            column: order_id
            type: SNOWFLAKE
          table-strategy:
            inline:
              algorithm-expression: bu_order_${user_id%2}
              sharding-column: user_id

(二)增刪查改

1、保存數(shù)據(jù)

由于依據(jù)主鍵的奇偶屬性對(duì)原表分表,分表后每張表的數(shù)據(jù)量是分表前的二分之一。根據(jù)需要也可以自定義分表數(shù)量(比如10張),新分表后的數(shù)據(jù)量是不分表前的十分之一。

@Test
public void addOrders() {
    for (long i = 1; i <= 10; i++) {
        Order order = new Order();
        order.setOrderId(i);
        order.setOrderType(RandomUtil.randomEle(Arrays.asList(1, 2)));
        order.setUserId(RandomUtil.randomEle(Arrays.asList(101L, 102L, 103L)));
        order.setAmount(1000.0 * i);
        orderMapper.insert(order);
    }
}

2、查詢列表數(shù)據(jù)

查詢指定用戶的訂單列表。

@GetMapping("/list")
public AjaxResult list(Order order) {
    LambdaQueryWrapper<Order> wrapper = Wrappers.lambdaQuery(order);
    return AjaxResult.success(orderMapper.selectList(wrapper));
}

3、分頁(yè)查詢數(shù)據(jù)

分頁(yè)查詢指定用戶的訂單列表

@GetMapping("/page")
public AjaxResult page(Page<Order> page, Order order) {
    return AjaxResult.success(orderMapper.selectPage(page, Wrappers.lambdaQuery(order)));
}

4、查詢?cè)斍?/h4>

通過(guò)訂單ID查詢訂單詳情。

@GetMapping("/detail/{orderId}")
public AjaxResult detail(@PathVariable Long orderId) {
    return AjaxResult.success(orderMapper.selectById(orderId));
}

5、刪除數(shù)據(jù)

通過(guò)訂單ID刪除訂單(邏輯刪除)

@DeleteMapping("/delete/{orderId}")
public AjaxResult delete(@PathVariable Long orderId) {
    return AjaxResult.success(orderMapper.deleteById(orderId));
}

6、修改數(shù)據(jù)

修改數(shù)據(jù)一般涉及部分列,比如修改訂單表的訂單狀態(tài)等。

@PutMapping("/edit")
public AjaxResult edit(@RequestBody Order order) {
    return AjaxResult.success(orderMapper.updateById(order));
}

三、理論分析

1、選擇分片列

選擇分片列是經(jīng)過(guò)精心對(duì)比后確定的,對(duì)于訂單類場(chǎng)景,需要頻繁以用戶ID為查詢條件篩選數(shù)據(jù),因此將同一個(gè)用戶的訂單數(shù)據(jù)存放在一起有利于提高查詢效率。

2、擴(kuò)容

當(dāng)分表后的表數(shù)據(jù)快速增長(zhǎng),可以預(yù)見(jiàn)即將達(dá)到瓶頸時(shí),需要對(duì)分表進(jìn)行擴(kuò)容,擴(kuò)容以2倍的速率進(jìn)行,擴(kuò)容期間需要遷移數(shù)據(jù),工作量相對(duì)可控。

到此這篇關(guān)于SpringBoot+MybatisPlus+Mysql+Sharding-JDBC分庫(kù)分表 的文章就介紹到這了,更多相關(guān)SpringBoot分庫(kù)分表 內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java設(shè)計(jì)模式之模板方法模式Template Method Pattern詳解

    Java設(shè)計(jì)模式之模板方法模式Template Method Pattern詳解

    在我們實(shí)際開(kāi)發(fā)中,如果一個(gè)方法極其復(fù)雜時(shí),如果我們將所有的邏輯寫在一個(gè)方法中,那維護(hù)起來(lái)就很困難,要替換某些步驟時(shí)都要重新寫,這樣代碼的擴(kuò)展性就很差,當(dāng)遇到這種情況就要考慮今天的主角——模板方法模式
    2022-11-11
  • Mybatis批量修改的操作代碼

    Mybatis批量修改的操作代碼

    這篇文章主要介紹了Mybatis批量修改的操作代碼,包括整體批量修改的詳細(xì)代碼,代碼簡(jiǎn)單易懂,對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2017-09-09
  • Elasticsearch寫入瓶頸導(dǎo)致skywalking大盤空白

    Elasticsearch寫入瓶頸導(dǎo)致skywalking大盤空白

    這篇文章主要為大家介紹了Elasticsearch寫入瓶頸導(dǎo)致skywalking大盤空白的解決方案,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步
    2022-02-02
  • 全面總結(jié)java IO體系

    全面總結(jié)java IO體系

    這篇文章主要介紹了java IO體系的全面總結(jié),下面和小編來(lái)一起學(xué)習(xí)一下吧
    2019-05-05
  • SpringSecurity實(shí)現(xiàn)自定義登錄接口的詳細(xì)過(guò)程

    SpringSecurity實(shí)現(xiàn)自定義登錄接口的詳細(xì)過(guò)程

    本文詳細(xì)介紹了如何使用SpringSecurity實(shí)現(xiàn)自定義登錄接口,文章還涉及了對(duì)用戶實(shí)體類的增強(qiáng)以滿足詳細(xì)信息的需求,適合需要深入了解和實(shí)現(xiàn)SpringSecurity自定義登錄功能的開(kāi)發(fā)者,感興趣的朋友跟隨小編一起看看吧
    2024-10-10
  • 利用Java實(shí)現(xiàn)調(diào)用http請(qǐng)求

    利用Java實(shí)現(xiàn)調(diào)用http請(qǐng)求

    在實(shí)際開(kāi)發(fā)過(guò)程中,我們經(jīng)常需要調(diào)用對(duì)方提供的接口或測(cè)試自己寫的接口是否合適。本文就為大家準(zhǔn)備了幾個(gè)java調(diào)用http請(qǐng)求的幾種常見(jiàn)方式,需要的可以參考一下
    2022-08-08
  • MyBatis Generator配置入門

    MyBatis Generator配置入門

    本文主要介紹了MyBatis Generator配置入門,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-07-07
  • Spring Boot 中使用cache緩存的方法

    Spring Boot 中使用cache緩存的方法

    Spring Cache是Spring針對(duì)Spring應(yīng)用,給出的一整套應(yīng)用緩存解決方案。下面小編給大家?guī)?lái)了Spring Boot 中使用cache緩存的方法,感興趣的朋友參考下吧
    2018-01-01
  • Java中的常用輸入輸出語(yǔ)句的操作代碼

    Java中的常用輸入輸出語(yǔ)句的操作代碼

    這篇文章主要介紹了Java中的常用輸入輸出語(yǔ)句的操作代碼,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-02-02
  • Java 并行數(shù)據(jù)處理和性能分析

    Java 并行數(shù)據(jù)處理和性能分析

    這篇文章主要介紹了Java 并行數(shù)據(jù)處理和性能分析,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-10-10

最新評(píng)論

颍上县| 昂仁县| 电白县| 遵义县| 安庆市| 汾西县| 澄城县| 汝阳县| 邳州市| 隆安县| 玉门市| 增城市| 顺平县| 新昌县| 义马市| 革吉县| 河西区| 修武县| 温宿县| 吕梁市| 临沭县| 文登市| 诸城市| 红原县| 灵石县| 翁源县| 大方县| 积石山| 新闻| 安福县| 定西市| 沾益县| 岗巴县| 黔西县| 金塔县| 阿坝县| 沂水县| 西青区| 隆子县| 安宁市| 南召县|