探秘数据库中的并行计算技术应用
本文分享自华为云社区《【GaussTech技术专栏】数据库中并行计算技术应用探秘》,作者:GaussDB数据库。
并行计算是提高系统性能的重要手段之一。该技术是通过利用多台服务器、多个处理器、处理器中的多核以及SIMD指令集等技术,实现任务的并行化处理,从而加快任务处理的速度。同时,在多个计算机领域有应用,如图像处理、大数据处理、科学计算及数据库等。
数据库中的并行处理技术
1. 分布式并行处理架构
并行处理数据库架构的出现可以追溯到上世纪80年代。当时计算机性能非常有限,但企业已经有了大规模的数据的处理需求。
那当时技术界是如何提升数据处理能力的呢?
当时技术界提出了三种并行架构:Shared Nothing、Shared Disk、Shared Memory,并对他们展开了各种讨论。图灵奖获得者Michael Stonebraker在1985年发表的一篇关于Shared Nothing的文章《The Case for Shared Nothing》,从不同维度,对三种架构能力做了一些比较分析。由于在成本、扩展性、可用性方面的优势,Shared Nothing成为主流的设计思路。
1)最早的Shared Nothing商业产品
最早的Shared Nothing数据处理系统是1984年Teradata公司发布的第一代产品DBC/1012。
图1 DBC/1012架构
DBC/1012的系统架构的关键组件有:
DBC/1012一开始作为大型机IBM 370的后端,后来也可用作其他各种大型机、小型计算机和工作站的后端。数据被算法平均划分到AMP管理的本地Disk,AMP之间通常不交换数据。可通过增加AMP的数量来提升整个系统的数据容量和性能。
虽然现在看来满满的历史感,但是当时借助Shared Nothing技术处理大数据时,Teradata表现得非常好,因此也赢得了优质大客户,帮助Teradata取得商业上的成功。
2)MPP(Massively Parallel Processing)和shared-nothing
数据库并行处理技术中经常会提到的MPP(Massively Parallel Processing),通常指的是服务器的系统架构分类方法。除了MPP之外,还有NUMA、SMP这两个分类。
-
SMP(Symmetric MultiProcessing):对称多处理器结构
SMP服务器的主要特征是共享。系统中的所有资源(如内存、I/O等)都是共享的,扩展能力比较有限。
SMP有时也被称为一致存储器访问(UMA)结构体系,内存被所有处理机均匀共享。和NUMA不同,SMP所有处理器对所有内存具有相同的访问时间。
图2 SMP示意
-
NUMA(Non-Uniform Memory Architecture):非一致存储访问结构
NUMA服务器的主要特征是拥有多个CPU模块,模块之间可以通过互联模块连接和信息交互。
每个CPU可以访问整个系统的内存,但是访问速度不一样。CPU访问本地内存的速度远远高于系统内其他节点的内存速度。
NUMA和MPP的区别在于,NUMA是一台物理服务器,而MPP是多台。
图3 NUMA示意
-
MPP(Massively Parallel Processing):大规模并行处理结构
MPP是多台服务器节点通过互联网络连接起来,各个服务器节点只访问本地资源(内存和存储),各个服务器之间shared nothing。
在数据库领域里,当我们说起一个数据库是MPPDB,是指在数据的设计实现上,利用MPP并行处理的服务器集群scale-out扩展数据库性能,服务器之间Shared Nothing。可以理解为MPPDB == Shared Nothing数据库。
当前支持MPP架构数据库产品有很多,如:Netezza(基于PG;IBM收购后不活跃)、Greenplum(基于PG;VMware)、Vertica(HP)、Sybase IQ(SAP)、TD Aster Data(Teradata)、Doris(百度)、Clickhouse(Clickhouse, Inc.)、GaussDB(华为)、SeaboxMPP(东方金信)等。
2. SMP并行
One size does not fit all。Shared Nothing并行技术做到了很好的水平横向扩展(scale-out),但随着单台物理服务器的硬件资源越来越强大(几十~上百个core/服务器),仅仅采用Shared Nothing技术,不能很好地挖掘硬件潜力。因为组成Shared Nothing架构数据库的单机很多都是SMP架构,即使是NUMA架构,其实每个NUMA域也可以近似认为是一个SMP系统。因此,业界又做了SMP并行执行的工作,提升单机上纵向扩展(scale-up)能力,优化处理性能。
SMP并行技术可通过多线程多子任务并行执行的机制实现系统计算资源的充分高效使用,如下图所示:
3. 其他并行技术
SMP进一步提升了数据库节点内并行处理的能力,但是数据库节点的处理芯片的处理性能仍可以进一步压榨,比如ARM和x86处理器往往都配备了SIMD指令集,提升了一条指令可以处理的数据的位宽。篇幅原因,这些并行技术会在后续GaussTech系列文章中阐述,这里不再赘述。
开源数据库中的并行技术应用
当前流行的开源数据库有两款:MySQL和PostgreSQL。让我们来看一下这两款开源数据库系列中Shared Nothing和SMP技术的运用吧。
1. Shared Nothing
MySQL搭建Shared Nothing数据库集群主要靠借助各厂商自研或者开源的中间件,结合MySQL数据库提供分布式并行处理能力。比如:GoldenDB、TDSQL-MySQL等。MySQL官方也提供了MySQL NDB Cluster,可借助其搭建分布式集群。
PostgreSQL也是类似的思路,比如:TDSQL- PostgreSQL以及PostgreSQL生态圈流行的开源中间件Postgres-XL、Postgres-XC、citus等。
可以看到,MySQL以及PostgreSQL系提供Shared Nothing能力的主要是中间件架构的分布式数据库。
虽然这类数据库能横向扩展数据处理能力,但也存在功能降级、全局事务能力和高可用、性能等方面存在短板,需要有针对性增强。
2. SMP并行技术
MySQL在2019年发布的8.0.14版本中第一次引入了并行查询特性,对于一条SQL语句,也能发挥主机CPU多核能力,改善复杂大查询的能力。
并行处理能力主要是由存储引擎InnoDB提供的:
PostgreSQL从2016年发布的9.6开始支持并行顺序扫描、聚合,在2018年发布的11支持了更多的并行算子:并行哈希连接、Append、创建索引等。
PostgreSQL提供了一些参数来进行并行的控制,比如max_parallel_workers_per_gather。当优化器预判并行执行成本较高时,也不会生成并行执行计划。
可以看到,作为开源数据库中的翘楚,PostgreSQL和MySQL都应用了SMP线程级并行处理技术提升数据库的单节点处理性能。
总结
并行计算技术作为提升数据库处理性能的重要手段,在现有的数据库产品中得到了广泛的应用。本文简要说明了以Shared Nothing为代表的节点间并行处理技术,以及SMP节点内并行处理技术和它们在开源数据库中的应用。
GaussDB作为企业级数据库,也使用了这两项技术,提升了数据库处理的性能。相较于开源数据库的实现,GaussDB的实现方式,结合各类实际场景,添加了更多的特色实现,进一步提升了分布式处理性能,这些我们将于下一篇文章加以说明。

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
Airtest-Selenium实操小课④:微信读书上阅读书籍
👆对私有云感兴趣可以进入公众号回复“私有云”哦。 1. 前言 上一课我们讲到用Airtest-Selenium爬取下载可爱的猫猫图片,还没看的同学可以戳 这里 看看~ 那么今天的推文,我们就来说说看,怎么实现模拟真人去打开微信读书网站,点击进入书本进行阅读。 2.需求分析和准备 整体的需求大致可以分为以下步骤: 打开chrome浏览器 打开百度网页 搜索“微信读书” 点击进入“微信读书”官网 搜索关键词“长安的荔枝” 点击进入“长安的荔枝”书本 翻阅书籍前五章内容 在写脚本之前,我们需要准备好社区版AirtestIDE(目前最新版为1.2.17), 设置好chrome.exe地址和对应的driver即可。 3. 脚本实现与运行效果 3.1 脚本运行效果 在运行过程中,我们将每次的搜索结果通过读取url链接的方式去实现页面跳转,在进入到书籍阅读界面时,根据读取到的页面高度、文档高度、去计算可滑动高度,实现滑动阅读的操作。并且根据页面的JS距离去判断是否已经滑动到文档底部,从而执行点击下一章的操作。 先来看下我们整体的运行效果: 3.2 完整代码分享 这里也附上完整的示例代码给大家参考,...
- 下一篇
Java Chassis 3技术解密,流式响应如何简化AI应用开发
本文分享自华为云社区《Java Chassis 3技术解密:流式响应和人工智能应用开发》,作者:liubao68。 随着生成式人工智能技术的发展,应用程序开发者对于流式响应(Streaming Responses)的诉求越来越多。服务器事件推送(Server Push Events)技术能够在使用HTTP协议的前提下,提供流式响应能力。然而,在微服务架构下使用流式响应并不是那么方便,现有的各个微服务开发框架都需要使用不同于响应应答的普通REST接口额外能力,采用新的技术或者API来满足流式响应的开发诉求,增加了技术成本。 Java Chassis 3基于服务器事件推送和响应式流(reactive streams)标准,提供了非常简洁的流式响应开发能力,简化人工智能应用开发体验。 使用流式响应 首先,看看微服务架构下一个简单的调用场景。 前端(浏览器) -> 应用网关(edge service) -> 消费者微服务 -> 提供者微服务 提供者微服务:定义流式响应服务和生成流式响应 定义流式响应服务非常简单,只需要将响应类型声明为Publisher。 业务逻辑可以使用Rx...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS8编译安装MySQL8.0.19
- Windows10,CentOS7,CentOS8安装Nodejs环境
- CentOS关闭SELinux安全模块
- Windows10,CentOS7,CentOS8安装MongoDB4.0.16
- Linux系统CentOS6、CentOS7手动修改IP地址
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- Red5直播服务器,属于Java语言的直播服务器
- SpringBoot2整合Redis,开启缓存,提高访问速度
- CentOS7,8上快速安装Gitea,搭建Git服务器