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

数据库系列: 主流分库分表中间件介绍(图文总结)

相关文章

数据库系列:MySQL慢查询分析和性能优化
数据库系列:MySQL索引优化总结(综合版)
数据库系列:高并发下的数据字段变更
数据库系列:覆盖索引和规避回表
数据库系列:数据库高可用及无损扩容
数据库系列:使用高区分度索引列提升性能
数据库系列:前缀索引和索引长度的取舍
数据库系列:MySQL引擎MyISAM和InnoDB的比较
数据库系列:InnoDB下实现高并发控制
数据库系列:事务的4种隔离级别
数据库系列:RR和RC下,快照读的区别
数据库系列:MySQL InnoDB锁机制介绍
数据库系列:MySQL不同操作分别用什么锁?
数据库系列:业内主流MySQL数据中间件梳理
数据库系列:巨量数据表的分页性能问题

1 介绍

物理服务机的CPU、内存、存储设备、连接数等资源有限,某个时段大量连接同时执行操作,会导致数据库在处理上遇到性能瓶颈。为了解决这个问题,行业先驱门充分发扬了分而治之的思想,对大库表进行分割,
然后实施更好的控制和管理,同时使用多台机器的CPU、内存、存储,提供更好的性能。而分治有两种实现方式:垂直拆分和水平拆分。

  • 垂直拆分(Scale Up)分为垂直分库和垂直分表,主要按功能模块拆分,以解决各个库或者各个表之间的资源竞争。比如分为订单库、商品库、用户库...这种方式,多个数据库之间的表结构是不同的。
  • 水平拆分(Scale Out)又分为库内分表和分库分表,来解决单表中数据量增长出现的压力,这些数据库中的表结构完全相同。

详细可以参考笔者的这两篇文章:
《MySQL全面瓦解28:分库分表》
《MySQL全面瓦解29:分库分表之Partition功能详解》

2 常见主流中间件介绍

既然已经是实现了分库分表的方案,那么就需要有便捷的组件来支持管理.
分库分表中间件是数据库架构中用于解决高并发、大数据量等问题的关键组件。这些中间件通过数据分片、路由、负载均衡等功能,提高了数据库的性能和扩展性。以下是一些常见的分库分表中间件介绍:

2.1 ShardingSphere

概述

  • ShardingSphere是一款开源的分布式数据库中间件,提供了分库分表、读写分离、分布式事务等功能。
  • 它支持多种数据库,如MySQL、PostgreSQL、Oracle、SQL Server等,并且可以与现有的数据库系统无缝集成。

架构与原理

ShardingSphere由Sharding-JDBC、Sharding-Proxy和Sharding-Sidecar三个主要组件组成。

  • Sharding-JDBC:用于实现分库分表功能的模块,它可以在应用层通过简单的配置实现透明的分库分表操作。
  • Sharding-Proxy:用于实现数据库代理功能的模块,它可以将数据库请求路由到不同的数据库节点上,实现读写分离和负载均衡。
  • Sharding-Sidecar(规划中):定位为Kubernetes的云原生数据库代理,以Sidecar的形式代理所有对数据库的访问。

image

其原理是通过数据分片和路由来实现分库分表。数据分片是将数据划分为多个片段,每个片段存储在不同的数据库实例或数据表中;路由则是根据数据的分片规则将请求路由到对应的数据库实例或数据表上。

优势与适用场景

  • 灵活的扩展性:支持水平扩展和垂直扩展,可以根据业务需求灵活调整数据库的规模和性能。
  • 高可用性:支持主从复制和多活架构,提供高可用的数据库访问和数据保护。
  • 简化开发和维护:提供了简单易用的接口和配置,可以减少开发人员的工作量和维护成本。
  • 适用于高并发访问、大数据量存储、跨地域部署等场景。

2.2 MyCAT

概述

  • MyCAT是一个开源的分布式数据库中间件,基于Java编写,支持MySQL协议,可以作为MySQL的代理服务器使用。
  • 它支持分库分表、读写分离、全局序列号等功能,并且具有跨语言、跨平台、跨数据库的通用性。

架构与原理

  • MyCAT采用代理模式来实现数据库的路由和分片。
  • 它包括MyCAT-Server和MyCAT-DataNode两个主要部分。MyCAT-Server用于接收客户端的数据库请求,并将请求路由到不同的数据库节点上;MyCAT-DataNode则用于实际存储数据的数据库节点。

image

优势与适用场景

  • 易于部署和使用:对于项目来说是透明的,如果遇到升级之类的操作,只需要在中间件层面进行即可。
  • 适用于大规模MySQL集群的管理和扩展问题。
  • 但是,MyCAT的SQL支持相对较弱,可能需要对SQL语句进行一定的改写和优化。

2.3 Vitess

