掌握6大模块、7个核心概念~ 帮你彻底掌握Mycat中间件

Mycat是一款开源数据库中间件,用于解决分布式数据库的复杂性,支持读写分离、分库分表等功能。本文介绍了Mycat的架构,包括通信协议、SQL执行、路由解析、数据库连接、结果集处理和监控管理6个模块,以及其核心概念:用户、逻辑库、逻辑表、数据节点、数据主机集群、分片规则和分片函数。通过Mycat,开发者可以更方便地操作分布式数据库,降低应用程序的复杂性。
摘要由CSDN通过智能技术生成

更多儒猿专栏~ 欢迎关注儒猿技术窝

开篇 

近今年里随着经济的飞速发展,企业的业务也在不断膨胀,作为业务支撑的信息系统特别是数据库系统也面临前所未有的压力,行业应用所产生的数据呈爆炸式地增长。数据从原来的GB级别迅速增常到TB甚至是PB的规模,已经远远超过传统计算技术的要求,原来集中式的存储方式已经无法满足数据存储的要求,此时分布式数据存储由于良好的透明性、数据冗余性、扩展性、自治性逐渐进入人们的视野。为了更好的使用和管理分布式数据库,业内推出了不少优秀的分布式数据库中间件,Mycat就是其中之一,今天就来看看Mycat的架构和实现原理。本篇文章会学到以下内容:

  • 分布式数据存储与Mycat

  • Mycat架构介绍

  • Mycat核心概念及配置

 分布式数据存储与Mycat  

众所周知,在分布式数据库的使用场景下,数据的存储不像集中式数据库那样都存放在一台服务器的一个数据库中,而是会分布在不同的服务器的不同数据库中。而应用程序的会根据不同的数据库进行访问,如图1 所示,应用程序需要根据访问的数据库不同:数据库1、数据库2、数据库3使用不同的数据库连接,如果说某张数据表在三个数据库中都存在,也需要使用特定的方式对其进行访问,可以说在应用程序这端访问起来是比较麻烦的。

图1

分布式的数据库队增加了应用程序访问的复杂度

正因为应用程序在访问分布式数据库的时候会遇到类似的问题,所以引入了数据库中间件来简化应用程序需要面对的问题。如图2所示,在应用程序和数据库中间引入Mycat数据库中间件以后,让应用程序的编程更加方便,它不用在面对分布式的数据库,而只用针对Mycat中间件进行数据库编程就能完成对应的数据操作,并且适用于以下几种场景:

  • 读写分离:可以通过Mycat针对数据库1进行写操作,而对数据库2和3进行读操作。如果在写服务器出现宕机的情况,Mycat可以将写的请求暂时转移到其他的数据库服务器上,保证数据库的可用性。

  • 垂直分表分库:将订单表存放到数据库1和2中,将商品表存放到数据库3中。也就是把不同的表放在不同的库中。

  • 水平分表分库:将订单表的不同记录通过分片算法(例如:hash取模)分表存放到数据库1和2中。也就是将相同表的不同数据放到不同库的表中。

  • 访问不同的数据库:数据库1和2对应访问的就是MySQL数据库,而数据库3访问的是Oracle数据库。

  • 控制应用程序到数据库的连接数量:每一个数据库连接都会占用数据库服务器的资源,每个数据库服务器能够连接的请求也是有限的,这里Mycat可以控制前端应用请求数据库服务器的连接数量,保证数据库服务器的高可用。

换句话说,当应用程序发起一条SQL语句的时候,不用关心数据库存放在哪个服务器,以及数据库表是否做了分表分库,只用将要查的数据告诉Mycat就可以了,Mycat在考虑上述场景之后将结果返回给应用程序,让开发者更加方便快捷地操作数据。

图2 

引入Mycat协助应用程序实现读写分离、分表分库操作

上面描述的这些数据操作如果在没有Mycat中间件的情况需要在应用程序端维护大量的代码,而有了Mycat之后应用程序只需要针对Mycat进行配置,并且对其变成就能完成这些操作。

Mycat是一个开源的面相企业应用开发的数据库中间件,支持大数据库集群、事物、ACID。适用于高可用性、数据库读写分离、数据分级存储保障、大型数据库的分表分库以及并行计算、数据库路由以及整合诸如MySQL、Oracle、SQL Server 等数据库。由于Mycat开源中间件有一个发展的过程,每个版本的迭代都会遇到一些问题,目前已

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值