Spring Boot集成ShardingSphere分片利器 AutoTable (一)—— 简单体验 | Spring Cloud 45

news2024/11/18 9:48:17

一、背景

ShardingApache ShardingSphere 的核心特性,也是 ShardingSphere 最被人们熟知的一项能力。在过去,用户若需要进行分库分表,一种典型的实施流程(不含数据迁移)如下:

  • 用户需要准确的理解每一张数据表的分片策略
  • 明确的知晓每张表的实际表名和所在数据库
  • 根据这些信息来配置分片规则

以上述分库分表场景为例,8 库 * 4 表的分布情况可能如下:
8 库 * 4 表分布示意图

二、痛点

在前述的分库分表场景中,作为 Sharding 功能的用户,必须要对数据表的分布情况了然于心,才能写出正确的 actualDataNodes 规则。如上述 t_order 表对应的分片配置如下:

tables:
  t_order:
    actualDataNodes: ds_${0..7}.t_order_${0..3}
    databaseStrategy: 
      standard:
        shardingColumn: order_id
        shardingAlgorithmName: database_inline
    tableStrategy: 
      standard:
        shardingColumn: order_id
        shardingAlgorithmName: table_inline
shardingAlgorithms:
  database_inline:
    type: INLINE
    props:
      algorithm-expression: ds_${order_id % 8}
  table_inline:
    type: INLINE
    props:
      algorithm-expression: t_order_${order_id % 4}

尽管 ShardingSphere 的配置规则已经非常的规范和简洁,但仍有用户在使用中遇到各种麻烦:

  • 不理解分片策略或配置规则,无从下手
  • 分片配置与数据表实际分布不匹配
  • 配置表达式格式不正确
  • 等等

三、AutoTable 横空出世

为了帮助用户更好的使用分片功能,降低配置复杂度和提升使用体验,Apache ShardingSphere 5.0.0 版本推出了一种新的分片配置方式:AutoTable

顾名思义,AutoTable 类型的数据表,交由 ShardingSphere 自动管理分片,用户只需要指定分片数量和使用的数据源,无需再关心表的具体分布。

配置格式如下:

autoTables:
  t_order:
    # 指定使用的数据源
    actualDataSources: ds_${0..7}
    shardingStrategy:
      standard:
        shardingColumn: order_id
        shardingAlgorithmName: mod
shardingAlgorithms:
  mod:
    type: MOD
    props:
      # 指定分片数量
      sharding-count: 32

通过以上配置,ShardingSphere 识别出逻辑表 t_order 需要分为 32 片且使用 8 个数据源,则自动计算出 8库 * 4表 的分布关系,实现和传统方式等效的配置结果。

四、与 DistSQL 结合

在《DistSQL:像数据库一样使用 Apache ShardingSphere》一文中,孟浩然介绍了 DistSQL 的设计初衷和语法体系,并通过实战操作展示了一条 SQL 创建分布式数据库表的强大能力,展现了 Apache ShardingSphere 在新形态下的交互体验。

在使用 DistSQL 进行数据管理的场景下,AutoTable 能够极大的降低分片配置复杂度。并且,与传统文件配置形式相比,通过 DistSQL 来配置分片规则是即时生效的,无需重启,这样也就完全不用担心单张表的规则调整影响其他在线业务。

除了新增分片配置,DistSQL 也提供了修改和删除分片规则的语法,格式如下:

# 新增分片规则
CREATE SHARDING TABLE RULE t_order (
RESOURCES(resource_0,resource_1),
SHARDING_COLUMN=order_id,TYPE(NAME=hash_mod,PROPERTIES("sharding-count"=4))
);
# 修改分片规则
ALTER SHARDING TABLE RULE t_order (
RESOURCES(resource_0,resource_1),
SHARDING_COLUMN=order_id,TYPE(NAME=hash_mod,PROPERTIES("sharding-count"=10))
);
# 移除分片规则
DROP SHARDING TABLE RULE t_order;

五、AutoTable 支持的分片算法

AutoTable 支持全部的自动分片算法,包括:

  • MOD:取模分片算法
  • HASH_MOD:哈希取模分片算法
  • VOLUME_RANGE:基于分片容量的范围分片算法
  • BOUNDARY_RANGE:基于分片边界的范围分片算法
  • AUTO_INTERVAL:自动时间段分片算法

关于以上算法的更多详细信息和使用示例预留下章进行详细介绍。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/503053.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

详解快速排序的类型和优化

详解快速排序的优化 前言快排的多种写法霍尔法实现快排代码部分 挖坑法思路讲解代码部分 双指针法思路讲解代码部分 针对排序数类型的优化针对接近或已经有序数列和逆序数列三数取中代码实现 随机数 针对数字中重复度较高的数三路划分思路讲解代码部分 根据递归的特点进行优化插…

JSP招投标管理系统myeclipse开发mysql数据库WEB结构java编程

一、源码特点 JSP 招投标管理系统 是一套完善的web设计系统,对理解JSP java编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。 JSP招投标管理系统myeclipse开发mysql数据库W 二、功能介绍 主要功能: …

BPMN2.0 任务-接收任务手动任务

