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

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

  • 采用分散式架构,适用于用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应用程序和分片数据库的管理和操作情况。

开源框架对比

-- Mycat Sharding-JDBC Sharding-Proxy Sharding-Sidecar
官方网站 官方网站 官方网站 官方网站 官方网站
源码地址 gitcode gitcode gitcode gitcode
官方文档 Mycat 权威指南 官方文档 官方文档 官方文档
开发语言 Java Java Java Java
数据库 MySQL Oracle SQL Server PostgreSQL DB2 MongoDB SequoiaDB MySQL Oracle SQLServer PostgreSQL 任何遵循 SQL92 标准的数据库 MySQL/PostgreSQL MySQL/PostgreSQL
连接数
应用语言 任意 Java 任意 任意
代码入侵 需要修改代码
性能 损耗略高 损耗低 损耗略高 损耗低
中心化
静态入口
管理控制台 Mycat-web Sharding-UI Sharding-UI Sharding-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

相关推荐
Tansmjs14 小时前
使用Python自动收发邮件
jvm·数据库·python
m0_5613596714 小时前
用Python监控系统日志并发送警报
jvm·数据库·python
Dxy123931021615 小时前
MySQL INSERT ... ON DUPLICATE KEY UPDATE 与非主键唯一字段
数据库·mysql
zhousenshan15 小时前
springboot事务管理几种方式
数据库
布局呆星15 小时前
SQLite数据库的介绍与使用
数据库·python
2401_8384725115 小时前
用Python和Twilio构建短信通知系统
jvm·数据库·python
石头wang15 小时前
oracle jdbc 依赖以及对dbeaver的性能影响,如何选择oracle驱动, oracle jdbc 驱动
数据库·oracle
weixin_4521595516 小时前
如何从Python初学者进阶为专家?
jvm·数据库·python
2301_7903009616 小时前
用Python读取和处理NASA公开API数据
jvm·数据库·python
万象.16 小时前
redis持久化:AOF和RDB
数据库·redis·缓存