1.概念
大概分表数据量需要达到800万-1000万
阿里规范说:500万以上就需要分表
表区分:
真实表:数据库真实存在的表,也是可以作为分表的表
逻辑表:查询分表的结果集
绑定表:比如任务和任务详情,关联信息都在同一个数据库内
广播表:字典表,多个数据源内表内容一致
分布式全局唯一ID:
UUID
Redis Increment
Zookeeper 分布式锁
Twitter的Snowflake(雪花算法)
64 bit 的 long 型的数字 ,其中 1 个 bit 是不用的默认0,然后用其中的 41 bit 作为毫秒数,用 10 bit 作为工作机房+机器 id,12 bit 作为序列号
Ticket Server(数据库生成方式,Flickr采用这个方式)
具体可以参考这个文章说明:https://www.cnblogs.com/Tiancheng-Duan/p/10962704.html
分片策略:
1. 标准策略
2. 复合策略
3. 行表达式策略
4. hint策略
5. 不分片策略
分片算法
标准
范围
复合
hint
分片键
2.配置文件配置内容:
数据源配置:
配置数据源ds0,ds1 2个库
分别配置数据库的连接信息
# 数据源配置
sharding.jdbc.datasource.names=ds0,ds1
sharding.jdbc.datasource.ds0.type=com.alibaba.druid.pool.DruidDataSource
sharding.jdbc.datasource.ds0.driver-class-name=com.mysql.jdbc.Driver
sharding.jdbc.datasource.ds0.url=jdbc:mysql://localhost:3306/ds0
sharding.jdbc.datasource.ds0.username=root
sharding.jdbc.datasource.ds0.password=123456
sharding.jdbc.datasource.ds1.type=com.alibaba.druid.pool.DruidDataSource
sharding.jdbc.datasource.ds1.driver-class-name=com.mysql.jdbc.Driver
sharding.jdbc.datasource.ds1.url=jdbc:mysql://localhost:3306/ds1
sharding.jdbc.datasource.ds1.username=root
sharding.jdbc.datasource.ds1.password=123456
分库配置:
sharding.jdbc.config.sharding.default-database-strategy.inline.sharding-column=user_id
sharding.jdbc.config.sharding.default-database-strategy.inline.algorithm-expression=ds$->{user_id % 2}
sharding.jdbc.config.sharding.binding-tables=t_order,t_order_item
分表配置:
分表可以通过2种方式
1.配置方式
2.自定义class文件配置
# t_order分表配置
sharding.jdbc.config.sharding.tables.t_order.actual-data-nodes=ds$->{0..1}.t_order$->{0..1}
# 分片键配置
sharding.jdbc.config.sharding.tables.t_order.table-strategy.inline.sharding-column=order_id
sharding.jdbc.config.sharding.tables.t_order.table-strategy.inline.algorithm-expression=t_order$->{order_id % 2}
#sharding.jdbc.config.sharding.tables.t_order.key-generator-class-name=io.shardingsphere.core.keygen.DefaultKeyGenerator
#sharding.jdbc.config.sharding.tables.t_order.key-generator-column-name=id
绑定表配置:
广播表配置:
# 广播表
sharding.jdbc.config.sharding.broadcast-tables=t_province