示例代码
https://gitee.com/chenfei01/my-zb/tree/master/learn-sharding-jdbc
简介
sharding-jdbc是当当提供的开源的分库分表,读写分离工具,已jar包形式提供服务,不需要中间层,不需要部署
功能简介:
分库分表
读写分离
分布式主键(64位 一位符号为 0 + 41位时间 + 10工作进程 + 12位序列)
多样化配置(编码+spring命名空间+yaml配置)
官方地址 http://shardingjdbc.io/index_zh.html
使用
1、maven依赖
<sharding.jdbc.version>1.5.4</sharding.jdbc.version>
<dependency> <groupId>com.dangdang</groupId> <artifactId>sharding-jdbc-core</artifactId> <version>${sharding.jdbc.version}</version> </dependency> <dependency> <groupId>com.dangdang</groupId> <artifactId>sharding-jdbc-config-spring</artifactId> <version>${sharding.jdbc.version}</version> </dependency> <dependency> <groupId>com.dangdang</groupId> <artifactId>sharding-jdbc-config-yaml</artifactId> <version>${sharding.jdbc.version}</version> </dependency>
2、数据源配置
分库策略,对customer_id取模 algorithm-class对应策略实现类
<rdb:strategy id="couponStrategy" sharding-columns="customer_id" algorithm-class="com.zb.qjs.market.config.shard.DatabaseShardingAlgorithm" />
配置数据源:
主从配置,读写分离数据源
<rdb:master-slave-data-source id="sharding_0" master-data-source-ref="master_0" slave-data-sources-ref="master_0_slave" /> <rdb:master-slave-data-source id="sharding_1" master-data-source-ref="master_1" slave-data-sources-ref="master_1_slave" />
分库数据源配置
<rdb:data-source id="shardingDataSource"> <rdb:sharding-rule data-sources="sharding_0,sharding_1,master_slave"> <rdb:table-rules> <!-- 不需要分表,table-strategy不需要配置 --> <rdb:table-rule logic-table="ganjs_market_coupon" database-strategy="couponStrategy" data-source-names="sharding_0,sharding_1" /> <rdb:table-rule logic-table="ganjs_market_coupon_sync_log" database-strategy="syncLogStrategy" data-source-names="sharding_0,sharding_1" /> <!-- 不需要分库分表,database-strategy和table-strategy都不需要配置 --> <rdb:table-rule logic-table="ganjs_market_coupon_sync_error" data-source-names="master_slave" /> </rdb:table-rules> <rdb:default-database-strategy sharding-columns="none" algorithm-class="com.dangdang.ddframe.rdb.sharding.api.strategy.database.NoneDatabaseShardingAlgorithm"/> <rdb:default-table-strategy sharding-columns="none" algorithm-class="com.dangdang.ddframe.rdb.sharding.api.strategy.table.NoneTableShardingAlgorithm" /> </rdb:sharding-rule> <rdb:props> <prop key="sql.show">${datasource.sql.show}</prop> </rdb:props> </rdb:data-source> <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <property name="dataSource" ref="shardingDataSource" /> <property name="mapperLocations" value="classpath*:sqlmap/*.xml" /> <property name="configLocation" value="classpath:mybatis-config.xml" /> </bean>
分表配置,同上,如图
使用如上配置后,请求先根据customer_id取模获取对应数据库数据源,根据读写使用主从数据库,写是主库,读为从库
注意事项:
SQL语句限制
有限支持子查询
不支持HAVING
不支持OR,UNION 和 UNION ALL
不支持特殊INSERT
每条INSERT语句只能插入一条数据,不支持VALUES后有多行数据的语句