转自:学习Java的小姐姐 www.cnblogs.com/chenchen0618/p/11624480.htmlhtml
从字面上简单理解,就是将本来存储在一个库的数据分块存储在多个库上,将本来存储在一个表的数据分块存储在多个表里面。前端
数据的切分根据其切分规则的类型,能够分为以下两种切分模式。数据库
垂直(纵向)切分
:把单一的表拆分红多个表,并分散到不一样的数据库(主机)上。 好比一个订单表里面有用户信息,商品信息,收货地址信息,促销信息,这样表的字段太多,显得特别臃肿,因此咱们将他们各自分隔出来,造成多张表存储数据。yii
优势:性能
缺点:学习
水平(横向)切分
:根据表中数据的逻辑关系,将同一个表中的数据按照某种条件拆分到多台数据库(主机)上。与垂直切分对比,水平切分不是将表进行分类,而是将其按照某个字段的某种规则分散到多个库中,在每一个表中包含一部分数据,全部表加起来就是全量的数据。网站
好比有一个用户表,单张表的记录条数达到1亿条,这样在进行查询,插入,更新操做的时候,速度将很是慢,那咱们能够将这些数据分配到100个表里面,每一个表的数据量就下来了,致使单表的容量不会太大,从而保证了单表的查询等处理能力。code
咱们一般将数据分配的原则称为分片规则,常见的分片规则有对用户的id取模。htm
注意:必定要好好决定分片规则,尽可能选择不会变更的字段,若是选择区域,性别,年龄等字段,当用户修改这些信息的时候又要讲数据移动到其余数据库,这里面的逻辑也很头疼。中间件
优势:
缺点:
数据库负载增大时的处理:随着咱们的应用的用户量愈来愈大,访问量也随之提高,当他们提高到必定的量级以后,应用也就愈来愈慢。固然咱们能够经过增大前端应用负载的方式来提高速度,可是直到有一天咱们发现不管如何增大前端应用负载都不能提高速度,咱们就逐步找到缘由,是数据库的问题。由于数据库是存在性能瓶颈的,这是没法避免的。
MyCat:是一个中间件的第三方应用,使用MyCat时不须要改代码。 咱们在使用的时候,若是有多个库,咱们在代码里面就只要写MyCat对外的一个逻辑库信息就行,而数据库层面的配置,好比总共有多少个库,每一个库里面的表,每一个表的分片规则,这些都是在MyCat里面配置,不须要修改代码信息。 具体的逻辑图以下:
Sharding-JDBC:是一个jar包,使用Sharding-JDBC时须要修改代码。 咱们在使用的时候,须要引入Sharding-JDBC的jar包,在配置文件里面写明总共有多少个库,每一个库里面的表,每一个表的分片规则等信息。 具体的逻辑图以下:
Sharding-JDBC和Mycat使用不一样的理念,Sharding-JDBC目前是基于JDBC驱动,无需额外的proxy,所以也无需关注proxy自己的高可用。MyCat 是基于 Proxy,它复写了 MySQL 协议,将 Mycat Server 假装成一个 MySQL 数据库,而 Sharding-JDBC 是基于 JDBC 接口的扩展,是以 jar 包的形式提供轻量级服务的。
其实MyCat很适合中小企业使用
的。能够很是容易的实现数据库的读写分离和分库分表,反而对于大企业来讲,都会本身开发适合本身的数据库中间层应用,好比Sharding-JDBC原来就是当当网内部的数据库中间件,后来开源出来的。
欢迎关注个人公众号::一点教程。得到独家整理的学习资源和平常干货推送。 若是您对个人系列教程感兴趣,也能够关注个人网站:yiidian.com