一、背景
随着时间和业务的发展,数据库中的数据量增长是不可控的,库和表中的数据会越来越大,随之带来的是更高的磁盘、IO、系统开销,甚至性能上的瓶颈,而一台服务的资源终究是有限的,因此需要对数据库和表进行拆分,从而更好的提供数据服务。
当用户表达到千万级别,在做很多操作的时候都会很吃力,所以当数据增长到1000万以上就需要分库分表来缓解单库(表)的压力。
二、mycat原理
可以用拦截形容,它拦截了用户发送过来的SQL语句,首先对sql语句做了一些特定的分析,如分片分析,路由分析,读写分析,读写分离分析,缓存分析等,然后将此sql发送后端的真是数据库,并将反馈的结果做适当的处理,最终返回给用户
三、mycat介绍
•一个用于MySQL读写分离和与数据切分的高可用中间件
•一个模拟为MySQLServer的超级数据库代理
•一个能平滑扩展支持1000亿大表的分布式数据库系统 (普通单表1kw以下)
•一个可管控多种关系数据库的数据库路由器
•一个彻底开源的,面向企业应用开发的大数据库集群
• 支持事务、ACID、可以替代MySQL的加强版数据库
•一个可以视为MySQL集群的企业级数据库,用来替代昂贵的Oracle集群
•一个融合内存缓存技术、NoSQL技术、HDFS大数据的新型SQL Server
• 结合传统数据库和新型分布式数据仓库的新一代企业级数据库产品
•一个新颖的数据库中间件产品
四、什么是分库分表
简单来说,就是指通过某种特定的条件,将我们存放在同一个数据库中的数据分散存放到多个数据库(主机)上面,以达到分散单台设备负载的效果。
数据的切分(Sharding)根据其切分规则的类型,可以分为两种切分模式。一种是按照不同的表(或者Schema)来切分到不同的数据库(主机)之上,这种切可以称之为数据的垂直(纵向)切分;另外一种则是根据表中的数据的逻辑关系,将同一个表中的数据按照某种条件拆分到多台数据库(主机)上面,这种切分称之为数
据的水平(横向)切分。
垂直切分的最大特点就是规则简单,实施也更为方便,尤其适合各业务之间的耦合度非常低,相互影响很小,业务逻辑非常清晰的系统。在这种系统中,可以很容易做到将不同业务模块所使用的表分拆到不同的数据库中。根据不同的表来进行拆分,对应用程序的影响也更小,拆分规则也会比较简单清晰。
水平切分于垂直切分相比,相对来说稍微复杂一些。因为要将同一个表中的不同数据拆分到不同的数据库中,对于应用程序来说,拆分规则本身就较根据表名来拆分更为复杂,后期的数据维护也会更为复杂一些。
五、分片介绍
5.1垂直切片
将不同的表切分到不同的数据库中
5.2水平切片
将同一类型表按照分片条件切分到不同的数据库中(常用)
六、配置文件
mycat主要有3个配置文件,rule.xml,schema.xml和server.xml,这主要对这3个文件作讲解
七、 关键特性
-遵守Mysql原生协议,跨语言,跨数据库的通用中间件代理。
-基于心跳的自动故障切换,支持读写分离,支持MySQL一双主多从,以及一主多从
-有效管理数据源连接,基于数据分库,而不是分表的模式。
-基于Nio实现,有效管理线程,高并发问题。
-支持数据的多片自动路由与聚合,支持sum,count,max等常用的聚合函数。
-支持2表join,甚至基于caltlet的多表join。
-支持通过全局表,ER关系的分片策略,实现了高效的多表join查询。
-支持多租户方案。-支持分布式事务(弱xa)
-支持全局序列号,解决分布式下的主键生成问题。
-分片规则丰富,插件化开发,易于扩展。
-强大的web,命令行监控。
-支持前端作为mysq通用代理,后端JDBC方式支持Oracle、DB2、SQL Server、mongodb、巨杉。
-集群基于ZooKeeper管理,在线升级,扩容,智能优化,大数据处理(2.0开发版)。
八、安装
官网下载: http://www.mycat.io/
下载后解压,进入mycatin 目录
双击启动 startup_nowrap.bat