接收任务 接收任务是一个简单的任务,它等待特定消息的到来。 当流程执行到接收任务时,流程状态将提交给持久性存储。流程将保持这种等待状态,直到流程引擎接收到特定的消息,这将触发接收任务之外流程的继续进行。 接收任务用左上角有一个消息图标的标准BPMN 2.0任务(圆角…

C++新特性总结

(智能指针,一些关键字,自动类型推导auto,右值引用移动语义完美转发,列表初始化,std::function & std::bind & lambda表达式使回调更方便,c11关于并发引入了好多好东西,有&am…

vivado工程转换到quartus下联合modelsim仿真

vivado用习惯了,现在快速换到quartus下仿真测试。写一个操作文档,以fpga实现pcm编码为例。 目录 一、建立工程 1、准备源码和仿真文件 2、新建工程 3、加载源文件 4、选择器件 5、仿真器配置 6、工程信息 二、配置工程 7、设置顶层文件 8、配置…

【多线程】初识线程,基础了解

目录 认识线程 概念 什么是线程? 为啥要有线程 进程和线程的区别 Java 的线程 和 操作系统线程 的关系 创建线程 1.继承 Thread 类 2.实现 Runnable 接口 3.通过匿名内部类方式创建Thread与实现Runnable 4.Lmabda表达式 Thread 类及常见方法 Thread 的常见构造方法…

点评项目最后一篇:基于HyperLogLog实现UV统计

文章目录 1 HyperLogLog2 测试百万数据的统计 1 HyperLogLog 首先我们搞懂两个概念: UV:全称Unique Visitor,也叫独立访客量,是指通过互联网访问、浏览这个网页的自然人。1天内同一个用户多次访问该网站,只记录1次。…

无线键盘有几种连接方式?(USB接收器连接(无线2.4g)、蓝牙连接、wi-fi连接、红外线连接)

文章目录 无线键盘有哪几种连接方式?各连接方式优缺点 无线键盘有哪几种连接方式? 无线键盘有以下几种连接方式: 通过USB接收器连接(无线2.4g):无线键盘通过USB接收器与电脑连接,一般需要插入电…

3W字吃透:微服务 sentinel 限流 底层原理和实操

40岁老架构师尼恩的掏心窝: 现在拿到offer超级难,甚至连面试电话,一个都搞不到。 尼恩的技术社群中(50),很多小伙伴凭借 “左手云原生 右手大数据 SpringCloud Alibaba 微服务“三大绝活,拿…

MySQL 数据库 增删查改、克隆、外键 等操作

数据库中有数据表,数据表中有一条一条的记录。 可以用Navicat 等远程连接工具链接数据库,不过数据库需要开启授权。 SQL 字段数据类型 int:整型,默认长度是11 float:单精度浮点,4字节32位 double&#x…

Kyligence Zen产品体验-让大数据分析更轻松

很高兴有机会为大家分享我对 Kyligence Zen 产品的真实体验。在过去的几周中,我花费了大量时间使用这个企业级指标平台,并发现它在帮助企业处理和分析海量数据方面拥有强大的能力。 作为数据分析师,我们经常需要处理和分析大量的数据。这可能…

K8S管理系统项目实战[前端开发]-1

前端 Vue 入门与进阶 Vue ElementPlus 组件库 K8s管理系统项目实战[前端开发]-1 项目概述、框架搭建 Vue前端开发:整体布局 Vue前端开发:工作流 Vue前端开发:登录登出、部署、总结 一、项目慨述 本节是k8s管理系统项目实战的前端开发…

Endnote引用中文、英文参考文献方法(不用手敲中文文献信息)

目录 引用英文参考文献 插入中文参考文献格式 导入出错的解决方案 引用英文参考文献 打开知网的官网,选择想要导出成endnote格式的文献(在文献前面打√,即为选中状态),在导出与分析-导出文献-endnote,即…

配置Visual Studio Code连接远程服务器

目录 一、Windows用户需要先配置好本地的Remote SSH相关服务 二、打开VS Code,在扩展中搜索"Remote - SSH"并安装​编辑 三、详细操作 四、在出现的config配置文件中写入以下信息 五、点击VSCode界面最左侧的远程资源管理器 六、输入密码&#xff0…

记录一个特殊场景下,修改代码,idea 需要 mvn clean install的问题

修改java代码,mvn clean install 才能生效的场景,在网上看到一些方法,但是都没有生效。eg: 删除.idea, 删除后重新导入。每次修改代码测试的时候都要手动 clean install才可以,比较麻烦。 跑代码的时候,自…

HALCON多线程框架

1.整体架构 HALCON多线程处理框架基本思想是单独一个线程获取待处理图像,若干个图像处理线程并行执行 2.架构图 3.HALCON多线程并行相关算子 broadcast_condition clear_barrier clear_condition clear_event clear_message clear_message_queue clear_mutex cre…

Mac 安装 Python3.10 和 配置环境

Mac 安装 Python3.10 并且配置环境 一、Python的安装 访问官网:https://www.python.org/选择系统(Mac): [https://www.python.org/downloads/macos/] 3.选择一个版本下载。我这里选择了3.10.X 下载页面:https://www.python.or…

Qt Creator 快捷键

一、快捷键 下面是Qt常用快捷键用法,如下: 1、构建 快捷键功能ctrl/注释ctrlr运行ctrlb编译 2、查找 快捷键功能ctrlf单文件查找ctrlshiftf多文件查找ctrlshiftu查找所有使用该符号的地方(先选中某个符号,执行快捷键&#xff0…

句子扩写软件-文案扩写软件

什么是扩写软件 扩写软件是一种工具,可以帮助用户对一段文本进行扩展,增加文本的长度和信息量,同时保持原始内容的基本意思和结构不变。简单来说,扩写软件就是通过自然语言处理技术,对原始文本进行修改或补充&#xf…

搭建一个SpringSecurity项目

首先需要有一点的SpringBoot基础再来搭建会更好一点 springsecurity项目主要用于权限,验证等操作,非常方便 选择新建项目——选择spring Initializr项目 相对应的设置大家可以自行设置然后点击下一步 这里我选择两个依赖,也不用过多&#xff…