数据库中间件 -- MyCat

news2024/12/29 8:17:03

1、什么是数据库中间件  

        数据库中间件(Database Middleware)是一种位于应用程序与数据库管理系统(DBMS)之间的软件层。它的主要目的为应用程序提供更加高效、可靠和透明的数据库访问,同时解决多种数据库管理问题。  The domain name Mycat.io is for sale

 1.1、常见的数据库中间件及其功能

  1. 连接池(Connection Pooling):管理数据库连接的创建、使用和关闭,以提高资源利用率和性能。

    • 例如:HikariCP、Druid。
  2. 分布式数据库中间件:解决数据分片、读写分离、负载均衡等问题,使得应用可以处理更大规模的数据和更高的并发量。

    • 例如:ShardingSphere、MyCAT(今天的主角)。
  3. 缓存中间件:通过缓存热数据,减少对数据库的直接访问,从而提高系统的响应速度。

    • 例如:Redis、Memcached。
  4. 数据同步中间件:实现数据在不同数据库之间的同步和复制,保证数据的一致性和可用性。

    • 例如:Canal、DataX。
  5. 事务管理中间件:提供分布式事务支持,确保在分布式系统中数据操作的一致性。

    • 例如:Seata、Atomikos。
  6. 监控中间件:实时监控数据库性能和运行状态,帮助快速发现和解决问题。

    • 例如:Prometheus、Grafana。

1.2、常见数据库中间件对比

中间件 开发团队 状态/备注 优点 缺点
Cobar 阿里团队 停止维护更新

解决了单点性能瓶颈问题

提供数据分片和高可用性支持

不再维护和更新

功能相对落后

 社区支持少,文档不全

MyCAT 开源社区 基于Cobar二次开发开源社区维护

活跃的开源社区,持续更新

支持数据分片、读写分离、分布式事务  配置灵活

社区驱动,功能和稳定性参差不齐

配置和使用复杂度较高

OneProxy 商业团队 不开源的商业中间件

商业支持,提供专业服务

设计稳定,适用于企业级应用

非开源,成本较高

灵活性相对较低

kingshard 开源社区 用Go语言开发,在不断完善

性能高效,支持并发

社区活跃,持续改进

支持基本的分片和读写分离

功能相对基础,不支持复杂分布式事务

需要更多社区支持

Vitess YouTube YouTube生产环境使用,不支持MySQL原生协议

可靠性和可扩展性高

支持自动分片、分布式事务和故障切换

适用于云原生应用

不支持MySQL原生协议

配置和管理复杂度高

Atlas 360团队 基于mysqlproxy改写,高并发下不稳定 简单易用,适用于中小型应用支持基本读写分离和负载均衡

高并发场景下性能不稳定

功能相对简单,缺乏高级特性

MaxScale MariaDB MaxScale是MariaDB研发的中间件

MariaDB官方开发,兼容性和稳定性高

支持多种功能

插件机制丰富

配置和管理可能复杂商业支持需要额外费用
MySQLRoute Oracle MySQL官方中间件

MySQL官方产品,兼容性和稳定性有保证

企业级支持和服务

功能全面

成本较高

依赖Oracle的技术支持,灵活性较低

1.3、为什么使用MyCat?

1. 解决单机数据库性能瓶颈

在处理大规模数据和高并发访问时,单机数据库可能会遇到性能瓶颈。MyCAT通过数据分片和负载均衡,将数据分布到多个数据库实例中,从而提高系统的并发处理能力和整体性能。

2. 提供数据分片功能

MyCAT支持将数据水平切分到多个数据库中,每个分片只存储部分数据,这样可以大大减小单个数据库的压力。同时,通过自定义分片规则,可以灵活地根据业务需求进行数据分布。

3. 实现读写分离

MyCAT可以将写操作(如INSERT、UPDATE、DELETE)路由到主数据库,将读操作(如SELECT)路由到从数据库。这种读写分离的方式,可以提高读操作的响应速度,并降低主数据库的压力。

4. 提供分布式事务支持

