Mycat

2019-06-11  本文已影响0人  javaBoy_hw

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时如果有分布式事务,得先看是否得保证事务得强一致性。

任意表JOIN

参考资料

上一篇下一篇

猜你喜欢

热点阅读