(十三)数据库查询处理之QueryExecution(2)
(十三)数据库查询处理之QueryExecution(2)
实验室这一周真的忙爆(虽然都是各种打杂的活)所以拖了很久终于在周末(摸鱼)把实验3做完了。同时准备把和查询这一块有关的博客补一下。然后就进入最后一个project并行和锁那里。不过下周华为的比赛就开了。争取四月份之前把这些东西全都搞定。等到四月份的时候开一个新坑(leveldb源码阅读笔记)
1. 并行和分布式的区别
如今数据库分布在多种资源中,以提高DBMS的不同方面
并行DBMS
- 资源在物理上靠近
- 资源之间可以高速互通
- 资源交互是非常廉价和可靠的
分布式DBMS
- 各种资源之间可以离得很远
- 资源之间较慢速的互连进行通信
- 通信成本和问题不容忽视。(也就是很大)
2. 进程模型
1. PROCESS PER WORKER
每一个worker就是一个独立的进程。worker可以理解为打工人。执行任务
整个流程大致如下
- 你的应用程序想要和数据库进行交互
- 通知调度器。调度器会
fork
一个子进程(也就是产生一个worker)来执行这个任务 - 调度器会告诉应用程序你直接和worker进行交互就可
- 随后worker访问数据库
- worker将得到的结果传回应用程序
这个模型的好处是。如果一个进程出现了bug整个系统不会出现问题。只需要通知调度器在fork一个进程就好了
2. PROCESS POLL
进程之间仍然共享内存。并且依赖于操作系统的调度。每个worker可以使用在进程池中任意的一个进程
3. THREAD PER WORKER
一个进程可以有许多worker线程
整个流程大致如下
应用程序直接和worker的线程进行交互
优点
- 线程间的切换比进程间的切换要轻量级的多
- 这样就不需要管理共享内存了(因为一个进程的多个线程就会共享这个进程的内存。这样我们无需管理多个进程之间的内存共享)
注意这并不意味着dbms里的所有任务一定要多线程来执行
DBMS永远知道的比操作系统更多
3. INTER-VS INTRA-QUERY PARALLELISM
1. I N T E R-Q U E R Y P A R A L L E L I S M
通过允许多条查询同时进行来提高整体的性能。
如果多条查询语句只是读数据库的话,那我们在不同的查询之间几乎不需要加任何限制条件
但是如果写操作比较多的话就很麻烦了
2. I N T R A-Q U E R Y P A R A L L E L I S M
这个就是流水线操作。csapp第四章讲的非常清楚
通过并行执行单条查询语句来提高单个查询的性能。可以从生产者消费者的角度来理解
下面来看一个例子 -> PARALLEL GRACE HASH JOIN
这个非常简单我们让一个worker去执行一行的join操作然后输出结果就好
4. INTRA-QUERY PARALLELISM 的方法
1. 方法1 Intra-Operator(水平方法的并行)
将整个查询操作分解为几个独立的片段,这些片段对不同的数据集执行相同的功能
例如下面的例子(截图警告)
其中A1承担一小部分任务
每个不同的worker承担不同的任务
最上面的Exchange操作基本可以分为三个类型
case1 Gather
将来自多个worker的结果合并到一个输出流中。最上层的Exchange操作必须始终是Gather
case2 Repartion
将多个输入流重新打乱成多个输出流
case3 Distribute
将单个输入流拆分为多个输出流
对于上面这个比较复杂的例子
- 首先A的所有worker和B的所有worker完成Hash join的基本操作
- 然后新的4个worker进行探测操作把结果汇入 根节点的Exchange得到结果
2. 方法2 INTER-OPERATOR PARALLELISM(垂直方向)
这也叫做pipelined parallelism.
这种方法非常好理解就是位于下层的worker把得到的结果向上传递给上层的worker
3. 方法3 Bushy Parallelism
方法1和2的结合版本
SELECT*FROM A JOIN B JOIN C JOIN D
在这个方法里一个woker1和worker同时执行整条语句的两个部分。并且会将执行之后得到的结果往上传递给worker3和worker4
因为磁盘的限制。所以使用额外的进程/线程可能并不会产生很好的效果。接下来介绍I/O的并行
5. I / O PARALLELISM
1. MULTI-DISK PARALLELISM
拓展阅读RAID
RAID0形式
不同的page存储在不同的存储设备中
RAID1形式
不同的存储设备中存储着相同的数据。
6. PARTITIONING
逻辑上的一张表。我们可以把它分成几个独立的部分放在不同的物理资源中。并且理想情况下分区程序应该对用户是透明的
下面来看两种不同的划分方法
1. 垂直划分
顾名思义就是按照列来划分。我们可以把不同的列放在不同的物理资源中
2. 水平划分
水平划分就是把不同的tuple(元组)放在不同的物理资源中
(十三)数据库查询处理之QueryExecution(2)的更多相关文章
- 《万能数据库查询分析器》实现使用SQL语句直接高效地访问文本文件
<万能数据库查询分析器>实现使用SQL语句直接高效地访问文本文件 马根峰 (广东联合电子服务股份有限公司, 广州 510300) 摘要 用SQL语句来直接访问文本文件?是在做梦吗? ...
- Django 数据库查询集合(多对多)
Django 数据库查询集合(双下划线连表操作) 目录: 1.Django环境搭建 2.数据库建表 3.写入数据 4.查询语句 Django环境搭建 1.安装django pip install dj ...
- CRL快速开发框架系列教程十三(嵌套查询)
本系列目录 CRL快速开发框架系列教程一(Code First数据表不需再关心) CRL快速开发框架系列教程二(基于Lambda表达式查询) CRL快速开发框架系列教程三(更新数据) CRL快速开发框 ...
- 用struts2标签如何从数据库获取数据并在查询页面显示。最近做一个小项目,需要用到struts2标签从数据库查询数据,并且用迭代器iterator标签在查询页面显示,可是一开始,怎么也获取不到数据,想了许久,最后发现,是自己少定义了一个变量,也就是var变量。
最近做一个小项目,需要用到struts2标签从数据库查询数据,并且用迭代器iterator标签在查询页面显示,可是一开始,怎么也获取不到数据,想了许久,最后发现,是自己少定义了一个变量,也就是var变 ...
- [转]C#反射,根据反射将数据库查询数据和实体类绑定,并未实体类赋值
本文来自:http://www.cnblogs.com/mrchenzh/archive/2010/05/31/1747937.html /****************************** ...
- 各数据库查询前N条记录的SQL语句
sql在不同数据库查询前几条数据 1. ORACLE SELECT * FROM TABLE_NAME WHERE ROWNUM <= N; HQL: from table_name t or ...
- Atitit DbServiceV4qb9 数据库查询类库v4 新特性
Atitit DbServiceV4qb9 数据库查询类库v4 新特性 V4新特性 安全特性,屏蔽了executeUpdate,使用v2版 Sql异常转换,特别转换了DuplicateEnt ...
- C#与mysql做ASP.NET网页数据库查询速度测试
两种方法是:1,使用mysql数据库的存储过程:2,C#编码,做网页后台与mysql数据库连接,前台测试显示测试过结果下面我将分别讲解两种方法的具体实现. 1,使用mysql数据库的存储过程插入万条大 ...
- 第九十九天上课 PHP TP框架 数据库查询和增加
在Model文件夹下创建模型,文件命名规则 : 表名Model.class.php <?php namespace Home\Model; use Think\Model; class yong ...
随机推荐
- CodeForces - 915E 动态开点线段树
题目 晚上有n个亮着的灯泡,标号从1到n. 现在存在2种操作,如下: 操作1,关掉标号 [l,r] 区间的灯 操作2,打开标号 [l,r] 区间的灯 下面有q次询问,每次询问执行其中一种操作,询问格式 ...
- Gym 2009-2010 ACM ICPC Southwestern European Regional Programming Contest (SWERC 2009) A. Trick or Treat (三分)
题意:在二维坐标轴上给你一堆点,在x轴上找一个点,使得该点到其他点的最大距离最小. 题解:随便找几个点画个图,不难发现,答案具有凹凸性,有极小值,所以我们直接三分来找即可. 代码: int n; lo ...
- PowerShell随笔2---初始命令
PowerShell便捷之处 PowerShell中兼容运行cmd的命令,比如 ipconfig.ping命令等 PowerShell的命令更友好,可读性更强.比如停止一个服务 CMD命令:sc st ...
- ABP设置管理模块: Abp.SettingUi
开源地址: https://github.com/EasyAbp/Abp.SettingUi 一直想宣传一下SettingUi, 因为 懒 工作比较忙, 所以才拖到今天. 关于ABP就不需要我再多废口 ...
- anaconda jupyter notebook 启动方法
介绍 anaconda jupyter notebook是一种基于浏览器的python编译环境.(大概) 使用时可能因为浏览器缓存造成问题. 但是很方便. 启动方法 anaconda navigato ...
- UA 广告 All In One
UA 广告 All In One UA 广告是什么 广告投放 / 市场营销 互联网营销和分析专用名词速览 http://www.chinawebanalytics.cn/digital-marketi ...
- 前端使用 js 如何实现大文件上传
前端使用 js 如何实现大文件上传 大文件上传 refs xgqfrms 2012-2020 www.cnblogs.com 发布文章使用:只允许注册用户才可以访问!
- Express All In One
Express All In One express.js, node.js web framework # v4.17.1 Latest, on May 26, 2019 $ yarn add ex ...
- Angular Learning Paths
Angular Learning Paths Angular Expert refs https://app.pluralsight.com/search/?q=angular xgqfrms 201 ...
- console.log & front-end jobs
console.log & front-end jobs bind & function let log = console.log; let obj = {}; log(obj); ...