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

分库分表、分布式数据库、MPP

分库分表、分布式数据库、MPP的区别吗?

一、MySQL分库分表和MySQL分布式集群在性能方面各有优劣,具体取决于应用场景和需求。

MySQL分库分表:

在分库分表的场景下,可以将负载分散到多个数据库实例上,从而提高整体性能。这种架构可以更好地处理大量并发请求,因为每个数据库实例都可以独立地处理一部分请求。此外,通过水平分库和分表,可以大大增加单个数据库的读写能力。但是,跨库事务的处理可能会引入一些延迟,并且如果一个数据库实例出现故障,整个系统的可用性可能会受到影响。

MySQL分布式集群:

分布式集群可以提供更好的可扩展性和高可用性。通过将多个数据库实例组合成一个集群,可以轻松地增加系统的整体性能和容量。这种架构还可以实现负载均衡,将请求分散到不同的数据库实例上。此外,一些分布式数据库解决方案还提供了自动故障恢复功能,以确保系统的可用性。然而,分布式集群的架构相对复杂,数据一致性和事务管理的复杂性可能会增加。

综上所述,MySQL分库分表和MySQL分布式集群在性能方面各有优势。选择哪种架构取决于应用场景和需求。如果需要处理大量并发请求并且关注单个数据库的性能,那么分库分表可能更适合。如果需要更好的可扩展性和高可用性,并且愿意付出一些额外的复杂性,那么分布式集群可能是一个更好的选择。

二、MySQL分库分表和MySQL MPP(大规模并行处理)

是两种不同的数据处理策略,它们在数据划分方式、扩展性和事务处理方面存在一些差异。

1、数据划分方式:

MySQL分库分表:将数据划分到不同的数据库和表,通过水平或垂直的方式进行拆分。这种划分方式可以减轻单个数据库的
负载,提高查询性能,但跨库/跨表的事务处理可能变得复杂。MySQL MPP:采用分布式架构,将数据划分成多个部分,并在多台计算机上运行。每个节点都有自己的CPU、内存、磁盘和网络连接,通过共享数据和计算资源进行协作,从而实现高速的处理能力和可扩展性。

扩展性:

MySQL分库分表:通过增加数据库实例的数量来扩展系统性能。每个数据库实例可以独立地处理一部分数据,从而实现负
载均衡。然而,这种扩展方式可能受到硬件资源的限制。MySQL MPP:通过增加计算节点来扩展系统性能。每个节点都可以独立地处理一部分数据,从而实现高效的并行处理。
这种架构可以充分利用集群中的硬件资源,实现线性扩展。

事务处理:

MySQL分库分表:跨库/跨表的事务处理可能变得复杂。在分布式环境下,事务的一致性和同步问题需要额外关注和处理。MySQL MPP:分布式集群中的事务处理相对简单。由于数据被划分成多个部分并分布在不同的节点上,事务可以在各个节点
上独立执行,减少了事务的一致性和同步问题。

综上所述,MySQL分库分表和MySQL MPP在数据划分方式、扩展性和事务处理方面存在一定差异。选择哪种策略取决于具体的业务需求和数据处理规模。如果需要处理大规模数据并充分利用硬件资源,那么MySQL MPP可能更适合。如果需要处理中等规模数据并关注单个数据库的性能,那么MySQL分库分表可能更合适。

1)分库分表做法,主要是因为早期单机数据库(主要还是MySQL这种低成本场景)下无法在一个库一张表来承载同一业务表下所有的数据,因而将数据划分到不同的物理库表中去,从业务视角来形成一个大的逻辑表。这样的话能够充分利用水平拆分能力,来存储超大的数据集。一般拆分逻辑依赖业务给出相关的字段,配合分表规则,来做hash、range的拆分。这种方式一般通过一些富客户端来支持用户sql,好处很直观,针对点查询效率很高,插入数据效率高,
缺点:问题点很多,也不太好解决,主要在于涉及到不同分库的sql操作,比如怎么支持跨库表join,怎么支持分布式事务来更新,如果sql中不带分区键导致全逻辑表查询等等。另外,数据量越来越大时有热点问题怎么办,数据怎么重分布,宕机怎么恢复,路由表变更怎么办,怎么做多个实例的服务发现,怎么做读写分离,等等。

解决办法:最终就是让业务上做妥协,最终一致性,不支持join,允许局部节点故障,等等。

2)本质上,分库分表中间件相当于把数据库解决不了的问题推到业务侧,让业务参与解决或者妥协。随着云计算平台分布式数据库越来越强大,分库分表的技术会慢慢的退出历史舞台。简单来说,分布式数据库把上面的问题尽量的在数据系统内部解决掉,给客户的接口非常简单,统一的endpoint,标准的数据库协议,完整的sql支持能力,等等,但内部一样有各种数据分区逻辑。分布式数据库从广义上来说,就是实现数据库语义的分布式架构下的系统,像云上各种OLTP和OLAP产品,应该都可以称之为分布式数据库。分布式数据库中最重要的就是数据怎么摆放,数据在多个机器上平均分摊持有一份数据做sharding,还是多个节点相互复制一份数据做主备,还是利用底层共享存储共享一份完整数据集,衍生出不一样的系统架构和能力。

