CMU Database Systems - Parallel Execution

并发执行,主要为了增大吞吐,下降延迟,提升数据库的可用性数据库

 

先区分一组概念,parallel和distributed的区别架构

总的来讲,parallel是指在物理上很近的节点,好比本机的多个线程或进程,不用考虑通讯代价
distributed,要充分的考虑通讯代价,failover的问题,更为复杂并发

 

Process Model

先解释一下概念,高并发

process model,指数据库系统架构设计,用于支持多用户的并发请求线程

worker,用于执行客户端tasks的DBMS组件架构设计

 

一般的process model有3种,设计

Process Per Worker,每一个worker都是一个系统进程,3d

进程最大优势,隔离好,不会由于一个worker影响整个库,但问题确定是过重,比较低效,支持不了高并发
早期的数据库每每采用这个方案,是由于那个时候线程的方案还不成熟blog

Process Pool,这个方案和上面的没有本质不一样,只是worker从只用一个进程,到使用一个进程pool
Pool的好处,一个worker能够同时相应多个请求,并且一个进程hang住了,不会影响worker工做进程

坏处,一个client的连续的请求会分配到不一样的进程,那么CPU cache locality上就不是很好

 

Thread Per Worker

这个是当前主流的process model, 

一个数据库实例是一个进程,worker经过线程实现,这样由DBMS本身进行线程调度

线程模型明显更加轻量,更容易应对高并发的场景,并且线程间通讯的成本很低

最大的问题是隔离性很差,一个线程可能把整个库搞挂

 

Parallel Execution

并行有两种,

不一样的query,并行的执行

一条query中不一样的operation并行的执行

 

Inter-query,很容易理解,要解决的也就是并发控制问题,这个后面会讲

这里重点说下Intra-query,它也是包含两种类型,

首先是Intra-operator,水平并行,MPP
把数据水平分红多份,分别执行,有个Exchange,相似latch,等待全部分片都执行完,作相应的merge而后再往上发送

 

 而后是,Inter-operator,DAG方式,pipeline,streaming process

 

 

I/O PARALLELISM

前面光说了,平行处理,可是数据库的瓶颈大部分在磁盘IO

因此若是要并行计算,关键是数据要能划分开,并行的读取

一些比较简单的方法以下,

人为的分多块盘,或是用raid0,raid1

 

可是若是要在表级别作划分,就须要更为复杂的方法,对数据作partition

划分又分为两种,

垂直划分,列存

水平划分,sharding

相关文章
相关标签/搜索