MyCAT支持分布式事务管理,确保在多个数据库实例之间的数据一致性。通过两阶段提交协议(2PC),MyCAT可以在分布式环境中实现事务的原子性和一致性。

5. 支持多租户架构

对于SaaS应用,MyCAT支持多租户架构,可以根据租户ID将数据分片存储到不同的数据库实例中,提供租户级别的隔离和管理。

6. 高可用性和故障恢复

MyCAT支持数据库实例的自动故障切换和恢复,保证系统的高可用性。配合主从复制、双主等架构,MyCAT可以在数据库故障时自动切换到备份节点,减少故障时间。

7. 社区活跃,持续更新

作为一个开源项目,MyCAT有一个活跃的社区支持,持续进行功能更新和优化。用户可以从社区获取帮助和资源,也可以参与到项目的开发和改进中。

使用MyCAT的典型场景

  • 电商平台:需要处理大量订单和商品数据,MyCAT可以通过数据分片和读写分离,提高系统的并发处理能力和响应速度。
  • 金融系统:需要保证数据的一致性和高可用性,MyCAT的分布式事务和故障恢复功能可以满足这些需求。
  • SaaS应用:需要支持多租户架构,MyCAT可以通过数据分片和租户隔离,实现对不同租户数据的高效管理。

简言之:

        ① java与数据库紧耦合
        ② 高访问量高并发对数据库的压力。
        ③ 读写请求数据不一致

1.4、功能介绍 --  能干吗

 1. 读写分离

 2. 数据分片

                垂直拆分(分库)、水平拆分(分表)、垂直+水平拆分(分库分表)

3. 多数据源整合

1.5、怎么实现的? 原理是什么?

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

1. 数据分片(Sharding)

        MyCAT 通过水平分片(Horizontal Partitioning)将数据分布在多个数据库实例上。每个数据库实例存储部分数据,这样可以减轻单个数据库的压力,提升系统的扩展性和性能。

2. 路由(Routing)

        MyCAT 根据预先定义的分片规则将 SQL 请求路由到对应的数据库实例。分片规则可以基于表的某个字段(如用户 ID),也可以是更复杂的自定义规则。

3. 读写分离(Read/Write Splitting)

        MyCAT 支持读写分离,通过配置主从复制(Master-Slave Replication),将写操作发送到主库,读操作发送到从库,从而提高读写性能。

4. 全局事务(Global Transactions)

        为了保证分布式环境中的数据一致性,MyCAT 支持分布式事务管理。它通过两阶段提交协议(Two-Phase Commit Protocol)来确保事务的原子性和一致性。

5. 数据聚合(Data Aggregation)

        对于分片的数据,MyCAT 可以在不同的数据库实例上执行部分查询,然后将结果汇总返回给客户端。这对于复杂的查询操作尤为重要,如聚合函数、排序等。

6. 分布式索引(Distributed Index)

        MyCAT 支持分布式索引,通过在不同的数据库实例上创建索引,提高查询效率。分布式索引可以是全局唯一索引,也可以是局部分片索引。

7. 缓存(Caching)

        为了进一步提升性能,MyCAT 支持缓存机制,将常用查询结果缓存到内存中,减少数据库查询次数。

8. 高可用性(High Availability)

        MyCAT 提供高可用性支持,通过主从复制和自动故障转移(Failover)机制,确保系统在部分数据库实例失效时仍能正常运行。

9. 监控与管理(Monitoring and Management)

        MyCAT 提供丰富的监控和管理工具,帮助管理员实时监控系统状态、性能指标,并进行必要的优化和调整。

示例

假设有一张用户表 users,使用用户 ID 进行分片。分片规则如下:

  • 用户 ID 1-1000 存储在数据库实例 A
  • 用户 ID 1001-2000 存储在数据库实例 B

        当收到查询 SELECT * FROM users WHERE id = 1500 时,MyCAT 根据路由规则将查询请求转发到数据库实例 B,并返回结果给客户端。

        通过这些机制,MyCAT 可以有效地管理和优化分布式数据库系统,提供高性能和高可用性的解决方案。

2、怎么安装和启动?

1、安装

1、官网下载后解压即可使用

2、较为重要的配置文件

