springboot - sharding-jdbc 实现分库分表

1)使用场景
对于Mysql主从复制实现读写分离来说,可以解决读的扩展性问题。但是写的话,面对庞大的数据量还是集中在Master上,并且Master挂载的slave不可能无限制多,因为slave依赖于Master的能力和负载的限制。因此需要对Master进行扩展来实现海量数据的需要。

2)分表
对于访问极为频繁,数据量又极大的表来说,最直接做的就是减少数据量的总条数,以便减少数据查询所需要的时间,可以对大数据表进行分表。
分表策略:用id来进行分表是最为常见的策略,因为大部分查询都要带上id,又不影响查询又能使得数据均衡的分布在各个表中。假设有一个订单表有1000w条数据,将该表分成16个表,将id%16进行存储,如果id不是数字可以先hash取值。拆分的记录根据取余的值进行存储,App应用根据取余的值进行表的访问。

3)分库
分表能解决数据量过大造成的查询效率低下的问题,但是无法有效提示数据的并发访问能力。将数据库拆分,提高数据库的写入能力就是所谓的分库。
与分表类似,分库策略可以通过对某一个字段如id进行取余操作,来对数据访问进行路由。如id=19,分成3个库,19%3=1,这时候就路由到第一个库。

4)sharding-jdbc 实现分库分表

sharding-jdbc 最先是当当网开源代码,后来被Apache集成。
sharding-jdbc能帮我们实现什么:
1,保证事务一致性(跨库)
2,支持分页查询(跨库)
3,只要重配数据源,其他代码不需要改动

 

pom.xml 模块,引入jar 

 1 <dependency>
 2    <groupId>io.shardingjdbc</groupId>
 3    <artifactId>sharding-jdbc-core</artifactId>
 4    <version>2.0.3</version>
 5 </dependency>
 6 <dependency>
 7    <groupId>com.alibaba</groupId>
 8    <artifactId>druid</artifactId>
 9    <version>1.1.3</version>
10 </dependency>
11 <dependency>
12    <groupId>commons-dbcp</groupId>
13    <artifactId>commons-dbcp</artifactId>
14    <version>1.4</version>
15 </dependency>

 

demo链接:
链接:https://pan.baidu.com/s/1DPArC6hz3PmnSmSKc9KhmQ
提取码:ads6

 

上一篇:使用Sharding-JDBC 分库分表


下一篇:Sharding-JDBC(二)2.0.3版本实践