百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术教程 > 正文

《MyCat数据库的基础配置及使用》

mhr18 2025-02-15 16:33 17 浏览 0 评论


一、为什么需要分布式数据据库

随着计算机和信息技术的迅猛发展,行业应用系统的规模迅速扩大,行业应用所产生的数据量呈爆炸式增长,动辄达到数百TB甚至数百PB的规模,已远远超出传统计算技术和信息系统的处理能力,集中式数据库面对大规模数据处理逐渐表现出其局限性。因此,人们希望寻找一种能快速处理数据和及时响应用户访问的方法,也希望对数据进行集中分析、管理和维护。这已经成为迫切需求。

分布式数据库是在集中式数据库的基础上发展起来的,是计算机技术和网络技术结合的产物。分布式数据库是指数据在物理上分布而在逻辑上集中管理的数据库系统。物理上分布是指数据分布在物理位置不同并由网络连接的节点或站点上;逻辑上集中是指各数据库节点之间的逻辑上是一个整体,并由统一的数据库管理系统管理。不同的节点分布可以跨不同的机房、城市甚至国家。

二、分布式数据库的特点

分布式数据库具有透明性、数据冗余性、易于扩展性、自治性等特点,还具有经济、性能优越、响应速度更快、灵活的体系结构、易于集成现有系统等特点。

分布式数据库尽管有着天生的高贵血统,但它依赖调整网络,对事务的处理远没有传统数据库成熟,在很长一段时间内分布式数据存储将与传统数据存储共存。

三、MyCat数据库中间件简介

MyCat是一个彻底开源的面向企业应用开发的大数据库集群,支持事务、ACID,是可以替代MySQL的加强版数据库。MyCat被视为MySQL集群的企业级数据库,用来替代昂贵的Oracle集群,它是整合了内存缓存技术、NoSQL技术、HDFS大数据的新型SQL Server,是结合了传统数据库和新型分布式数据仓库的新一代企业级数据库产品,也是一个优秀的数据库中间件。

MyCat是通过Cobar改良而生。MyCat支持Oracle、PostgreSQL,从1.3版本开始支持NoSQL(SequoiaDB及MongoDB)并引入了Druid解析器。2016年MyCat发布了1.5版本,2018年发布了 1.6.6版本 。目前MyCat2.0项目已经启动,核心代码已经提交(
https://github.com/MyCatApache/MyCat2.git)。

四、MyCat核心概念详解

4.1 逻辑库(schema)

通常在实际应用中,业务开发人员并不需要知道中间件的存在,只需要关注数据库,所以数据库中间件可以被当作一个或多个数据库集群构成的逻辑库。

4.2 逻辑表(table)

既然有逻辑库,就会有逻辑表。在分布式数据库中,对于应用来说,读写数据的表就是逻辑表。逻辑表可以分布在一个或多个分片库中,也可以不分片。

1)分片表

分片表是指将数据量很大的表切分到多个数据库实例中,所有分片组合起来构成了一张完整的表。例如在MyCat上配置t_node的分片表,数据按照规则被切分到dn1、dn2两个节点。

?

2)非分片表

并非所有的表在数量很大时都需要进行分片。非分片表是相对分片表而言的,不需要进行数据切分的表。如下面配置中的t_node只存在于节点dn1上。

?

3)ER表

关系型数据库是基于实体关系模型(Entity Relationship Model)的,MyCat中的ER表便来源于此。基于此思想,MyCat提出了基于E-R关系的数据分片策略,子表的记录与其所关联的父表的记录存放在同一个数据分片上,即子表依赖于父表,通过表分组(Table Group)保证数据关联查询不会跨库操作。

表分组是解决跨分片数据关联查询的一种很好的思路,也是数据切分的一条重要规则。

4)全局表

在一个真实的业务场景中往往存在大量类似的字典表,这些字典表中的数据变动不频繁,而且数据规模不大,很少有超过数十万条的记录。

当业务表因为规模进行分片后,业务表与这些附属的字典表之间的关联查询就成了比较棘手的问题,所以在MyCat中通过数据冗余来解决这类表的关联查询,即所有分片都复制了一份数据,我们把这些冗余数据的表定义为全局表。

数据冗余是解决跨分片数据关联查询的一种很好的思路,也是数据切分规划的另一条重要规则。

