随着互联网的发展,数据的量级也是呈指数式的增长,从GB到TB到PB。传统的关系型数据库已经无法满足快速查询与插入数据的需求。那么如何使用关系型数据库解决海量存储的问题呢?
此时就需要建立数据库的集群,那么为了提高查询性能,我们可以将一个数据库的数据分散到不同的数据库中存储,或者在集群中对不同数据做读写分离。于是就需要一个工具来接收程序对数据的请求,同时又能对集群数据库进行管理。MyCat 就是这样的一个中间件。
利用MyCat可以轻松实现热备份。当一台数据库服务器故障时,可以由集群中的另一台自动接管业务,从而在无人干预的情况下,保证系统持续对外提供服务。该操作由MyCat自动完成。
但是该特性,其实底层依赖于MySQL的主从数据同步,所以需要先对MySQL做主从复制的设置后才能奏效。
使用 MyCat 可以实现对集群数据库进行读写分离,即部分数据库仅做查询服务,部分数据库仅提供增加、删除、修改的服务。
如下的一主两从数据库集群,由主库提供增加、删除、修改服务,两个从库提供查询服务。数据库的压力一般在查询,因此可通过增加查询的节点来提高性能。
这也是MyCat的一个核心功能。通过指定条件,将存放在同一个数据库中的数据,分散保存在多个数据库中,以达到减轻单台设备负载的目的。
当一个项目需要用到多种数据源时,如 Oracle、MySQL、PostgreSQL、EDB等待,可以使用 MyCat 进行整合,外部应用仅需要访问 MyCat 即可。
在 MyCat 的原理中,使用最频繁的是“拦截”,拦截了应用发过来的SQL语句。
在对SQL语句拦截之后,需要一些特定的分析:
分片分析、路由分析、读写分离分析、缓存分析等。
然后将分析后SQL发到真实的数据库。
在得到数据库的返回结果后,再做适当的处理,如聚合处理、排序处理、分页处理等,最终返回给前端的应用。
整个过程如下:
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。