Mycat (一)
Mycat是数据层与数据库之间的一个中间件。
Mycat的前身是阿里的一个开源项目,Cobar。
Cobar早前阿里没有继续更新和维护,后被一个民间组织捡起来重构,修复了一些BUG,新增了一些功能,同时不仅仅是支持Mysql。
这个组织很有意思的是,他们的目标呢,是加入Apache。
官网给出的下载地址:
https://github.com/MyCATApache/Mycat-download-new
。
而这个中间件能帮我们做什么呢?
需求:
在大量的数据面前,这些数据是不适合添加缓存查询的,且要保证数据完整,查询效率高。
难点:
Mysql实际上呢,它的性能方面还是比不上Oracle,而如果数据存在于百万条以上的话,特别是多表联查的时候,关系型数据库的查询速度会变得很慢,而有些特定的数据呢,是不希望放在缓存当中的,万一缓存丢失,数据也就丢失了,而这些数据的读写量也是非常之高的,所以这个时候呢,就希望数据库的性能呢,能更好一些。
思路:
我们不希望在查询数据的时候过慢,除了增加本身数据库的优化内容,而常做的一些工作就是分库分表。
分库分表的形式有两种:
※ 垂直分割
为不同的业务单独建库,就像一个服务用户的服务,它将所有与用户有关的数据放在一个库里。
优点:将该业务的数据从一个库中抽出后单独作为一个库,不与其他数据关联,看起来明确一些吧。
缺点:这也没有从根本上解决说数据量读写速度提升,且,如果要将该业务与其他业务的数据关联,需先从这个数据库中拿到数据后,再通过一些主键查询的操作,从而达到目的。
※ 水平分割
有多个库,且每个库上都有相同的数据表,且这些数据表存储的数据是部分数据。
缺点:数据表暴增
优点:能基本上解决之前所说的数据量读写的速度问题,且它应该要具有一些拆分规则,拆分规则指定了每个库中每张表所能存储的最大数据量是多少,且它做数据读取时,应该是有对应的查询导向。
Mycat这个中间件就用来帮我们做数据库的切分。