数据库分库分表中间件选择

news/2024/7/24 13:35:31 标签: 数据库, 中间件

目前分库分表的中间件有三种设计思路,分别是:

  • 采用分散式架构,适用于用Java开发的高性能轻量级OLTP应用程序,以Sharding-JDBC为代表。
  • 采用中间层Proxy架构,提供了静态输入和所有语言支持,适用于OLAP应用程序和分片数据库的管理和操作情况,以Sharding-Proxy、Mycat 为代表。
  • Database Mesh架构,适合k8s环境,以Sharding-Sidecar为代表。

分散式架构

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

优点:
1、轻量,范围更加容易界定,只是 JDBC 增强,不包括 HA、事务以及数据库元数据管理
2、开发的工作量较小,无需关注 nio,各个数据库协议等
3、运维无需改动,无需关注中间件本身的 HA
4、性能高,JDBC 直连数据库,无需二次转发
5、可支持各种基于 JDBC 协议的数据库,如:MySQL,Oralce,SQLServer

中间层Proxy架构

以Sharding-Proxy为例,中间层将自身定义为透明的数据库代理,它提供了一种数据库服务器,该服务器封装了数据库二进制协议以支持异构语言。对DBA友好的是,现在提供的MySQL版本可以使用与MySQL协议兼容的任何类型的终端(例如MySQL Command Client,MySQL Workbench等)。
在这里插入图片描述

优点:
1、 对应用程序完全透明,可以直接用作MySQL
2、适用于与MySQL和PostgreSQL协议兼容的任何类型的终端
2、更有效的管理数据库的连接
3、整合大数据思路,将 OLTP 和 OLAP 分离处理
4、夸语言支持比较好

Database Mesh架构

以Sharding-Sidecar为代表。Sharding-Sidecar(TODO)将自己定义为Kubernetes环境的云原生数据库代理,以sidecar的形式负责对数据库的所有访问。它提供了一个与数据库交互的网格层,我们称之为Database Mesh。

Database Mesh强调如何将分布式数据库访问应用程序与数据库连接。着重于交互,它有效地组织了杂乱的应用程序与数据库之间的交互。使用数据库网格访问数据库的应用程序和数据库将形成一个大型网格系统,只需将它们放在相应的正确位置即可。它们都由网格层控制。
在这里插入图片描述

混合架构

Sharding-JDBC采用分散式架构,适用于用Java开发的高性能轻量级OLTP应用程序;Sharding-Proxy提供了静态输入和所有语言支持,适用于OLAP应用程序和分片数据库的管理和操作情况。

在这里插入图片描述

开源框架对比

MycatSharding-JDBCSharding-ProxySharding-Sidecar
官方网站官方网站官方网站官方网站官方网站
源码地址gitcodegitcodegitcodegitcode
官方文档Mycat 权威指南官方文档官方文档官方文档
开发语言JavaJavaJavaJava
数据库MySQL
Oracle
SQL Server
PostgreSQL
DB2
MongoDB
SequoiaDB
MySQL
Oracle
SQLServer
PostgreSQL
任何遵循 SQL92 标准的数据库
MySQL/PostgreSQLMySQL/PostgreSQL
连接数
应用语言任意Java任意任意
代码入侵需要修改代码
性能损耗略高损耗低损耗略高损耗低
中心化
静态入口
管理控制台Mycat-webSharding-UISharding-UISharding-UI
分库分表单库多表/多库单表✔️✔️✔️
多租户方案✔️
读写分离✔️✔️✔️✔️
分片策略定制化✔️✔️✔️✔️
分布式主键✔️✔️✔️✔️
标准化事务接口✔️✔️✔️✔️
XA强一致事务✔️✔️✔️✔️
柔性事务✔️✔️✔️
配置动态化开发中✔️✔️✔️
编排治理开发中✔️✔️✔️
数据脱敏✔️✔️✔️
可视化链路追踪✔️✔️✔️
多节点操作分页
去重
排序
分组
聚合
分页
去重
排序
分组
聚合
分页
去重
排序
分组
聚合
分页
去重
排序
分组
聚合
跨库关联跨库 2 表 Join
ER Join
基于 caltlet 的多表 Join
IP 白名单✔️
SQL 黑名单✔️
存储过程✔️