4.3 分片节点(dataNode)

将数据切分后,一个大表被分到不同的分片数据库上,每个表分片所在的数据库是分片节点。

4.4 节点主机(dataHost)

将数据切分后,每个分片节点不一定会独占一台机器,同一台机器上可以有多个分片数据库,这样一个或多个分片节点所在的机器就是节点主机。为了规避单节点主机并发数量的限制,尽量将读写压力高的分片节点均匀地放在不同的节点主机上。

五、MyCat原理介绍

MyCat原理中最重要的一个动词是“拦截”,它拦截了用户发送过来的SQL语句,首先对SQL语句做了一些特定的分析,例如分片分析、路由分析、读写分离分析、缓存分析等,然后将此SQL语句发往后端的真实数据库,并将返回的结果做适当的处理,最终再返回给用户。

MyCat收到一条SQL语句时,首先解析SQL语句涉及的表,接着查看此表的定义,如果该表存在分片规则,则获取SQL语句里分片字段的值,并匹配分片函数,得到该SQL语句对应的分片列表,然后将SQL语句发送到相应的分片去执行,最后处理所有分片返回的数据并返回给客户端。

六、MyCat配置

schema.xml是MyCat的重要配置文件,它管理着逻辑库、分片表、分片节点和分片主机等信息。

service.xml是系统参数的配置文件,掌握MyCat优化方法,必须熟悉该文件的配置项。

sequence是全局序列的配置文件。

6.1 server.xml配置文件

server.xml配置文件包含了MyCat的系统配置信息,对应的源码是SystemConfig.java。它有两个重要的标签,分别是user、system。掌握system标签的各项配置属性是MyCat调优的关键。

????0???1??0???0???2??false???????????????0??????????????????0????1????64k????1k??0????384m????false????????????false??true??????????????????????123456??TESTDB??????????user??TESTDB??true?????

6.2 schema.xml配置文件

schema.xml 作为MyCat中重要的配置文件之一,涵盖了MyCat的逻辑库、表、分片规则、分片节点及数据源。

1)schema 标签

?

schema标签用于定义MyCat实例中的逻辑库。MyCat可以有多个逻辑库,每个逻辑库都有自己的相关配置。可以使用schema标签来划分不同的逻辑库,如果有配置schema标签,则所有的表配置都会属于同一个默认的逻辑库。

???????????

如上所示配置了两个不同的逻辑库,逻辑库的概念等同于MySQL数据库中的Database概念,我们在查询逻辑库中的表时,需要切换到该逻辑库下才可以查询其中的表。

checkSQLschema属性,当把该值设置为true时,如果我们执行语句 select * from TESTDB.travelrecord;,则MyCat会把schema字符去掉,把SQL语句修改为select * from travelrecord;可避免发送到后端数据库执行时报错。

SqlMaxLimit属性,当该属性设置为某个值时,每次执行的SQL语句如果没有加上limit语句,MyCat也会自动在limit语句后加上对应的值。如果不设置该值,则MyCat会把查询到的信息全部返回。

2)table 标签

?

table标签定义了MyCat中的逻辑表,所有需要拆分的的表都需要在table标签中定义。

table标签的主要属性见下表,具体介绍参见MyCat官方网站 http://www.MyCat.io 。

属性名值数量限制
nameString1dataNodeString1..*
ruleString0..1ruleRequiredboolean0..1primaryKeyString1typeString0..1autoIncrementboolean0..1subTablesString1needAddLimitBoolean0..1

3)childTable 标签

childTable标签用于定义 E-R 分片的子表,通过标签上的属性与父表进行关联。

4)dataNode标签

dataNode标签定义了MyCat中的数据节点,也就是我们通常所说的数据分片。一个dataNode标签就是一个独立的数据分片。

5)dataHost标签

dataHost标签在MyCat逻辑库中作为底层标签存在,直接定义了具体的数据库实例,读写分离和心跳语句。

Heartbeat标签用来配置心跳检查语句,Mysql可以使用select user(),Oracle可以使用select 1 from dual 等。

writeHost和readHost是读写的配置,一个dataHost内可以配置多个读和写。但如果writeHost指定的后端数据库宕机,那么这个writeHost绑定的所有readHost也将不可用;另一方面,MyCat会自动检测到writeHost宕机,并切换到备用的writeHost上。

