Mycat
Mycat -- 分布式数据库系统神器
Mycat 官网
Mycat-Server GitHub项目
简介
官网介绍:Mycat数据库分库分表中间件,活跃的、性能好的开源数据库中间件!我们致力于开发高性能的开源中间件而努力!
MyCat是一个开源的分布式数据库系统,一个良好的数据库中间件。前端用户可以把它看作是一个数据库代理。
Mycat作为一个中间件,应用程序直接访问它,不用 再去管真实的数据库,所以称为中间件。可以用来替代昂贵的Oracle集群。
最大支持1000亿的单表分片多租户应用。
特性
分表分库(核心功能)
将一个大表水平分割为N个小表,存储在后端MySQL服务器里或者其他数据库里。
** 数据库分片指 **:通过某种特定的条件,将我们存放在一个数据库中的数据分散存放在不同的多个数据库(主机)中,这样来达到分散单台设备的负载。MyCAT通过定义表的分片规则来实现分片,每个表格可以捆绑一个分片规则,每个分片规则指定一个分片字段并绑定一个函数,来实现动态分片算法 。
1.Schema:逻辑库,与MySQL中的Database(数据库)对应,一个逻辑库中定义了所包括的Table。 2.Table:逻辑表,即物理数据库中存储的某一张表,与传统数据库不同,这里的表格需要声明其所存储的逻辑数据节点DataNode。在此可以指定表的分片规则。 3.DataNode:MyCAT的逻辑数据节点,是存放table的具体物理节点,也称之为分片节点,通过DataSource来关联到后端某个具体数据库上 4.DataSource:定义某个物理库的访问地址,用于捆绑到Datanode上5、分片规则:前面讲了数据切分,一个大表被分成若干个分片表,就需要一定的规则,这样按照某种业务规则把数据分到某个分片的规则就是分片规则,数据切分选择合适的分片规则非常重要,将极大的避免后续数据处理的难度。
拦截
它拦截了用户发送过来的SQL语句,首先对SQL语句做了一些特定的分析:如分片分析、路由分析、读写分离分析、缓存分析等,然后将此SQL发往后端的真实数据库,并将返回的结果做适当的处理,最终再返回给用户。
缺点
非分片字段查询
会将查询分发到所有分片数据库,极大消耗Mycat和MySQL数据库资源。
分页排序
设计使用Mycat时如果要进行表JOIN操作,要确保两个表的关联字段具有相同的数据分布,否则查不出结果。
分布式事务
Mycat并没有根据二阶段提交协议实现 XA事务,而是只保证 prepare 阶段数据一致性的 弱XA事务。使用Mycat时如果有分布式事务,得先看是否得保证事务得强一致性。