IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> [CMU 15-445] 13 Query Execution - PartⅡ笔记 -> 正文阅读

[大数据][CMU 15-445] 13 Query Execution - PartⅡ笔记

1. Overview

前面介绍的都是基于单个Worker(如进程、线程)的查询树执行方式,本节主要介绍查询树的并发执行(线程).

并发执行查询树可以降低延时(因为单个任务的处理时间变少了),降低系统响应时长,提高吞吐率和可用性.

并行数据库与分布式数据库有许多相似之处,资源都不是集中的,区别在于资源的可靠性和通信的成本不同,分布式数据库的资源之间跨越不同物理机器,由于经过网络传输的原因,资源可靠性低且网络开销大.

本节首先介绍几种并行处理模型,然后包括执行并行和I/O并行的问题.

2. Process Model

并行处理模型有以下三种方式:Worker/进程,Worker/进程池,Worker/线程池.

Worker/进程指一个进程单独处理负责一个Worker的任务.

Worker/进程模型中,对于每个Worker,调度器(Dispatcher)都fork一个单独的进程处理. 这种方式出现在早期多线程技术不成熟的年代. 进程之间通过共享内存实现资源共享,相比线程间的调度这种方式不灵活而且资源开销大.

Worker/进程池模型每个任务由进程池负责处理,进程池中的进程可以协调共同处理任务(例如任务数目很多或者计算量很大),但进程的管理需要依赖操作系统,灵活性较差.

Worker/线程池模型任务由线程池内的线程处理,DBMS自己负责线程的调度,更加灵活且轻量.

多线程并发相比多进程并发上下文切换代价低,线程间共享资源也相比进程间共享资源要方便.

3. Execution Parallelism

执行并行类型分为 Inter 和 Intra ,Inter 指的是多个Query间的并发,用于提高系统整体吞吐。Intra 指的是单个Query内的并发,用于提高单个查询的性能.

若Inter并发的多个Query都是只读操作,那么并发不需要特殊处理.

Intra 类型并发基于生产者-消费者模型实现单个Query内不同算子之间的并发(主要通过流水线).

下图所示的是一种 Inter 类型并发的例子,由于Hash函数的特性,编号相同的bucket之间可以并发处理Grace Hash Join.

相应地,Query内 Intra 并发也有三种方式,即(Intra)水平、(Inter)垂直和Bushy(和水平相似)

通过将数据分成多个fragment(片),每个片上运行相同的算子实现类似Intra类型的并发,最后通过一个exchange汇总所有的执行结果.

例如下面的例子中,exchange汇总在三个片上并行执行的结果.

这里面可以套上前一节介绍的查询处理模型(例如火山模型),上层调用Next()后下面在不同分片上并发执行.

exchange支持以下三种模式,上面的例子是简单地将数据搜集起来(Gather)

更复杂的一个水平并发的例子(注意现在为止不同算子之间的处理依然是阻塞的):

为避免一个算子的阻塞导致下一个算子空闲,Query内的Inter类型并发是让不同算子之间进行流水线处理数据.

Bushy模式和Intra模式类似,不同片上的多个子Query之间的并行.

4. I/O Parallelism

I/O瓶颈也是决定系统性能的一个重要因素,因此需要避免多线程并发读写时的I/O墙.

常用的方法根据执行内容对磁盘进行相应的分区或者冗余存储(这些对于DBMS而言是透明的,磁盘知道Page和物理地址相应的映射关系),提高磁盘的整体存取性能.

RAID 0 设计是具有所有RAID级别中最高的存储性能,把连续的数据分散到多个磁盘上存取,片之间无数据冗余,系统有数据请求就可以被多个磁盘并行的执行,每个磁盘执行属于它自己的那部分数据请求。这种数据上的并行操作可以充分利用总线的带宽,显著提高磁盘整体存取性能。

RAID 1 通过磁盘数据镜像实现数据冗余,在成对的独立磁盘上产生互为备份的数据。当原始数据分片繁忙时,可直接从镜像拷贝中读取数据,因此RAID 1可以提高读取性能。RAID 1是磁盘阵列中单位成本最高的,但提供了很高的数据安全性和可用性。当一个磁盘失效时,系统可以自动切换到镜像磁盘上读写,而不需要重组失效的数据。

从DBMS层面也有数据分片方案,再DBMS中我们对数据进行逻辑划分,例如一些数据库支持通过软/硬连接将数据映射到磁盘空间上.

逻辑划分后的不同子表存储在不同物理分片上,然而这对于应用层而言又是透明的.

划分方式包括垂直划分和水平划分两种,垂直划分好处例如属性相同的列可以压缩存储,可以利用列式存储优势等.

水平划分是最常见的划分方式,以tuple为单位对表进行划分.

5. 总结

关注我的微信订阅号,交流数据管理与分布式系统相关技术:

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2021-09-11 18:53:24  更:2021-09-11 18:54:30 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 20:39:01-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码