七、MyCat分片

在MyCat中将表分为两种大的概念:数据量小且不需要做数据切分的表,称为非分片表;数据量大到单库性能、容量不足以支撑,数据需要通过水平切分均匀分布到不同的数据库中的表,称为分片表。而中间件最终需要处理的事情是对数据切分、聚合。

7.1 ER关系分片表

ER模型是实体关系模型,广泛采用概念模型设计方法,基本元素是实体、关系和属性。MyCat将它引入数据切分规则中,使得有互相依赖的表能够按照某一规则切分到相同的节点上,避免跨库Join关联查询。具体详情配置内容在这里不做描述请参考官方文档。

八、功能与优势

8.1 常用命令

  • MyCat提供类似数据管理监控方式,可以通过MySQL命令行登录管理端口(9066)执行相应的SQL语句进行管理,也可以通过JDBC方式进行远程连接管理。
  • Reload @@config命令用于更新配置文件运行该命令,不用重启即可进行配置文件更新。
  • Reload @@sqlstat用来关闭和开启SQL监控分析。
  • Show @@database命令用来显示MyCat数据库列表,运行结果对应schema.xml配置文件的schema子节点。
  • Show @@datanode用来显示MyCat数据节点,运行结果对应schema.xml配置文件的dataNode节点。
  • Show @@heartbeat用于报告心跳状态。
  • Show @@connection用来获取MyCat的前端连接状态。
  • Kill @@connection id,id,id 用来关闭连接。
  • Show @@ cache用来查看缓存。
  • Show @@datasource 用来查看数据源状态,如果配置了主从或多主,则可以切换。
  • Switch @@ datasource name:index 用于切换数据源。
  • Show @@syslog limit 用于显示系统日志。
  • Show @@sql 显示在MyCat中执行过的语句。
  • Show @@shl.show 显示慢SQL语句。
  • Show @@sql.sum 显示SQL语句的整体执行情况、读写比例等。

8.2 局限性

delete操作不支持没有主键的表。没有主键的表在不同节点的顺序不同,如果执行 select ...limit...,则将出现不同的结果集。

不支持XA事务,在提交上可能回滚。

由于集群是乐观的并发控件,事务commit可能在该阶段中止,所以如果有两个事务向集群中的不同节点的同一行写入并提交,则失败的节点将中止。对于集群级别的中止,集群返回死锁错误。

整个集群的写入吞吐量由最弱的节点限制,如果有一个节点变得缓慢,那么整个集群将变得缓慢。

集群内部按照id自增长机制写入数据,比如集群中有三台可能是3,6,9这样的递增。

8.3 与Sharding-JDBC对比Sharding-JDBC

MyCat是一个中间件的第三方应用,sharding-jdbc是一个jar包。因为MyCat是单独部署,所以使用MyCat就像是访问数据库一样,而sharding-jdbc的逻辑都是需要在工程里写的。

如果只是单独应用可以使用轻量级的Sharding-JDBC,如果多个服务都需要操作数据库则使用MyCat更合适。因为用Sharding-JDBC需要在每一个工程里边都配置上相应的分片等逻辑,而MyCat只需要配置一份单独部署。

文末福利:为了让学习变得轻松、高效,今天给大家免费分享一套阿里架构师传授的一套教学资源。帮助大家在成为架构师的道路上披荆斩棘。

这套视频课程详细讲解了(Spring,MyBatis,Netty源码分析,高并发、高性能、分布式、微服务架构的原理,JVM性能优化、分布式架构)等这些成为架构师必备的内容!

而且还把框架需要用到的各种程序进行了打包,根据基础视频可以让你轻松搭建分布式框架环境,像在企业生产环境一样进行学习和实践。

领取方式:关注作者,私信关键词 (资料)即可!


领取方式:关注作者,私信关键词 (资料)即可!


领取方式:关注作者,私信关键词 (资料)即可!

相关推荐

甲骨文签署多项大型云协议,其一未来可贡献超300亿美元年收入

IT之家7月1日消息,根据甲骨文Oracle当地时间6月30日向美国证券交易委员会(SEC)递交的FORM8-K文件,该企业在始于2025年6月1日的202...