3)mpp数据库主要区别于smp数据库。后者一般是单机架构,而单机能力毕竟有限,在OLAP计算数据量非常大的时候,单机数据库的分析能力非常有限。mpp数据库构建一套分布式计算集群(mpp数据库肯定是分布式系统,但狭义上应该不算那些只考虑数据切片的分布式数据库),增强计算能力,在计算中再针对数据集做切片调度执行等,最终希望能实现计算力的水平扩展。废话较多,总结一下。这些概念本身不是完全无关的,相互有关系。我接触过的发展过程:单机数据库,到主备分布式数据库(解决高可用和数据高可靠),到分库分表(sharding解决横向扩展)+主备分布式数据库(解决部分数据的可用和数据可靠性,全局数据无强一致保障),再到主备+内部自动分区和复杂分布式计算的分布式数据库(数据,语义,能力,免运维都很强),再到数据层共享存储、计算层横向弹性扩缩容的分布式数据库架构(能力越来越强,成本、弹性、故障恢复速度、灾备等),等等。无论上单机还是分布式数据库,针对单个sql,最终只会在一个节点上执行完成,而mpp数据库会对这个sql执行计算任务分解,靠整个集群的算力分布式调度计算,最后整体完成sql。这个可能是与分布式数据库的差异。但分布式数据库与mpp数据库不是一个差异化很大的概念,技术实现上也会有很多重叠的。

相关文章:

  • appium2.0+ 单点触控和多点触控新的解决方案
  • IDEA前端thymeleaf只显示部分数据库问题
  • 构建个性化预约服务:预约上门服务系统源码解读与实战
  • 基于单片机设计的大气气压检测装置(STC89C52+BMP180实现)
  • C语言实现Linux下TCP Server测试工具
  • C/C++---------------LeetCode第2824. 统计和小于目标的下标对数目
  • C语言之strstr函数的使用和模拟实现
  • 《数据结构、算法与应用C++语言描述》-代码实现散列表(线性探查与链式散列)
  • 在AWS VPC中运行Nagios检查时指定自定义DNS解析器的选项
  • 7-22 龟兔赛跑
  • SpringBoot——拦截器
  • 【沐风老师】在3dMax中如何把对象随机散布在表面上?
  • 40、Flink 的Apache Kafka connector(kafka source 和sink 说明及使用示例) 完整版
  • 介绍 Docker 的基本概念和优势,以及在应用程序开发中的实际应用。
  • [原创](免改BIOS)使用Clover升级旧电脑-(高阶玩法)让固态硬盘内置Win11 PE启动系统
  • CentOS 7 修改主机名
  • gitlab-ci配置详解(一)
  • JavaScript设计模式系列一:工厂模式
  • leetcode386. Lexicographical Numbers
  • Mocha测试初探
  • React系列之 Redux 架构模式
  • vue学习系列(二)vue-cli
  • 世界编程语言排行榜2008年06月(ActionScript 挺进20强)
  • 消息队列系列二(IOT中消息队列的应用)
  • 写给高年级小学生看的《Bash 指南》
  • 原生JS动态加载JS、CSS文件及代码脚本
  • 自制字幕遮挡器
  • !!【OpenCV学习】计算两幅图像的重叠区域
  • # Swust 12th acm 邀请赛# [ K ] 三角形判定 [题解]
  • # 安徽锐锋科技IDMS系统简介
  • # 职场生活之道:善于团结
  • #我与Java虚拟机的故事#连载10: 如何在阿里、腾讯、百度、及字节跳动等公司面试中脱颖而出...
  • (delphi11最新学习资料) Object Pascal 学习笔记---第8章第2节(共同的基类)
  • (solr系列:一)使用tomcat部署solr服务
  • (zt)最盛行的警世狂言(爆笑)
  • (附源码)spring boot北京冬奥会志愿者报名系统 毕业设计 150947
  • (附源码)springboot 房产中介系统 毕业设计 312341
  • (每日持续更新)jdk api之StringBufferInputStream基础、应用、实战
  • (十一)手动添加用户和文件的特殊权限
  • (转)Linux NTP配置详解 (Network Time Protocol)
  • (转)详解PHP处理密码的几种方式
  • .dwp和.webpart的区别
  • .gitignore文件_Git:.gitignore
  • .NET Core 发展历程和版本迭代
  • .NET gRPC 和RESTful简单对比
  • .NET IoC 容器(三)Autofac
  • .Net Memory Profiler的使用举例
  • .net 调用php,php 调用.net com组件 --
  • .net对接阿里云CSB服务
  • :O)修改linux硬件时间
  • [ Linux ] git工具的基本使用(仓库的构建,提交)
  • [ Python ]使用Charles对Python程序发出的Get与Post请求抓包-解决Python程序报错问题
  • [.net 面向对象程序设计进阶] (19) 异步(Asynchronous) 使用异步创建快速响应和可伸缩性的应用程序...
  • [20150321]索引空块的问题.txt
  • [AI StoryDiffusion] 创造神奇故事,AI漫画大乱斗!