百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 热门文章 > 正文

Apache Shardingsphere vs. Mycat2

bigegpt 2025-01-31 11:58 9 浏览

背景

用户有个普遍认识,分库分表配置繁琐,而且需要大量文档来描述配置,本文将介绍一下关系型数据库分布式解决方案Shardingsphere 与Mycat2。


Apache ShardingSphere

介绍

Apache ShardingSphere 是一套开源的分布式数据库解决方案组成的生态圈,Apache ShardingSphere 产品定位为 Database Plus,旨在构建异构数据库上层的标准和生态。 它关注如何充分合理地利用数据库的计算和存储能力,而并非实现一个全新的数据库。ShardingSphere 站在数据库的上层视角,关注他们之间的协作多于数据库自身。Apache ShardingSphere 由 JDBC、Proxy 和 Sidecar(规划中)这 3 款既能够独立部署,又支持混合部署配合使用的产品组成。 它们均提供标准化的基于数据库作为存储节点的增量功能,可适用于如 Java 同构、异构语言、云原生等各种多样化的应用场景。ShardingSphere 已于2020年4月16日成为 Apache 软件基金会的顶级项目

特点

  • 连接:通过对数据库协议、SQL 方言以及数据库存储的灵活适配,快速的连接应用与多模式的异构数据库;
  • 增量:获取数据库的访问流量,并提供流量重定向(数据分片、读写分离、影子库)、流量变形(数据加密、数据脱敏)、流量鉴权(安全、审计、权限)、流量治理(熔断、限流)以及流量分析(服务质量分析、可观察性)等透明化增量功能;
  • 可插拔:项目采用微内核 + 三层可插拔模型,使内核、功能组件以及生态对接完全能够灵活的方式进行插拔式扩展,开发者能够像使用积木一样定制属于自己的独特系统。

架构

Apache ShardingSphere 由 JDBC、Proxy 和 Sidecar(规划中)这 3 款既能够独立部署,又支持混合部署配合使用的产品组成。 它们均提供标准化的基于数据库作为存储节点的增量功能,可适用于如 Java 同构、异构语言、云原生等各种多样化的应用场景。


独立部署

ShardingSphere-JDBC:定位为轻量级 Java 框架,在 Java 的 JDBC 层提供的额外服务。 它使用客户端直连数据库,以 jar 包形式提供服务,无需额外部署和依赖,可理解为增强版的 JDBC 驱动,完全兼容 JDBC 和各种 ORM 框架。

  • 适用于任何基于 JDBC 的 ORM 框架,如:JPA, Hibernate, Mybatis, Spring JDBC Template 或直接使用 JDBC;
  • 支持任何第三方的数据库连接池,如:DBCP, C3P0, BoneCP, HikariCP 等;
  • 支持任意实现 JDBC 规范的数据库,目前支持 MySQL,PostgreSQL,Oracle,SQLServer 以及任何可使用 JDBC 访问的数据库。

ShardingSphere-Proxy:定位为透明化的数据库代理端,提供封装了数据库二进制协议的服务端版本,用于完成对异构语言的支持。 目前提供 MySQL 和 PostgreSQL(兼容 openGauss 等基于 PostgreSQL 的数据库)版本,它可以使用任何兼容 MySQL/PostgreSQL 协议的访问客户端(如:MySQL Command Client, MySQL Workbench, Navicat 等)操作数据,对 DBA 更加友好。

  • 向应用程序完全透明,可直接当做 MySQL/PostgreSQL 使用;
  • 适用于任何兼容 MySQL/PostgreSQL 协议的客户端。

ShardingSphere-Sidecar(TODO):定位为 Kubernetes 的云原生数据库代理,以 Sidecar 的形式代理所有对数据库的访问。 通过无中心、零侵入的方案提供与数据库交互的啮合层,即 Database Mesh,又可称数据库网格。

Database Mesh 的关注重点在于如何将分布式的数据访问应用与数据库有机串联起来,它更加关注的是交互,是将杂乱无章的应用与数据库之间的交互进行有效地梳理。 使用 Database Mesh,访问数据库的应用和数据库终将形成一个巨大的网格体系,应用和数据库只需在网格体系中对号入座即可,它们都是被啮合层所治理的对象。



ShardingSphere-JDBC

ShardingSphere-Proxy

ShardingSphere-Sidecar(TODO)

数据库

任意

MySQL/PostgreSQL

MySQL/PostgreSQL

连接消耗数

异构语言

仅 Java

任意

任意

性能

损耗低

损耗略高

损耗低

无中心化

静态入口

混合架构

ShardingSphere-JDBC 采用无中心化架构,与应用程序共享资源,适用于 Java 开发的高性能的轻量级 OLTP 应用; ShardingSphere-Proxy 提供静态入口以及异构语言的支持,独立于应用程序部署,适用于 OLAP 应用以及对分片数据库进行管理和运维的场景。Apache ShardingSphere 是多接入端共同组成的生态圈。 通过混合使用 ShardingSphere-JDBC 和 ShardingSphere-Proxy,并采用同一注册中心统一配置分片策略,能够灵活的搭建适用于各种场景的应用系统,使得架构师更加自由地调整适合于当前业务的最佳系统架构。



