Mycat和分库分表
Posted 软件工程师涨薪姿势
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Mycat和分库分表相关的知识,希望对你有一定的参考价值。
mycat是一种非常流行的分布式数据库中间插件,mycat的作用为满足数据库的大量存储,提高了查询性能,从架构的角度来理解就是前端用户可以把mycat看作是一个数据库的代理,核心功能是分库分表,即将一个大表水平分割为n个小表。
mycat的原理是拦截了用户发送过来的sql语句,首先对sql语句做一些特定的分析,如分片分析,路由分析,读写分离分析,缓存分析,然后将此sql发送到后端真实的数据库,主要的配置文件是rule.xml, schema.xml和server.xml。
数据库的分片是指通过某种特定的条件,将我们存放在一个数据库中数据分散到不同的数据库中,有两种切片方式,一种是水平切分,一种是垂直切片,水平切片是指将同一个表中的数据切分到不同的数据库中,垂直拆分比较简单,按业务角度拆分成多个库,即原来库里的不同分别放到不同的库中。
分库分表的方案:hash取模和range范围方案;分库分表方案最主要的就是路由算法,把路由的key按照指定的算法进行路由存放。
1、Hash取模算法
在设计系统之前,可以估计一下大概这几年的订单量,如4000万。每张表可以容纳1000万,我们可以设计4张表进行存储。具体的实现过程如下图所示:
优点
订单数据可以可以均匀分布,不会有热点问题。
缺点
将来的数据迁移和扩容,会比较困难。
2、range范围方案
这种方案就是以范围对数据进行拆分,具体实现过程如下图所示,非常好理解。
优点
有利于将来的扩容,不需要进行数据的迁移
缺点
有热点问题,如果要查询一个范围内的数据,只会集中在一张表中。
3、总结
上面的两种方案有他们各自的优点与缺点,能不能结合他们的优点,做出分库分表最好的方案呢?即不需要迁移数据,又能解决数据热点的问题呢?
以上是关于Mycat和分库分表的主要内容,如果未能解决你的问题,请参考以下文章