您好!
欢迎来到京东云开发者社区
登录
首页
博文
课程
大赛
工具
用户中心
开源
首页
博文
课程
大赛
工具
开源
更多
用户中心
开发者社区
>
博文
>
数据分片核心概念——行表达式
分享
打开微信扫码分享
点击前往QQ分享
点击前往微博分享
点击复制链接
数据分片核心概念——行表达式
Apache ShardingSphere
2021-01-14
IP归属:未知
779浏览
核心概念篇主要介绍数据分片的核心概念,主要包括: - SQL核心概念 - 分片核心概念 - 配置核心概念 - 行表达式 - 分布式主键 - 强制分片路由 --- # 实现动机 配置的简化与一体化是行表达式所希望解决的两个主要问题。 在繁琐的数据分片规则配置中,随着数据节点的增多,大量的重复配置使得配置本身不易被维护。通过行表达式可以有效地简化数据节点配置工作量。 对于常见的分片算法,使用 Java 代码实现并不有助于配置的统一管理。通过行表达式书写分片算法,可以有效地将规则配置一同存放,更加易于浏览与存储。 # 语法说明 行表达式的使用非常直观,只需要在配置中使用 `${ expression }` 或 `$->{ expression }` 标识行表达式即可。 目前支持数据节点和分片算法这两个部分的配置。行表达式的内容使用的是 Groovy 的语法,Groovy 能够支持的所有操作,行表达式均能够支持。例如: `${begin..end}` 表示范围区间 `${[unit1, unit2, unit_x]}` 表示枚举值 行表达式中如果出现连续多个 `${ expression }` 或 `$->{ expression }` 表达式,整个表达式最终的结果将会根据每个子表达式的结果进行笛卡尔组合。 例如,以下行表达式: ```groovy ${['online', 'offline']}_table${1..3} ``` 最终会解析为: ``` online_table1, online_table2, online_table3, offline_table1, offline_table2, offline_table3 ``` # 配置数据节点 对于均匀分布的数据节点,如果数据结构如下: ``` db0 ├── t_order0 └── t_order1 db1 ├── t_order0 └── t_order1 ``` 用行表达式可以简化为: ``` db${0..1}.t_order${0..1} ``` 或者 ``` db$->{0..1}.t_order$->{0..1} ``` 对于自定义的数据节点,如果数据结构如下: ``` db0 ├── t_order0 └── t_order1 db1 ├── t_order2 ├── t_order3 └── t_order4 ``` 用行表达式可以简化为: ``` db0.t_order${0..1},db1.t_order${2..4} ``` 或者 ``` db0.t_order$->{0..1},db1.t_order$->{2..4} ``` 对于有前缀的数据节点,也可以通过行表达式灵活配置,如果数据结构如下: ``` db0 ├── t_order_00 ├── t_order_01 ├── t_order_02 ├── t_order_03 ├── t_order_04 ├── t_order_05 ├── t_order_06 ├── t_order_07 ├── t_order_08 ├── t_order_09 ├── t_order_10 ├── t_order_11 ├── t_order_12 ├── t_order_13 ├── t_order_14 ├── t_order_15 ├── t_order_16 ├── t_order_17 ├── t_order_18 ├── t_order_19 └── t_order_20 db1 ├── t_order_00 ├── t_order_01 ├── t_order_02 ├── t_order_03 ├── t_order_04 ├── t_order_05 ├── t_order_06 ├── t_order_07 ├── t_order_08 ├── t_order_09 ├── t_order_10 ├── t_order_11 ├── t_order_12 ├── t_order_13 ├── t_order_14 ├── t_order_15 ├── t_order_16 ├── t_order_17 ├── t_order_18 ├── t_order_19 └── t_order_20 ``` 可以使用分开配置的方式,先配置包含前缀的数据节点,再配置不含前缀的数据节点,再利用行表达式笛卡尔积的特性,自动组合即可。 上面的示例,用行表达式可以简化为: ``` db${0..1}.t_order_0${0..9}, db${0..1}.t_order_${10..20} ``` 或者 ``` db$->{0..1}.t_order_0$->{0..9}, db$->{0..1}.t_order_$->{10..20} ``` # 配置分片算法 对于只有一个分片键的使用 `=` 和 `IN` 进行分片的 SQL,可以使用行表达式代替编码方式配置。 行表达式内部的表达式本质上是一段 Groovy 代码,可以根据分片键进行计算的方式,返回相应的真实数据源或真实表名称。 例如:分为 10 个库,尾数为 0 的路由到后缀为 0 的数据源, 尾数为 1 的路由到后缀为 1 的数据源,以此类推。用于表示分片算法的行表达式为: ``` ds${id % 10} ``` 或者 ``` ds$->{id % 10} ```
原创文章,需联系作者,授权转载
上一篇:数据分片核心概念——分布式主键
下一篇:数据分片核心概念——配置
Apache ShardingSphere
文章数
96
阅读量
232084
作者其他文章
01
突破关系型数据库桎梏:云原生数据库中间件核心剖析
数据库技术的发展与变革方兴未艾,NewSQL的出现,只是将各种所需技术组合在一起,而这些技术组合在一起所实现的核心功能,推动着云原生数据库的发展。 NewSQL的三种分类中,新架构和云数据库涉及了太多与数据库相关的底层实现,为了保证本文的范围不至太过发散,我们重点介绍透明化分片数据库中间件的核心功能与实现原理,另外两种类型的NewSQL在核心功能上类似,但实现原理会有所差别。
01
Apache ShardingSphere数据脱敏全解决方案详解(上)
Apache ShardingSphere针对新业务上线、旧业务改造分别提供了相应的全套脱敏解决方案。
01
Shardingsphere整合Narayana对XA分布式事务的支持(4)
ShardingSphere对于XA方案,提供了一套SPI解决方案,对Narayana进行了整合,Narayana初始化流程,开始事务流程,获取连接流程,提交事务流程,回滚事务流程。
01
从中间件到分布式数据库生态,ShardingSphere 5.x革新变旧
5.x 是 Apache ShardingSphere从分库分表中间件向分布式数据库生态转化的里程碑,从 4.x 版本后期开始打磨的可插拔架构在 5.x 版本已逐渐成型,项目的设计理念和 API 都进行了大幅提升。欢迎大家测试使用!
最新回复
丨
点赞排行
共0条评论
Apache ShardingSphere
文章数
96
阅读量
232084
作者其他文章
01
突破关系型数据库桎梏:云原生数据库中间件核心剖析
01
Apache ShardingSphere数据脱敏全解决方案详解(上)
01
Shardingsphere整合Narayana对XA分布式事务的支持(4)
01
从中间件到分布式数据库生态,ShardingSphere 5.x革新变旧
添加企业微信
获取1V1专业服务
扫码关注
京东云开发者公众号