结论

综合目前已有资源、业务情况、前期改造投入成本和后期运营成本考虑,我建议选择ShardingSphere,前期只采用分散架构只使用Sharding-JDBC,后期如果有需要可以部署Sharding-Proxy根据业务情况使用混合架构。

参考

https://blog.csdn.net/weixin_43549578/article/details/106709343
https://shardingsphere.apache.org/document/current/cn/overview/
https://blog.csdn.net/vc33569/article/details/133178385


http://www.niftyadmin.cn/n/5399618.html

相关文章

如何对酒店开展科学的定岗定编——以酒店健身房、娱乐房为例

近年来,随着旅游行业的快速发展,也带动了酒店业的兴盛。酒店的经营效益不仅受益于旅游业,同时也受制于旅游行业。由于旅游业存在明显的季节性差异,旅游旺季客流量多、淡季客流量少,造成人员忙闲不均的问题。酒店行业也…

苹果电脑如何录屏?高清流畅的教程来了(最新)

电脑录屏功能已成为许多人的需求,可以帮助我们将屏幕上的内容录制下来,以便日后查看或者与他人分享。苹果电脑作为广大用户青睐的产品,拥有优质的软硬件条件,可是很多用户不知道苹果电脑如何录屏。接下来,我们将介绍两…

vue3输入单号和张数,自动生成连号的单号

需求: 输入连号事件,需要在表格中输入物流单号,物流号码,生成的数量,名称,点击确定自动生成固定数量的连号物流单号 1.页面布局 <div><el-button type="primary" size="default" @click="handleDialog">输入连号</el-butt…

数据库事务问题整理-MySQL

什么是数据库事务&#xff1f; 数据库事务( transaction)是访问并可能操作&#xff08;增删改查都可能有&#xff09;各种数据项的一个数据库操作序列&#xff08;可能有1或多个SQL语句&#xff09;&#xff0c;这些操作要么全部执行,要么全部不执行&#xff0c;是一个不可分割…

PID闭环控制算法的学习与简单使用

平台&#xff1a;matlab2021b&#xff0c;Vivado2018 应用场景和理解 一个早餐店&#xff0c;假如一天都有生意&#xff0c;生意有的时间很火爆&#xff0c;有时候又一般&#xff0c;老板又是个实在人&#xff0c;只知道在后厨蒸包子。由于包子蒸熟需要一定的时间&#xff0c;老…

护眼台灯怎么选?真实体验总结的教科书级护眼台灯选购指南

近年来护眼台灯的存在感很强&#xff0c;已经成为了很多家庭必不可少的一盏照明灯具&#xff0c;虽说护眼台灯摒弃摁掉了一些日常灯具存&#xff0c;对眼睛造成伤害的可能性。不过我们依旧需要仔细选择&#xff0c;市面上很多低质量的台灯往往在许多看不见的细节上偷工减料&…

QT C++实践|超详细数据库的连接和增删改查操作|附源码

0&#xff1a;前言 &#x1faa7; 什么情况需要数据库? 1 大规模的数据需要处理&#xff08;比如上千上万的数据量&#xff09;2 需要把数据信息存储起来&#xff0c;无论是本地还是服务上&#xff0c;而不是断电后数据信息就消失了。 如果不是上面的原因化&#xff0c;一般…

学习linux从0到初级工程师-3

一、LNMP 1.1 搭建LNMP LNMP&#xff1a;LinuxNginxMysqlPHP LNMP优势&#xff1a; 1.web服务器一种&#xff0c;Nginx处理静态文件、索引文件&#xff0c;自动索引的效率非常高&#xff1b; 2.作为代理服务器,Nginx可以实现无缓存的反向代理加速&#xff0c;提高网站运行…