①schema.xml:定义逻辑库,表、分片节点等内容
②rule.xml:定义分片规则
③server.xml:定义用户以及系统相关变量,如端口等

2、启动 

1、修改 server.xml配置文件

        修改用户信息,与MySQL区分,如下:

…
<user name="mycat">
 <property name="password">123456</property>
 <property name="schemas">TESTDB</property>
</user>
...

2、修改schema.xml配置文件

        删除<achema>标签间的表信息,<dataNode>标签只留一个,<dataHost>标签只留一个,<writeHost> <readHost>只留一对

<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">
 <schema name="TESTDB" checkSQLschema="false" sqlMaxLimit="100" dataNode="dn1">
 </schema>
 <dataNode name="dn1" dataHost="host1" database="testdb" />
 <dataHost name="host1" maxCon="1000" minCon="10" balance="0"
 writeType="0" dbType="mysql" dbDriver="native" switchType="1" 
slaveThreshold="100">
 <heartbeat>select user()</heartbeat>
 <!-- can have multi write hosts -->
 <writeHost host="hostM1" url="192.168.140.128:3306" user="root"
 password="123123">
 <!-- can have multi read hosts -->
 <readHost host="hostS1" url="192.168.140.127:3306" user="root" 
password="123123" />
 </writeHost>
 </dataHost>
</mycat:schema>

3、验证数据库访问情况

        Mycat 作为数据库中间件要和数据库部署在不同机器上,所以要验证远程访问情况。

mysql -uroot -p123123 -h 192.168.140.128 -P 3306
mysql -uroot -p123123 -h 192.168.140.127 -P 3306
#如远程访问报错,请建对应用户
grant all privileges on *.* to root@'缺少的host' identified by '123123';

4、启动程序

①控制台启动 :去 mycat/bin 目录下执行 ./mycat console
②后台启动 :去 mycat/bin 目录下 ./mycat start
        为了能第一时间看到启动日志,方便定位问题,我们选择①控制台启动。

5、 启动时可能出现报错

        如果操作系统是 CentOS6.8,可能会出现域名解析失败错误,如下图

可以按照以下安装步骤解决:

① 用 vim 修改 /etc/hosts 文件,在 127.0.0.1 后面增加你的机器名

 ② 修改后重新启动网络服务

3、登录

1、登录后台管理窗口

         此登录方式用于管理维护Mycat

mysql -umycat -p123456 -P 9066 -h 192.168.140.128
#常用命令如下:
show database

 

show @@help

 

2、登录数据窗口

         此登录方式用于通过 Mycat 查询数据,我们选择这种方式访问 Mycat

mysql -umycat -p123456 -P 8066 -h 192.168.140.128

3、怎么实现读写分离

        通过 Mycat 和 MySQL 的主从复制配合搭建数据库的读写分离,实现 MySQL 的高可用性。

搭建:一主一从、双主双从两种读写分离模式。

1、搭建一主一从

        一个主机应用于处理所有请求,一台从机负责所有读请求,架构图如下:

 1. 搭建MySQL数据库主从复制

① MySQL 主从复制原理

② 主机配置(host79)

修改配置文件:vim /etc/my.cnf
#主服务器唯一ID
server-id=1
#启用二进制日志
log-bin=mysql-bin
# 设置不要复制的数据库(可设置多个)
binlog-ignore-db=mysql
binlog-ignore-db=information_schema
#设置需要复制的数据库
binlog-do-db=需要复制的主数据库名字
#设置logbin格式
binlog_format=STATEMENT

binlog 日志三种格式

 ③ 从机配置(host80)

修改配置文件:vim /etc/my.cnf
#从服务器唯一ID
server-id=2
#启用中继日志
relay-log=mysql-relay

④ 主机、从机重启 MySQL 服务
⑤ 主机从机都关闭防火墙
⑥ 在主机上建立帐户并授权 slave

#在主机MySQL里执行授权命令
GRANT REPLICATION SLAVE ON *.* TO 'slave'@'%' IDENTIFIED BY '123123';
#查询master的状态
show master status;

#记录下File和Po

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2202575.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

