1)使用场景
对于Mysql主从复制实现读写分离来讲,能够解决读的扩展性问题。可是写的话,面对庞大的数据量仍是集中在Master上,而且Master挂载的slave不可能无限制多,由于slave依赖于Master的能力和负载的限制。所以须要对Master进行扩展来实现海量数据的须要。sql
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,只要重配数据源,其余代码不须要改动ui
pom.xml 模块,引入jar spa
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 code