您的位置:首页 > 数据库

mycat初使用体验与分库分表

2016-08-25 11:55 465 查看
引言:MyCat截至到2015年4月,保守估计已经有超过60个项目在使用,主要应用在电信领域、互联网项目,大部分是交易和管理系统,少量是信息系统。比较大的系统中,数据规模单表单月30亿。

在以前的项目中有幸也使用了一些分库分表的插件,今天就无事想把这两种框架搭建起来比较一下性能和适用场景!

mycat号称分库分表,但看实际配置文件


通过配置可以看到对于同一张表确实进行了分库,但是分表却没有!

虽然1.6对外宣称支持了分表,看官方文档说明:


可是既然只支持一个datanode那就不能进行分库!

也就是说如果对数据库进行了分库就不可以进行分表,给开发者一个二选一的抉择!

笔者负责开发的模块在业务上,是如此进行拆分的:

1:按照某个字段选出要进行插入或者更改的数据所在的数据库。

2:在按照这个字段选出要进行插入或者更改的数据所在的数据库表。

经过以上两个步骤就可以确定当前数据所在的库和表。

但是mycat只可以进行二选一,进行分库就不可以进行分表,显然不符合笔者最初对应用程序的架构!

附上笔者数据库架构图:







总结:

mycat虽然实现了分库但是并没有实现分表,并不符合笔者的要求。

解决这个问题没有直接的办法,那就找一个间接的方法解决这个问题吧!

笔者解决方法是在每个单独的数据库中建立同名的视图,该视图对每个库中的分表进行归并,形成一个整体的虚表,然后交由mycat负责整体展示!

这样笔者的目的就可以实现了,就是由应用程序自己做数据库的路由将数据库写入各个数据库中,然后通过mycat交给dba或者需要对数据进行展示或者集中处理和展示!

这样既可以避免分库分表带来的数据分散汇总的痛苦,也可以通过分库分表来实现数据库的负载均衡,提高系统的吞吐!

毕竟对数据进行导出进行查询之时,已经没有时间上的限制,虽然进行大数据量的查询在业务上是不推荐的,但是如果可以控制好查询条件,这样对dba而言也可以使用一些高阶的sql语句,可以减轻dba管理数据库的难度!

附上最后的结果图:


<
4000
br />

mycat确实对数据进行了归并,看起来确实是一张表,但实际上这些数据位于三个不同的数据库,每个库10张表,共30张表!

因为工作的保密规定,不能透露公司使用的分库分表插件,请大家谅解!

感受;

mycat在分库分表的支持上并不彻底,选择分库就不能进行分表,选择分表就不能分库,希望后续可以改进!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息