标签:分区 不同的 行合并 应用 操作 基础上 scheme 物理 代理
从开始接触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方式返回)。
标签:分区 不同的 行合并 应用 操作 基础上 scheme 物理 代理
原文地址:http://www.cnblogs.com/tengpan-cn/p/5996020.html