首页 > 代码库 > mycat 概述

mycat 概述

从开始接触mycat,到现在为止也有三个多月的时间了,目前在测试环境中已经初步应用!大概可以总结一下了

mycat是一个数据库中间件,也可以理解为是数据库代理。在架构体系中是位于数据库和应用层之间的一个组件,并且对于应用层是透明的,即数据库感受不到mycat的存在,认为是直接连接的mysql数据库(实际上是连接的mycat,mycat实现了mysql的原生协议)

mycat的三大功能:分表、读写分离、主从切换;mycat的主要功能也就是这三个了吧!??

1、分表

  对于数据量很大的表(千万级以上),mysql性能会有很大下降,因此尽量控制在每张表的大小在百万级别。对于数据量很大的一张表,可以考虑将这些记录按照一定的规则放到不同的数据库里面。这样每个数据库的数据量不是太大,性能也不会有太大损失。

  mycat自动会帮助我们实现分表功能,而对于应用层来说是透明的,即跟一张表没有什么区别!

  mycat分表的实现:首先在mycat的scheme.xml中配置逻辑表,并且在配置中说明此表在哪几个物理库上。此逻辑表的名字与真实数据库中的名字一致!然后需要配置分片规则,即按照什么逻辑分库!分片规则有很多,选取以下几个简单说明:

  1、根据数据库某字段的hash值片

  2、截取某字段的几位数字,匹配分区号

  3、按照时间(年份分表)

  4、……

  分表的原则是尽量避免跨库操作操作,跨库操作会损失很多性能,mycat会对各个库的结果集进行合并,另外就是要考虑扩展之后,尽量使最少量的数据迁移。

  分表规则很多,很灵活,并且在源码基础上修改分片规则也很容易!

  分表之后有什么弊端呢?

  使用存储过程/函数就不太方便了,mycat本身不支持存储过程,是通过注解的方式实现存储过程的调用。并且在所有库上都执行,将执行结果合并,并返回(mysql存储过程返回结果最好使用select方式返回)。

  

mycat 概述