前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >MyCat 概述与基本概念

MyCat 概述与基本概念

作者头像
程序员波特
发布2024-01-27 12:56:22
1820
发布2024-01-27 12:56:22
举报
文章被收录于专栏:魔法书

什么是 MyCat

MyCat 是什么?从定义和分类来看,它是一个开源的分布式数据库系统,前端的用户可以把它看成一个数据库代理,用 MySql 客户端和命令行工具都可以访问,而其后端则是用MySql 原生的协议与多个 MySql 服务之间进行通信。MyCat 的核心功能是分库分表,即将一个大表水平切分成 N 个小表,然后存放在后端的 MySql 数据当中。

MyCat 发展到目前的版本,已经不是一个单纯的 MySql 代理了,它的后端支持MySql,Oracle,SqlServer,DB2 等主流的数据库,也支持MongoDB 这种 NoSql 数据库。而对于前端的用户来说,无论后端采用哪一种数据库,在 MyCat 里都是一个传统的数据库,支持标准的 SQL语句,对于前端的开发人员来说,可以大大地降低开发难度,提升开发速度。

对于 DBA 来说,可以这样理解 MyCat:

MyCat 就是 MySql,而 MyCat 后面连接的 MySql,可以理解为 MySql 中的存储引擎,比如:MyISAM、InnoDB 等。所以,MyCat 本身不存储数据,数据都是存储在 MyCat 后面连接的 MySql 上,数据的可靠性和事务都是 MySql 保证的。

对于开发人员,可以这样理解 MyCat:

MyCat 就是一个近似等于 MySql 的数据库库服务,你可以使用连接 MySql 的方式连接MyCat。绝大多数情况,你也可以使用常用的 ORM 框架连接 MyCat,但是,对于分片的表,还是建议使用标准 SQL 语句,这样能够达到最佳的性能。

对于架构师来说,可以这样理解 MyCat:

MyCat 是一个强大的数据库中间件,不仅仅可以用作读写分离、分库分表,还可以用于容灾备份,云平台建设等,让你的架构具备很强的适应性和灵活性。

MyCat 的应用场景

MyCat 发展到现在,使用的场景很丰富,常见的典型的应用场景有:

  • 单纯的读写分离,此时配置最为简单,支持读写分离,主从切换;
  • 分库分表,对于超过 1000w 的表进行分片,最大支持 1000 亿的数据;
  • 多租户应用,每个应用一个数据库,应用只连接 MyCat,程序本身不需要 改造;
  • 代替 HBase,分析大数据

MyCat 中的基本概念

MyCat 是一个数据库的中间件,介于应用与数据库之间,是进行数据处理和交互的中间服务。正是由于它是一个数据库代理的中间件,它里边也有很多新的概念,这些概念先给大家介绍一下,大家有个印象,对后面的学习也很有帮助。

逻辑库(Schema)

在实际的开发中,开发人员不需要知道数据库中间件的存在,开发人员只需要有数据库的概念就可以了。所以数据库中间件可以被看做是一个或者多个数据库集群构成的逻辑库。

例如:上图中的例子,我们可以理解为系统先做了垂直切分,被分为了 3 个库,用户库,订单库,商品库,而这 3 个库就被称为逻辑库。

逻辑表(table)

既然有逻辑库,那么就有逻辑表,对于应用系统来说,读写数据的表,就是逻辑表。而逻辑表中的数据,则是被水平切分后,分布在不同的分片库中。如上图所示:假设用户库中有一张用户表,这个用户表就被称为逻辑表,而用户表又被水平切分为 3 个表,每一个表中都存储一部分用户数据。业务系统在进行用户数据的读写时,只需要操作逻辑表就可以了,后面的分片细节则由 MyCat 进行操作,这些对于业务开发人员来说时完全透明的。当然,有些表的数据量没有那么大,完全不需要进行分片,只在一个物理的数据库表中即可。凡是我们做的数据水平切分的表,我们把它叫做分片表。而数据量比较小,没有进行分片的表,我们叫它非分片表。

在真实的业务系统中,往往存在着大量的字典表,这些表的数据基本上很少变动,比如:订单状态。我们查询的时候,往往需要关联字典表去查询,比如:查询订单时,需要把订单状态关联查出,如果订单表做了分片,分布在不同的数据库中,而订单状态表由于数据量小,没有做分片,那么我们查询的时候就要跨库关联查询订单状态,增加了不必要的麻烦,不如我们干脆把订单状态表冗余到所有的订单分片库中,这样关联查询就不需要跨库了。我们把这种通过数据冗余方式复制到所有的分片库中的表,叫做全局表。

分片节点(dataNode)

数据被切分后,一张大表被分到不同的分片数据库上面,每个分片表所在的数据库就叫做分片节点。

节点主机(dataHost)

数据切分后,每一个分片节点不一定都会占用一个真正的物理主机,会存在多个分片节点在同一个物理主机上的情况,这些分片节点所在的主机就叫做节点主机。为了避免单节点并发数的限制,尽量将读写压力高的分片节点放在不同的节点主机上。

分片规则(rule)

一个大表被拆分成多个分片表,就需要一定的规则,按照某种业务逻辑,将数据分到一个确定的分片当中,这个规则就叫做分片规则。数据切分选择合适的分片规则非常重要,这将影响到后的数据处理难度,结合业务,选择合适的分片规则,是对架构师的一个重大考验。对于架构师来说,选择分片规则是一个艰难的,难以抉择的过程。

全局序列号(sequence)

大家有没有想过,数据切分以后,数据库表的中的 id 怎么办?原来在一张表的时候,我们采用 id 自增,但是数据分布到多个库怎么办?比如:向用户表插入数据,第一条记录插入了用户库 1,它的 id 为 1;第二条记录插入了用户库 2,如果是自增,它的 id 也为 1。这样 id 就混乱了,我们也无法确定一条数据的唯一标识了。这时,我们需要借助外部的机制保证数据的唯一标识,这种保证数据唯一标识的机制,我们叫做全局序列号。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-01-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 什么是 MyCat
  • MyCat 的应用场景
  • MyCat 中的基本概念
    • 逻辑库(Schema)
      • 逻辑表(table)
        • 分片节点(dataNode)
          • 节点主机(dataHost)
            • 分片规则(rule)
              • 全局序列号(sequence)
              相关产品与服务
              数据库
              云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
              领券
              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档