Skip to content

[简介]软件介绍

lightfish edited this page Dec 9, 2020 · 5 revisions

分布式数据库中间件Mycat2

软件介绍

Mycat2是Mycat社区开发的一款分布式关系型数据库(中间件)。它支持分布式SQL查询,兼容MySQL通信协议,以Java生态支持多种后端数据库,通过数据分片提高数据查询处理能力。

产品特点

1.代码开源

学习中间件技术,数据库技术,代码是必须有的。

2.兼容MySQL语法的分布式查询引擎

  • 兼容MySQL语法。
  • 兼容MySQL值类型。
  • 使用基于规则优化与代价的优化器。
  • 独立的物理执行引擎。

3.自定义功能算法开发

  • 分片算法,序列号算法,负载均衡算法等都可自定义加载。
  • 查询引擎可脱离网络框架运行。

4.自定义处理过程

自研DSL操纵物理查询计划。

支持SQL转发,缓存结果集。

面向DBA/运维的产品功能

实例操作

  • 区分不可更新配置/可热更新配置
  • 数据库/逻辑表动态创建,重建,删除语句来更改配置
  • 支持文件配置,中间件管理配置
  • 一定程度上兼容常见的建表,删除表的DDL语句,支持分片表建表语句
  • 支持全局表,普通表,分片表,不支持ER表,把ER表配置成分片表即可,优化器会分析表之间的表关系
  • 不支持强一致分布式事务
  • 暂时没有数据迁移/扩容组件(待整合)

数据管理

配置上自定义规则允许任意分库,分表,分库分表

读写分离

监控管理

Grafana 监控模板以及监控端

面向开发的产品功能

分布式查询引擎

  • SQL参数化并支持简单的查询计划缓存

  • EXPLAIN输出查询计划

  • 基于规则的优化下推逻辑算子

  • 基于代价的优化选择物理算子

  • 支持UDF并兼容多数MySQL中的SQL函数

  • 兼容MySQL的类型转换系统

  • 支持多语句

  • 不支持不能消除关联的关联子查询

  • 平台兼容性问题,如Java与C之间有难以工程兼顾的问题,比如少数MySQL函数不支持

  • 不支持CEP

  • 自动加载MySQL系统表免配置

  • 支持自定义数据操作的自定义表

简单SQL引擎(用于insert,delete,update)

  • 支持参数化的批量插入
  • 支持全局序列号

计算执行引擎

  • 基于代码生成执行的表达式运行时

  • 基于解释器模型的表达式运行时(待开发)

  • 实现对应查询引擎的MySQL中的SQL函数

  • 并行拉取数据源

  • 纯JDBC模式完整支持多语句,Proxy能自动检测多语句冲突报错

MySQL协议网络层

  • 仅支持mysql_native_password 原生网络协议
  • 后端支持jdbc或者mysql_native_password 原生网络协议
  • Proxy模式可任意透传响应文本结果集并响应多语句
  • 不支持加密协议
  • 不支持压缩协议
  • 不支持透传预处理语句(涉及预处理句柄管理待完善或者说意义不大)

事务框架

  • 支持单个本地事务和多个本地事务
  • 支持基于Proxy的事务
  • 理论上基于JDBC的事务框架的多线程事务框架容易支持
  • JTA方案的分布式事务方案由于性能太差被移除
  • 没有准备支持分布式事务,请通过架构层面解决这个问题

高可用与集群

  • 基于轮训心跳的集群管理
  • 集群管理可被禁用
  • 策略模式的心跳类
Clone this wiki locally