【经验分享】ShardingSphere+Springboot-03 : COMPLEX_INLINE 复杂行表达式分片算法

news2024/11/11 16:16:52

文章目录

      • 3.3 复杂分片算法
        • 3.3.1 COMPLEX_INLINE 复杂行表达式分片算法

3.3 复杂分片算法

3.3.1 COMPLEX_INLINE 复杂行表达式分片算法

复合分片比较灵活,适合于分片的字段比较多,分片比较复杂的场景,使用这种分片的话必须对自己的业务比较明确

属性名称数据类型说明默认值
sharding-columns (?)String分片列名称,多个列用逗号分隔。如不配置无法则不能校验
algorithm-expressionString分片算法的行表达式
allow-range-query-with-inline-sharding (?)boolean是否允许范围查询。注意:范围查询会无视分片策略,进行全路由false

这样看官方文档还是写的不够详细,举个例子,创建一个用户表结构如下,分别是数据源ds1/ds2中分别创建以下两张表

image-20240809090636371

实现目标:根据用户类型user_type和部门dep_id进行复杂分库分表

配置yaml如下:

spring:
  shardingsphere:
    rules:
      sharding:
        tables:
          # 用户表
          sys_user:
            actual-data-nodes: ds${0..1}.sys_user_${0..1}
            key-generate-strategy:
              column: id
              key-generator-name: snowflake
            database-strategy:
              standard:
                sharding-algorithm-name: id_db_algorithm
                sharding-column: id
            table-strategy:
              # 注意:声明为复杂算法
              complex:
                # 指定参与复杂算法的分片列
                sharding-columns: user_type,dep_id
                sharding-algorithm-name: user_type_dep_id_algorithm
        # 配置分片算法
        sharding-algorithms:
          id_db_algorithm:
            type: INLINE
            props:
              algorithm-expression: ds$->{id % 2}
          user_type_dep_id_algorithm:
            # 指定类型为复杂行算法
            type: COMPLEX_INLINE
            props:
              # 依然是使用groovy表达式
              algorithm-expression: 'sys_user_$->{((user_type.isInteger() ? user_type.toInteger() : 0) + dep_id) % 2}'

配置解释

  1. 分片表的相关配置不再赘述,需要注意的是复杂算法需要去标准算法区分声明为complex
  2. 该配置中分库还是用简单行表达式,也不再赘述
  3. 算法声明
    • 算法的类型为 复杂行表达式算法
    • 表达式依然用使用groovy表达式,可以借助AI帮忙生成
    • 配置中表达式是根据user_type加上dep_id后取模进行计算得到

进行测试:

测试一:随机生成用户并插入数据库,打印出来插入对象和预测结果,和实际插入的真实表对比

image-20240809103624692

image-20240809103742849

测试二:查询条件带有user_type和dep_id,测试分表逻辑是否生效

image-20240809105337260

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

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

相关文章

深度学习——神经网络(neural network)详解(二). 带手算步骤,步骤清晰0基础可看

深度学习——神经网络(neural network)详解(二). 手算步骤,步骤清晰0基础可看 前文如下:深度学习——神经网络(neural network)详解(一). 带手算步骤&#x…

Java面试篇(JVM相关专题)

文章目录 0. 前言1. 为什么要学 JVM2. 什么是 JVM3. JVM 的好处3.1 一次编写,到处运行3.2 自动内存管理(基于垃圾回收机制) 4. 要学习哪些 JVM 的哪些内容5. JVM 的组成5.1 程序计数器5.2 堆5.3 什么是虚拟机栈常见问题一:垃圾回收…

代码+视频,R语言VRPM绘制多种模型的彩色列线图

列线图,又称诺莫图(Nomogram),它是建立在回归分析的基础上,使用多个临床指标或者生物属性,然后采用带有分数高低的线段,从而达到设置的目的:基于多个变量的值预测一定的临床结局或者…

机器学习入门篇之监督学习(回归篇)——多元线性回归的原理介绍

在机器学习入门之监督学习(分类篇)-CSDN博客,以及初步接触了机器学习,在这片文章中我们继续沿着思维导图学习监督学习的剩下部分,回归。 在监督学习中,回归是一种预测型建模技术,它涉及预测一个…

尚硅谷谷粒商城项目笔记——十、调试前端项目renren-fast-vue【电脑CPU:AMD】

十、调试前端项目renren-fast-vue 如果遇到其他问题发在评论区,我看到后解决 1 先下载安装git git官网下载地址 2 登录gitee搜索人人开源找到renren-fast-vue复制下载链接。【网课视频中也有详细步骤】 3 下载完成后桌面会出现renren-fast-vue的文件夹 4 开始调…

【阿旭机器学习实战】【39】脑肿瘤数据分析与预测案例:数据分析、预处理、模型训练预测、评估

《------往期经典推荐------》 一、【100个深度学习实战项目】【链接】,持续更新~~ 二、机器学习实战专栏【链接】,已更新31期,欢迎关注,持续更新中~~ 三、深度学习【Pytorch】专栏【链接】 四、【Stable Diffusion绘画系列】专…

python如何判断中文是否一致

