赞
踩
ShardingSphere框架成员中的Shardingsphere-jdbc和Shardingsphere-proxy都提供了自动化管理分片表的功能auto-tables,可以统一维护大量的分片表,避免了手动编写脚本和维护分片表的繁琐工作,极大程度减少分库分表的开发和维护成本,提升效率和可靠性。
图片
这里咱们先使用Shardingsphere-jdbc来实际操作一下,Shardingsphere-proxy方式后续会有单独的文章详细讲解,就不在这里展开了。
假设我们要对t_order表进行分库分表,首先我们要做的就是确定好分片方案,这里使用两个数据库实例db0、db1,每个实例中t_order表分成1000张分片表t_order_1 ~ t_order_1000,order_id字段作为分片键,分片算法使用取模算法order_id % n,分布式主键生成策略采用snowflake。
t_order逻辑表的表结构如下:
- CREATE TABLE `t_order` (
- `order_id` BIGINT ( 20 ) NOT NULL COMMENT "订单表分布式主健ID",
- `order_number` VARCHAR ( 255 ) NOT NULL COMMENT "订单号",
- `customer_id` BIGINT ( 20 ) NOT NULL COMMENT "用户ID",
- `order_date` date NOT NULL COMMENT "下单时间",
- `total_amount` DECIMAL ( 10, 2 ) NOT NULL COMMENT "订单金额",
- PRIMARY KEY ( `order_id` ) USING BTREE
- );
有了这些基础信息,可以先来进行t_order表的分片配置了,不考虑其他因素,这里先Run起来!
设定好分片规则,接着编写逻辑表t_order的分片规则的配置,我分别使用yml配置和Java编码两种方式做了实现。要注意的是两种方式不要并存,不然启动会报错。
使用yml配置相对简单易用比较直观,适合对分库分表要求不太复杂的场景,完整配置如下:
- spring:
- shardingsphere:
- datasource:
- # 数据源名称,多数据源以逗号分隔 ,放在第一个的数据源为未配置分片规则表的默认数据源
- names: db0 , db1
- # 名称与上边 names 保持一致
- db0:
- ....
-
- db1:
- ....
- # 具体规则配置
- rules:
- sharding:
- # 分片算法定义
- sharding-algorithms:
- # 自定义分片算法名称
- t_order_database_algorithms:
- # 分片算法类型
- type: INLINE
- # 自定义参数
- props:
- algorithm-expression: db$->{order_id % 2}
- t_order_table_algorithms:
- type: INLINE
- props:
- algorithm-expression: t_order_$->{order_id % 1000}
- t_order_mod:
- type: MOD
- props:
- # 指定分片数量
- sharding-count: 1000
- # 分布式序列算法配置
- key-generators:
- t_order_snowflake:
- type: SNOWFLAKE
- # 分布式序列算法属性配置
- props:
- worker-id: 1
- tables:
- # 逻辑表名称
- t_order:
- # 数据节点ÿ
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。