新质生产力在制造业中的“新”主要体现在哪

新质生产力&#xff0c;以其独特的技术创新、模式变革和思维升级&#xff0c;正逐步重塑制造业的面貌&#xff0c;引领其走向更加智能化、绿色化和高效化的未来。 一、技术创新&#xff1a;驱动产业升级的核心引擎 新质生产力在制造业中的首要“新”&#xff0c;体现在技术创新…

Chromium 书签加载过程分析c++

一、书签存储路径: %localappdata%\Chromium\User Data\Default\Bookmarks %localappdata%\Chromium\User Data\Default\Bookmarks.bak 【备份文件】 本机测试存储的Bookmarks文件如下&#xff08;未加密的可以直接打开&#xff09;&#xff1a; {"checksum": &q…

Allegro平台正式进军匈牙利市场,Allegro怎么快速上架产品?

近日&#xff0c;波兰电商平台Allegro正式宣布进军匈牙利市场&#xff0c;此举标志着Allegro在中东欧地区的扩张步伐再次加速。作为一家在波兰本土享有盛誉的电商平台&#xff0c;Allegro此举无疑为匈牙利乃至整个中欧地区的电商市场注入了新的活力。 Allegro此次进军匈牙利市…

比较三组迭代次数的变化

(A,B)---6*30*2---(0,1)(1,0) 让A是结构5&#xff0c;让B全是0。收敛误差为7e-4&#xff0c;收敛199次取迭代次数平均值&#xff0c;得到迭代次数为129535.3 (A,B)---6*30*2&#xff08;5&#xff09;---(0,1)(1,0) 然后让A分别是0&#xff0c;1&#xff0c;2&#xff0c;3&a…

服装生产管理:SpringBoot技术实现

1 绪论 1.1 研究背景 当今时代是飞速发展的信息时代。在各行各业中离不开信息处理&#xff0c;这正是计算机被广泛应用于信息管理系统的环境。计算机的最大好处在于利用它能够进行信息管理。使用计算机进行信息控制&#xff0c;不仅提高了工作效率&#xff0c;而且大大的提高…

通过AI技术克服自动化测试难点(上)

本文我们一起分析一下AI技术如何解决现有的自动化测试工具的不足和我们衍生出来的新的测试需求。 首先我们一起看一下计算机视觉的发展历史&#xff0c;在上世纪70年代&#xff0c;处于技术萌芽期&#xff0c;由字符的识别技术慢慢进行演化&#xff0c;发展到现在&#xff0c;人…

C/S模型的简单实现(UDP服务器)、本地套接字(sockaddr_un )的讲解

目录 1.UDP 1.1 UDP服务器 1.2 TPC和UDP的比较 1.3 C/S模型 -- UDP recvfrom、sendto server client 2.本地套接字 2.1 套接字比较 2.2 函数参数选用 2.3 server 2.4 client 2.5 实现对比 1.UDP 1.1 UDP服务器 UDP 是一种无连接的传输协议&#xff0c;类似于发送…

SpringBoot MyBatis连接数据库设置了encoding=utf-8还是不能用中文来查询

properties的MySQL连接时已经指定了字符编码格式&#xff1a; url: jdbc:mysql://localhost:3306/sky_take_out?useUnicodetrue&characterEncodingutf-8使用MyBatis查询&#xff0c;带有中文参数&#xff0c;查询出的内容为空。 执行的语句为&#xff1a; <select id&…

已经被这几种广告彻底逼疯……还好有救了

这个假期回家团聚&#xff0c;爸妈小心翼翼问我手机越来越难用了&#xff0c;让我帮忙看看是不是中病毒了&#xff0c;了解后才知道原来事情是这样的&#xff1a; 以前开屏广告不小心误触已经让人恼火&#xff0c;现在是手机轻微动一动就会进入广告&#xff0c;打开app最后都不…

quantlab_ai版本v0.1代码发布: 从研报中提取因子并建模(附代码与研报集下载)

原创内容第676篇&#xff0c;专注量化投资、个人成长与财富自由。 今天我们继续开发AI大模型自动读研报。 从研报到模型&#xff0c;大致分成几步&#xff1a; ["propose_hypo_exp", "propose", "exp_gen", "coding", "runnin…