Python判断两个相等的中文字符串为false,将两个待比较的字符串都把unicode编码设为‘utf-8’也不能解决问题,具体原因如下: 1、首先查看待比较两个字符串的编码格式 ,使用命令: import chardet ...... string_code c…

macos重装系统 启动U盘制作方法 - createinstallmedia 命令使用方法总结

macos重装系统比windows要稍微复杂一些,不过还好,macos系统安装app这个Apple官方提供的系统软件里面默认就内置了一个可用为我们制作启动盘的工具 createinstallmedia 我们下载的apple安装镜像要门是 dmg/pkg/iso 的压缩档案格式的,要么是 x…

智慧安监管理平台建设方案

1. 前言:智慧安监云平台概述 "互联网"安全生产监管监测大数据平台,利用移动互联网、物联网、云计算等技术,实现安全生产监管业务的智能化处理和统一集中管理。平台旨在构建服务导向的智慧安监管理平台,推动安全生产信息…

React 后台管理项目 入门项目 简洁清晰保姆级内容讲解

序章 React Hook的后台管理项目,从0到1搭建,内容非常丰富涵盖项目搭建、路由配置、用户鉴权、首页报表、用户列表、前后端联调等功能,推荐指数:5颗星! 视频学习链接: React 通用后台管理-零基础从0到1详细的入门保姆…

PHYS_OPT_SKIPPED

当跳过候选基元单元的物理优化时 单元格的PHYS_OPT_MODIFIED属性已更新,以反映跳过的优化。 当对同一单元格跳过多个优化时,OPT_skipped值包含 跳过的优化列表。 架构支持 所有架构。 适用对象 PHYS_OPT_SKIPPED属性放置在单元格上。 价值观 下表列出了各…

【Qt】动态加载DLL之QLibrary类学习(内含完整Demo源码)

各位看官这里是目录↓↓↓,点击直达哦~ 前言一、QLibrary简介二、常用方法2.1 构造函数2.2 设置要访问的动态库——setFileName()2.3 加载动态库——load()2.4 获取动态库的名字——fileName()2.5 解析共享库中的符号——resolve() 三、示例(Demo&#x…

入门学习使用overleaf和latex

文章目录 1.下载对应的latex论文模板2.overleaf平台的使用2.1overleaf平台的介绍2.2overleaf平台模板文件的上传2.3latex语法的学习2.3.2 分段(如下图显示)2.3.3 其他2.3.4简单latex实操2.3.5 换行符和换页符2.3.6左右居中对齐2.3.7 字体设置2.3.8插入固定位置图片2.3.9文字包围…

KillWxapkg 自动化反编译微信小程序,小程序安全评估工具,发现小程序安全问题,自动解密,解包,可还原工程目录,支持修改Hook,小程序

纯Golang实现,一个用于自动化反编译微信小程序的工具,小程序安全利器,自动解密,解包,可还原工程目录,支持微信开发者工具运行 由于采用了UPX压缩的软件体积,工具运行时可能会出现错误报告&…

Springboot整合Flowable入门-学习笔记

目录 1、定义流程(画图) 2、Springboot部署流程 3、Springboot删除所有流程 4、Springboot根据 流程部署ID 查询 流程定义ID 5、Springboot启动(发起)流程 6、Springboot查询任务 6.1全部任务 6.2我的任务(代办任务) 7、…

Ubuntu怎么进入救援模式或单用户模式

进入救援模式(Rescue Mode)或单用户模式(Single User Mode)的方法取决于你所使用的Linux发行版。以下是通用的步骤,适用于大多数基于GRUB引导的系统,如Ubuntu、Debian、CentOS等: 重启你的系统。…

【Python第三方库】Requests全面解析

文章目录 安装基本用法测试网站发送GET请求发送POST请求更多请求请求参数请求头其他常用请求属性处理响应响应状态码响应内容 处理超时处理异常 requests 是一个非常流行的 Python HTTP 库,用于发送所有类型的 HTTP 请求。它简洁易用,能够处理复杂的请求…

DAMA学习笔记(十三)-大数据和数据科学

1.引言 大数据不仅指数据的量大,也指数据的种类多(结构化的和非结构化的,文档、文件、音频、视频、流数据等),以及数据产生的速度快。数据科学家是指从从数据中探究、研发预测模型、机器学习模型、规范性模型和分析方法…

数据结构与算法基础篇--有向无环

. - 力扣(LeetCode) 力扣-207题 要判定一个图是否为有向无环图(DAG, Directed Acyclic Graph),可以使用拓扑排序(Topological Sort)的方法。如果一个有向图存在拓扑排序,那么它就是…

【MySQL】事务——事务的引入、事务的概念、什么是事务、为什么会出现事务、事务的版本支持、事务的提交方式、事务常见操作方式

文章目录 MySQL1. 事务的引入2. 事务的概念2.1 什么是事务2.2 为什么会出现事务2.3 事务的版本支持2.4 事务的提交方式2.5 事务常见操作方式2.5.1 测试事务开始和回滚2.5.2 测试未commit事务回滚2.5.3 测试commit事务持久化2.5.4 测试begin事务不受自动提交影响2.5.5 测试单条S…