甲骨文获TEMU巨额合同,后者大部分基础设施将迁移至Oracle云

IT之家6月23日消息,Oracle甲骨文创始人、董事长兼首席技术官LarryEllison(拉里埃里森)在本月早些时候的2025财年第四财季和全财年财报电话会议上表示,Oracle...

Spring Boot 自定义数据源设置,这些坑你踩过吗?

你在使用SpringBoot进行后端开发的过程中,是不是也遇到过这样的问题:项目上线后,数据库连接总是不稳定,偶尔还会出现数据读取缓慢的情况,严重影响了用户体验。经过排查,发现很大一部分原因竟然...

一个开箱即用的代码生成器(一个开箱即用的代码生成器是什么)

今天给大家推荐一个好用的代码生成器,名为renren-generator,该项目附带前端页面,可以很方便的选择我们所需要生成代码的表。首先我们通过git工具克隆下来代码(地址见文末),导入idea。...

低代码建模平台-数据挖掘平台(低代码平台的实现方式)

现在来看一下数据连接。·这里是管理数据连接的空间,点击这里可以新增一个数据连接。·输入连接名称,然后输入url,是通过gdbc的方式去连接的数据库,目前是支持mysql、oracle以及国产数据库达梦...

navicat 17.2.7连接oracle数据库提示加载oracle库失败

系统:macOS15.5navicat版本:navicatpremiumlite17.2.7连接oracle测试报错:加载oracle库失败【解决办法】:放达里面找到程序,显示简介里面勾选“使...

开源“Windows”ReactOS更新:支持全屏应用

IT之家6月17日消息,ReactOS团队昨日(6月16日)在X平台发布系列推文,公布了该系统的最新进展,包括升级Explorer组件,支持全屏应用,从Wine项目引入了...

SSL 推出采用全模拟内置混音技术的模拟调音台Oracle

英国调音台传奇品牌SolidStateLogic宣布推出Oracle——一款采用全模拟内置混音技术的调音台,在紧凑的AWS尺寸机箱内集成了大型调音台的功能。该调音台提供24输入和...

47道网络工程师常见面试题,看看有没有你不会的!

你们好,我的网工朋友。网络工程师面试的时候,都会被问到什么?这个问题其实很泛,一般来说,你肯定要先看明白岗位需求写的是什么。基本上都是围绕公司需要的业务去问的。但不可否认的是,那些最基础的概念,多少也...

汉得信息:发布EBS系统安装启用JWS的高效解决方案

e公司讯,从汉得信息获悉,近日,微软官方宣布InternetExplorer桌面应用程序将于2022年6月15日正式停用。目前大部分客户都是使用IE浏览器打开EBS的Form界面,IE停用后,只能使...

36.9K star ! 推荐一个酷炫低代码开发平台!功能太强!

前言最近在逛github,看看能不能搜罗到一些对自己有帮助的开源软件。不经意间看到一个高star的java开源项目:jeecg-boot。进入在线演示版一看,感叹实在是太牛了!此开源项目不管是给来学习...

Linux新手入门系列:Linux下jdk安装配置

本系列文章是把作者刚接触和学习Linux时候的实操记录分享出来,内容主要包括Linux入门的一些理论概念知识、Web程序、mysql数据库的简单安装部署,希望能够帮到一些初学者,少走一些弯路。注意:L...

手把手教你在嵌入式设备中使用SQLite3

摘要:数据库是用来存储和管理数据的专用软件,使得管理数据更加安全,方便和高效。数据库对数据的管理的基本单位是表(table),在嵌入式linux中有时候它也需要用到数据库,听起来好难,其实就是几个函数...

JAVA语言基础(java语言基础知识)

一、计算机的基本概念什么是计算机?计算机(Computer)全称:电子计算机,俗称电脑。是一种能够按照程序运行、自动高速处理海量数据的现代化智能电子设备。由硬件和软件组成、没有安装过任何软件的计算机称...

再见 Navicat!一款开源的 Web 数据库管理工具!

大家好,我是Java陈序员。在日常的开发工作中,常常需要与各种数据库打交道。而为了提高工作效率,常常会使用一些可视化工具进行操作数据库。今天,给大家介绍一款开源的数据库管理工具,无需下载安装软件,基...

取消回复欢迎 发表评论: