天天看点

Sharding-JDBC分库分表使用记录

1 Sharding-JDBC分库分表使用实例

https://blog.csdn.net/u011116672/article/details/78374724

官网:http://shardingjdbc.io/

1.2 分表配置示例

#===================================== data-source start=============================
sharding.jdbc.datasource.names=ds

sharding.jdbc.datasource.ds.type=com.alibaba.druid.pool.DruidDataSource
sharding.jdbc.datasource.ds.driver-class-name=com.mysql.jdbc.Driver
sharding.jdbc.datasource.ds.url=jdbc:mysql://127.0.0.1:3306/demo_test?useUnicode=true&characterEncoding=utf-8&allowMultiQueries=true&useSSL=false
sharding.jdbc.datasource.ds.username=admin
sharding.jdbc.datasource.ds.password=123456

# 初始化大小,最小,最大
sharding.jdbc.datasource.ds.initialSize=1
sharding.jdbc.datasource.ds.minIdle=1
sharding.jdbc.datasource.ds.maxActive=20
# 配置获取连接等待超时的时间
sharding.jdbc.datasource.ds.maxWait=60000
# 配置一个连接在池中最小生存的时间,单位是毫秒
sharding.jdbc.datasource.ds.validationQuery=SELECT 1 FROM DUAL
sharding.jdbc.datasource.ds.testOnBorrow=false
sharding.jdbc.datasource.ds.testOnReturn=false
sharding.jdbc.datasource.ds.testWhileIdle=true
sharding.jdbc.datasource.ds.minEvictableIdleTimeMillis=25200000
# 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
sharding.jdbc.datasource.ds.timeBetweenEvictionRunsMillis=60000
sharding.jdbc.datasource.ds.removeAbandoned=true
.removeAbandonedTimeout=1800
# 打开PSCache,并且指定每个连接上PSCache的大小
sharding.jdbc.datasource.ds.poolPreparedStatements=true
sharding.jdbc.datasource.ds.maxPoolPreparedStatementPerConnectionSize=20
sharding.jdbc.datasource.ds.logAbandoned=true
# 配置监控统计拦截的filters,去掉后监控界面sql无法统计,'wall'用于防火墙
sharding.jdbc.datasource.filters=stat,wall,log4j

#===================================== data-source end=============================



#===================================== 分表 start=====================================

# t_order  根据order_id分表
sharding.jdbc.config.sharding.tables.t_order.actual-data-nodes=ds.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-column-name=order_id

# t_order_item 根据order_id字段分表
sharding.jdbc.config.sharding.tables.t_order_item.actual-data-nodes=ds.t_order_item_$->{0..1}
sharding.jdbc.config.sharding.tables.t_order_item.table-strategy.inline.sharding-column=order_id
sharding.jdbc.config.sharding.tables.t_order_item.table-strategy.inline.algorithm-expression=t_order_item_$->{order_id % 2}
sharding.jdbc.config.sharding.tables.t_order_item.key-generator-column-name=order_item_id

#未配置分片规则的表将通过默认数据源定位
sharding.jdbc.config.sharding.default-data-source-name=ds 
#打印sql
sharding.jdbc.config.sharding.props.sql.show=true

spring.profiles.active=sharding
#===================================== 分表   end=======================================
           

2 支持的sql

http://shardingsphere.io/document/current/cn/features/sharding/usage-standard/sql/

3 分布式主键生成

获取毫秒数,最高1000并发

4 主键偶数问题

Sharding-JDBC采用snowflake算法作为默认的分布式分布式自增主键策略,用于保证分布式的情况下可以无中心化的生成不重复的自增序列。

因此自增主键可以保证递增,但无法保证连续。而snowflake算法的最后4位是在同一毫秒内的访问递增值。因此,如果毫秒内并发度不高,最后4位为零的几率则很大。因此并发度不高的应用生成偶数主键的几率会更高。

5 博客连接-数据分表小结 

https://www.cnblogs.com/wangiqngpei557/p/9347232.html

7 高手问答第 144 期 

轻量级数据库中间层 Sharding-JDBC 深度解析

https://www.cnblogs.com/yeahwell/p/7920383.html

https://www.oschina.net/question/2720166_2233456?sort=default&p=6

8 本篇主要针对spring-mybatis不分库只分表问题收集

https://blog.csdn.net/yangstarss/article/details/80177605

https://www.cnblogs.com/yjmyzz/p/sharding-jdbc-turotial.html

9  sharding-jdbc源码

https://blog.csdn.net/column/details/22801.html?&page=2

10 sharding-jdbc分库分表规则(1)-单表查询流程

https://blog.csdn.net/yanyan19880509/article/details/78008461

11自定义分表分库-sharding-jdbc—分片策略

https://www.cnblogs.com/mr-yang-localhost/p/8313360.html

12 mycat使用限制、Mycat 不适应场景

https://blog.csdn.net/yangstarss/article/details/80179821

https://blog.csdn.net/luoqinglong850102/article/details/80749228

13 工作深度总结——分库分表sharding-jdbc实践路线

https://blog.csdn.net/wangmei4968/article/details/79415300

总结:该分表框架使用简单,无代码侵入性,当前使用的是分表功能,未使用分库功能,因为分库后跨库join不支持,未找到有效的解决方案。

继续阅读