当前位置: 首页 > news >正文

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

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

  • 采用分散式架构,适用于用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

相关文章:

  • 【扩散模型系列1】扩散模型背景|DDPMs|LDM
  • 【理解机器学习算法】之Nearest Shrunken Centroid(纯Python)
  • Redis面试题
  • C++模拟揭秘刘谦魔术,领略数学的魅力
  • Python 程序基本结构的使用
  • 循环队列:一道使数据结构萌新知道什么是“愁滋味“的题目
  • 字符串逆序
  • web坦克大战小游戏
  • Verilog参数、Verilog参数和属性冲突、整数处理
  • 【ArcPy】简化ArcGISPro默认Python环境体量
  • YOLOv8从入门到入土使用教程!(二)目标预测
  • QT使用FFMPEG库开发视频播放器
  • 惠普 DsekJet GT 5810/5820常见问题及解决方法
  • 低代码平台开发——基于React(文末送书)
  • MySQL相关问题
  • [ JavaScript ] 数据结构与算法 —— 链表
  • 0x05 Python数据分析,Anaconda八斩刀
  • CSS 专业技巧
  • es6要点
  • golang中接口赋值与方法集
  • Java 23种设计模式 之单例模式 7种实现方式
  • Java 多线程编程之:notify 和 wait 用法
  • js操作时间(持续更新)
  • JWT究竟是什么呢?
  • Lucene解析 - 基本概念
  • PHP变量
  • select2 取值 遍历 设置默认值
  • vuex 笔记整理
  • webgl (原生)基础入门指南【一】
  • 后端_MYSQL
  • 排序(1):冒泡排序
  • 融云开发漫谈:你是否了解Go语言并发编程的第一要义?
  • 一些基于React、Vue、Node.js、MongoDB技术栈的实践项目
  • 怎么将电脑中的声音录制成WAV格式
  • 新年再起“裁员潮”,“钢铁侠”马斯克要一举裁掉SpaceX 600余名员工 ...
  • # 数据结构
  • #Linux(make工具和makefile文件以及makefile语法)
  • #我与Java虚拟机的故事#连载11: JVM学习之路
  • $$$$GB2312-80区位编码表$$$$
  • ( )的作用是将计算机中的信息传送给用户,计算机应用基础 吉大15春学期《计算机应用基础》在线作业二及答案...
  • (LeetCode C++)盛最多水的容器
  • (备忘)Java Map 遍历
  • (附源码)apringboot计算机专业大学生就业指南 毕业设计061355
  • (附源码)springboot宠物管理系统 毕业设计 121654
  • (转)iOS字体
  • (转)Windows2003安全设置/维护
  • (最全解法)输入一个整数,输出该数二进制表示中1的个数。
  • **PHP二维数组遍历时同时赋值
  • .NET 4.0中使用内存映射文件实现进程通讯
  • .NET Core WebAPI中使用Log4net 日志级别分类并记录到数据库
  • .Net MVC + EF搭建学生管理系统
  • .net 验证控件和javaScript的冲突问题
  • .net访问oracle数据库性能问题
  • @ModelAttribute 注解
  • [ C++ ] STL---stack与queue