MyCAT 2

介绍

Mycat2是Mycat社区开发的一款分布式关系型数据库(中间件),是一个实现了MySQL协议的服务器,用于搭建 MySQL 数据库的分布式集群,实现分库分表功能,解决数据库中海量数据存储和查询性能的问题,前端用户可以把它看作是一个数据库代理,用MySQL客户端工具和命令行访问,而其后端可以用MySQL原生协议与多个MySQL服务器通信,也可以用JDBC协议与大多数主流数据库服务器通信,。它支持分布式SQL查询,以Java生态支持多种后端数据库,通过数据分片提高数据查询处理能力。


特点

  • 代码开源:学习中间件技术,数据库技术,代码是必须有的。
  • 兼容MySQL语法的分布式查询引擎:兼容MySQL语法,兼容MySQL值类型,使用基于规则优化与代价的优化器。独立的物理执行引擎。
  • 自定义功能算法开发:分片算法,序列号算法,负载均衡算法等都可自定义加载。查询引擎可脱离网络框架运行。
  • 自定义处理过程:自研DSL操纵物理查询计划。支持SQL转发,缓存结果集。
  • 优化查询计划:定制Calcite分布式查询引擎、编译SQL到关系代数表达式、规则优化引擎和代价优化引擎、生成物理执行计划、支持逻辑视图
  • SQL支持语法:任意跨库跨表join查询、支持跨库跨表非关联子查询、支持跨库跨表关联子查询、支持跨库跨表Window语法、支持全局二级索引、有限支持存储过程、支持可视化配置
  • 高性能:支持并行拉取结果集、支持自动调动后端结果集、支持多种路由注释、优化器注释
  • 支持定制任意多字段路由:提供分片算法接口、优化器简化过滤条件、分片信息与关系表达式结合生成执行sql
  • 支持原生协议:前端协议MySQL网络通信协议、MySQL原生网络协议异步非阻塞、JDBC接口支持多种数据库、生成物理执行计划

应用场景

理论上Mycat2与单机数据库差别不大,但是由于其涉及多个存储节点以及定位是事务型数据库,并不是所有应用场景都会特显优势,以下是常见的用法。

  • 任意数据源合拼的分布式查询
  • 管理多数据库实例,比如管理全国城市数据库
  • 点查/范围查询分片数据,业务访问呈现点查/范围规律而且可以根据分片键分散访问压力
  • 二阶段聚合汇总,比如统计求和,MySQL计算一部分和值,Mycat再对结果汇总
  • 二阶段数据源汇总,比如利用子查询查询物理库数据,而Mycat再对结果汇总
  • 单表访问读写分离
  • 多租户场景

不适合场景

  • 无分片条件的SQL
  • join多于3个表,不区分分片表,单表,全局表

Mycat2与1.6区别

功能

1.6

2

多语句

不支持

支持

blob值

支持一部分

支持

全局二级索引

不支持

支持

任意跨库join(包含复杂查询)

catlet支持

支持

关联子查询

不支持

支持一部分

分库同时分表

不支持

支持

存储过程

支持固定形式的

支持更多

支持逻辑视图

不支持

支持

支持物理视图

支持

支持

批量插入

不支持

支持

执行计划管理

不支持

支持

路由注释

支持

支持

集群功能

支持

支持更多集群类型

自动hash分片算法

不支持

支持

支持第三方监控

支持mycat-web

支持普罗米斯,kafka日志等监控

流式合拼结果集

支持

支持

范围查询

支持

支持

单表映射物理表

不支持

支持

XA事务

弱XA

支持,事务自动恢复

支持MySQL8

需要更改mysql8的服务器配置支持

支持

虚拟表

不支持

支持

joinClustering

不支持

支持

union all语法

不支持

支持

BKAJoin

不支持

支持

优化器注释

不支持

支持

ER表

支持

支持

全局序列号

支持

支持

保存点

不支持

支持


架构

计算节点(Mycat)和存储节点(MySQL)组合架构,一般来说,Mycat2使用数据库(接收sql的服务器)作为存储节点进行读写,当然未来也支持直接以自定义接口读写数据。特别地,暂时Mycat2没有实现系统表,所以查询系统表的sql需要转发到特殊的节点处理后返回到客户端。

  • 网络层:NIO Netty Vertx
  • 数据库与其客户端:开源数据库通信协议MySQL,闭源数据库与其客户端JDBC
  • 单机执行器与分布式执行器:火山模型,Push模型
  • 查询优化器:Apache Calcite,
  • 查询编译器: Apache Calcite,Mycat 1.6
  • 执行器:Ling4j,RxJava


应用架构


总结


Mycat2

Sharding-JDBC

Sharding-Proxy

Sharding-Sidecar

开发语言

Java

Java

Java

Java

开源协议

GPL-2.0/GPL-3.0

Apache-2.0

Apache-2.0

Apache-2.0

数据库

MySQL

Oracle

SQL Server

PostgreSQL