概述

  • Vitess是由YouTube开发的一个开源分布式数据库中间件,主要用于解决大规模MySQL集群的管理和扩展问题。

架构与原理

  • Vitess提供了数据分片、读写分离、水平扩展等功能,并且具有强大的负载均衡和故障恢复能力。
  • 它通过vtgate(Vitess的查询路由器)来实现对数据库的访问控制和负载均衡。

优势与适用场景

  • 适用于大规模MySQL集群的场景,具有强大的水平扩展和负载均衡功能。
  • 但是,Vitess对于非MySQL数据库的支持较弱,可能不适用于其他类型的数据库系统。

2.4 其他中间件介绍

除了上述三种常见的分库分表中间件外,还有其他一些中间件如Cobar(已逐渐被淘汰)、TDDL(淘宝分布式数据层)、Atlas(Qihoo 360开源)等。这些中间件在特定的历史时期或特定的业务场景下有一定的应用价值,但随着技术的发展和市场的变化,它们的使用范围和影响力逐渐减弱。

3 总结

在选择分库分表中间件时,需要根据具体的业务需求、技术栈、性能要求等因素进行综合考虑。ShardingSphere、MyCAT和Vitess是当前较为流行和成熟的中间件选择,它们各自具有不同的优势和适用场景。同时,也需要关注中间件的发展动态和社区支持情况,以便在后续的技术升级和维护中获得更好的支持。

码字不易,欢迎关注,欢迎转载
作者:Brand
出处:https://www.cnblogs.com/wzh2010/
本文采用「CC BY 4.0」知识共享协议进行许可,转载请注明作者及出处。
分类: 数据库系列
标签: MyCat , MySQL , 分库分表 , 数据库中间件 , ShardingSphere , Vitess
好文要顶 关注我 收藏该文 微信分享

Hello-Brand 


粉丝 - 1008 关注 - 0
会员号:2855
+加关注
1
0
« 上一篇: DNS在架构中的使用
posted @ 2024-08-02 09:15  Hello-Brand  阅读(395)  评论(0)  编辑  收藏  举报

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 【C++】list介绍以及模拟实现(超级详细)
  • 前端性能优化-性能检测指标与工具
  • 【MySQL】慢sql优化全流程解析
  • 飞浆OCR模型训练详细教程
  • 短视频系统设计:支持三千万用户同时在线看视频
  • OD C卷 - 分配土地
  • 在 Django 模板中渲染并行数组
  • Es6常用的一些数组处理方法
  • JetBrains:Wrong tag。注释告警
  • 代码随想录算法训练营第三十天 | 贪心算法 part04
  • Python接口自动化测试框架(实战篇)-- Jenkins持续集成
  • PXE+Kickstart自动化安装操作系统
  • 荒原之梦考研:考研二战会很难吗?
  • 二十八、【人工智能】【机器学习】【PyTorch】- 手写体识别
  • 下一个排列
  • Angular 响应式表单之下拉框
  • C++11: atomic 头文件
  • CentOS 7 防火墙操作
  • ESLint简单操作
  • Python代码面试必读 - Data Structures and Algorithms in Python
  • ReactNativeweexDeviceOne对比
  • Redux 中间件分析
  • Selenium实战教程系列(二)---元素定位
  • underscore源码剖析之整体架构
  • WePY 在小程序性能调优上做出的探究
  • 开放才能进步!Angular和Wijmo一起走过的日子
  • 老板让我十分钟上手nx-admin
  • 前端面试之CSS3新特性
  • 想写好前端,先练好内功
  • ​linux启动进程的方式
  • # 达梦数据库知识点
  • ## 临床数据 两两比较 加显著性boxplot加显著性
  • ( 10 )MySQL中的外键
  • (Git) gitignore基础使用
  • (初研) Sentence-embedding fine-tune notebook
  • (附源码)ssm本科教学合格评估管理系统 毕业设计 180916
  • (六)Hibernate的二级缓存
  • (三)终结任务
  • (四)进入MySQL 【事务】
  • (一) storm的集群安装与配置
  • (一)十分简易快速 自己训练样本 opencv级联haar分类器 车牌识别
  • .bashrc在哪里,alias妙用
  • .gitignore文件忽略的内容不生效问题解决
  • .Mobi域名介绍
  • .Net 4.0并行库实用性演练
  • .NET Core WebAPI中使用Log4net 日志级别分类并记录到数据库
  • .net core 外观者设计模式 实现,多种支付选择
  • .Net IOC框架入门之一 Unity
  • .Net+SQL Server企业应用性能优化笔记4——精确查找瓶颈
  • .NET中两种OCR方式对比
  • ?php echo ?,?php echo Hello world!;?
  • @AliasFor 使用
  • @Controller和@RestController的区别?
  • @vue-office/excel 解决移动端预览excel文件触发软键盘
  • [3D基础]理解计算机3D图形学中的坐标系变换