MyCat02——解决数据库海量存储与快速查询

2023-11-20 20:24:59 浏览数 (3)

1 什么是 MyCat

随着互联网的发展,数据的量级也是呈指数式的增长,从GB到TB到PB。传统的关系型数据库已经无法满足快速查询与插入数据的需求。那么如何使用关系型数据库解决海量存储的问题呢?

此时就需要建立数据库的集群,那么为了提高查询性能,我们可以将一个数据库的数据分散到不同的数据库中存储,或者在集群中对不同数据做读写分离。于是就需要一个工具来接收程序对数据的请求,同时又能对集群数据库进行管理。MyCat 就是这样的一个中间件。

2 应用场景

2.1 高可用性

利用MyCat可以轻松实现热备份。当一台数据库服务器故障时,可以由集群中的另一台自动接管业务,从而在无人干预的情况下,保证系统持续对外提供服务。该操作由MyCat自动完成。

但是该特性,其实底层依赖于MySQL的主从数据同步,所以需要先对MySQL做主从复制的设置后才能奏效。

2.2 读写分离

使用 MyCat 可以实现对集群数据库进行读写分离,即部分数据库仅做查询服务,部分数据库仅提供增加、删除、修改的服务。

如下的一主两从数据库集群,由主库提供增加、删除、修改服务,两个从库提供查询服务。数据库的压力一般在查询,因此可通过增加查询的节点来提高性能。

2.3 数据切分

这也是MyCat的一个核心功能。通过指定条件,将存放在同一个数据库中的数据,分散保存在多个数据库中,以达到减轻单台设备负载的目的。

  • 垂直切分:按照不同的表,将数据切分到不同的数据库中。
  • 水平切分:根据表中数据的逻辑关系,将同一个表中的数据按照某种条件,拆分到多个数据库中。

2.4 整合多种数据源

当一个项目需要用到多种数据源时,如 Oracle、MySQL、PostgreSQL、EDB等待,可以使用 MyCat 进行整合,外部应用仅需要访问 MyCat 即可。

3 原理

在 MyCat 的原理中,使用最频繁的是“拦截”,拦截了应用发过来的SQL语句。

在对SQL语句拦截之后,需要一些特定的分析:

分片分析、路由分析、读写分离分析、缓存分析等。

然后将分析后SQL发到真实的数据库。

在得到数据库的返回结果后,再做适当的处理,如聚合处理、排序处理、分页处理等,最终返回给前端的应用。

整个过程如下:

  • 解析SQL语句涉及的数据表;
  • 查看表的定义,如果该表涉及分片规则,则获取SQL语句的分片字段;
  • 将SQL语句发送到相应的分片节点去执行;
  • 处理所有分片返回的数据并返回给请求方。

我正在参与2023腾讯技术创作特训营第三期有奖征文,组队打卡瓜分大奖!

0 人点赞