DB2

MongoDB

SequoiaDB

MySQL

Oracle

SQLServer

PostgreSQL

任何遵循 SQL92 标准的数据库

MySQL/PostgreSQL

MySQL/PostgreSQL

连接数

应用语言

任意

Java

任意

任意

代码入侵

需要修改代码

性能

损耗略高

损耗低

损耗略高

损耗低

无中心化

静态入口

分库分表

单库多表/多库单表

??

??

??

读写分离

??

??

??

??

分片策略定制化

??

??

??

??

分布式主键

??

??

??

??

标准化事务接口

??

??

??

??

XA强一致事务

??

??

??

??

相关推荐

当Frida来“敲”门(frida是什么)

0x1渗透测试瓶颈目前,碰到越来越多的大客户都会将核心资产业务集中在统一的APP上,或者对自己比较重要的APP,如自己的主业务,办公APP进行加壳,流量加密,投入了很多精力在移动端的防护上。而现在挖...

服务端性能测试实战3-性能测试脚本开发

前言在前面的两篇文章中,我们分别介绍了性能测试的理论知识以及性能测试计划制定,本篇文章将重点介绍性能测试脚本开发。脚本开发将分为两个阶段:阶段一:了解各个接口的入参、出参,使用Python代码模拟前端...

Springboot整合Apache Ftpserver拓展功能及业务讲解(三)

今日分享每天分享技术实战干货,技术在于积累和收藏,希望可以帮助到您,同时也希望获得您的支持和关注。架构开源地址:https://gitee.com/msxyspringboot整合Ftpserver参...

Linux和Windows下:Python Crypto模块安装方式区别

一、Linux环境下:fromCrypto.SignatureimportPKCS1_v1_5如果导包报错:ImportError:Nomodulenamed'Crypt...

Python 3 加密简介(python des加密解密)

Python3的标准库中是没多少用来解决加密的,不过却有用于处理哈希的库。在这里我们会对其进行一个简单的介绍,但重点会放在两个第三方的软件包:PyCrypto和cryptography上,我...

怎样从零开始编译一个魔兽世界开源服务端Windows

第二章:编译和安装我是艾西,上期我们讲述到编译一个魔兽世界开源服务端环境准备,那么今天跟大家聊聊怎么编译和安装我们直接进入正题(上一章没有看到的小伙伴可以点我主页查看)编译服务端:在D盘新建一个文件夹...

附1-Conda部署安装及基本使用(conda安装教程)

Windows环境安装安装介质下载下载地址:https://www.anaconda.com/products/individual安装Anaconda安装时,选择自定义安装,选择自定义安装路径:配置...

如何配置全世界最小的 MySQL 服务器

配置全世界最小的MySQL服务器——如何在一块IntelEdison为控制板上安装一个MySQL服务器。介绍在我最近的一篇博文中,物联网,消息以及MySQL,我展示了如果Partic...

如何使用Github Action来自动化编译PolarDB-PG数据库

随着PolarDB在国产数据库领域荣膺桂冠并持续获得广泛认可,越来越多的学生和技术爱好者开始关注并涉足这款由阿里巴巴集团倾力打造且性能卓越的关系型云原生数据库。有很多同学想要上手尝试,却卡在了编译数据...

面向NDK开发者的Android 7.0变更(ndk android.mk)

订阅Google官方微信公众号:谷歌开发者。与谷歌一起创造未来!受Android平台其他改进的影响,为了方便加载本机代码,AndroidM和N中的动态链接器对编写整洁且跨平台兼容的本机...

信创改造--人大金仓(Kingbase)数据库安装、备份恢复的问题纪要

问题一:在安装KingbaseES时,安装用户对于安装路径需有“读”、“写”、“执行”的权限。在Linux系统中,需要以非root用户执行安装程序,且该用户要有标准的home目录,您可...

OpenSSH 安全漏洞,修补操作一手掌握

1.漏洞概述近日,国家信息安全漏洞库(CNNVD)收到关于OpenSSH安全漏洞(CNNVD-202407-017、CVE-2024-6387)情况的报送。攻击者可以利用该漏洞在无需认证的情况下,通...

Linux:lsof命令详解(linux lsof命令详解)

介绍欢迎来到这篇博客。在这篇博客中,我们将学习Unix/Linux系统上的lsof命令行工具。命令行工具是您使用CLI(命令行界面)而不是GUI(图形用户界面)运行的程序或工具。lsoflsof代表&...

幻隐说固态第一期:固态硬盘接口类别

前排声明所有信息来源于网络收集,如有错误请评论区指出更正。废话不多说,目前固态硬盘接口按速度由慢到快分有这几类:SATA、mSATA、SATAExpress、PCI-E、m.2、u.2。下面我们来...

新品轰炸 影驰SSD多款产品登Computex

分享泡泡网SSD固态硬盘频道6月6日台北电脑展作为全球第二、亚洲最大的3C/IT产业链专业展,吸引了众多IT厂商和全球各地媒体的热烈关注,全球存储新势力—影驰,也积极参与其中,为广大玩家朋友带来了...