【玩转 JS 函数式编程_010】3.2 JS 函数式编程筑基之:以函数式编程的方式活用函数(上)

写在前面 按照惯例&#xff0c;过长的篇幅分开介绍&#xff0c;本篇为 JavaScript 函数式编程核心基础的第二部分——以函数式编程的方式活用函数的上篇&#xff0c;分别介绍了 JS 函数在排序、回调、Promise 期约、以及连续传递等应用场景下的用法演示。和之前章节相比难度又有…

“Flash闪存”基础 及 “SD NAND Flash”产品的测试

本篇除了对flash闪存进行简单介绍外&#xff0c;另给读者推荐一种我本人也在用的小容量闪存。 自带坏块管理的SD NAND Flash&#xff08;贴片式TF卡&#xff09;&#xff0c;尺寸小巧&#xff0c;简单易用&#xff0c;兼容性强&#xff0c;稳定可靠&#xff0c;标准SDIO接口&a…

【C++】map 和 set

目录 一 基础概念 1 关联式容器 2 键值对 3 树形结构的关联式容器 二 map 1 概念 2 基础操作 3 使用实列 1 实例一 2 实例二 3 实例三 4 实例四 4 multimap 1 实例一 三 set 1 概念 2 基础操作 3 使用实例 1 实例一 2 实例二 3 实例三 4 multiset 1 实…

SpringBoot使用esayExcel根据模板导出excel

1、依赖 <dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>3.1.3</version></dependency> 2、模板 3、实体类 package com.skybird.iot.addons.productionManagement.qualityTesting…

流程图 LogicFlow

流程图 LogicFlow 官方文档&#xff1a;https://site.logic-flow.cn/tutorial/get-started <script setup> import { onMounted, ref } from vue import { forEach, map, has } from lodash-es import LogicFlow, { ElementState, LogicFlowUtil } from logicflow/core …

字符编码发展史6 — BOM字节序标记

上一篇《字符编码发展史5 — UTF-16和UTF-32》我们讲解了UTF-16和UTF-32编码。本篇我们将继续讲解字符编码中的字节序标记(BOM)。 2.3. 第三个阶段 国际化 2.3.2. Unicode的编码方式 2.3.2.5. BOM 1. 什么是BOM&#xff1f; BOM是Byte Order Mark的缩写&#xff0c;翻译成…

研究生异地报名,需要社保缴费记录,没有社保记录怎么办。

1、户籍在安徽省&#xff0c;在北京工作&#xff0c;想报北京科技大学&#xff1b; 招生简章中没有提社保记录&#xff0c;但是在报名的时候&#xff0c;又出来要求&#xff1a;北京连续6个月的社保记录。这里是指在北京市考试的要求。没有连续社保缴费记录&#xff0c;肯定不能…

Python 与 Pycharm 的简易安装教程,包含Pycharm的修改

一. 官方网站 Python网址&#xff1a;python唯一的官方网址。 Pycharm网址&#xff1a;Pycharm的官方网址。 二. python安装步骤 滑动到红色框内 Downloads 导航栏。 红色框是选择适合自己电脑系统和版本的部分&#xff0c;蓝色框是选择系统的部分&#xff0c;黄色框是版本号。…

【大数据】数据分析之Spark框架介绍

文章目录 概述一、发展历程与背景二、核心特点三、生态系统与组件四、应用场景五、与其他大数据技术的比较 核心概念1. 弹性分布式数据集&#xff08;RDD, Resilient Distributed Dataset&#xff09;2. 转换&#xff08;Transformations&#xff09;和动作&#xff08;Actions…

Rust编程的函数

【图书介绍】《Rust编程与项目实战》-CSDN博客 《Rust编程与项目实战》(朱文伟&#xff0c;李建英)【摘要 书评 试读】- 京东图书 (jd.com) Rust编程与项目实战_夏天又到了的博客-CSDN博客 7.1 函 数 定 义 在Rust中&#xff0c;函数使用fn关键字定义&#xff0c;后跟函数…