并行处理模型
- Process per DBMS Worker
- 使用一个进程处理一个请求
- 使用共享内存对全局数据进行共享,如buffer pool,不用将相同的page加载两次
- 单进程奔溃不会导致整个系统崩溃
- Process Pool
- 使用进程池来处理请求
- 对cpu缓存不友好
- 减少了创建销毁进程开销
- Thread per DBMS Worker
- 单进程多线程
- 线程崩溃导致进程崩溃
- 上下文切换开销很小
- 不需要管理共享内存
并行查询方式
Inter-Query:同时执行多个查询
Intra-Query:同时执行一个查询的多个operator,一般有三种,注意下main这三种不是互斥的,他们可以相互组合。
- Intra-Operator(Horizontal):将完整的操作拆分成多个平行的操作,也就是说把我们要处理的数据分成几段,并行处理,在DBMS中有一个特殊的exchange操作符,将数据分段,分别处理数据,然后最后将数据组合起来。exchange有三种类型:
- Gather:组合不同worker的数据合并成一个输出流传给上层操作符。
- Repartition:将不同worker的数据分成不同的流,如group by
- Distribute:将一个输入流转化成多个输出流
- Inter-Operator(Vertical):不同线程同一时间执行不同的operator.
- Bushy
- Intra-Operator(Horizontal):将完整的操作拆分成多个平行的操作,也就是说把我们要处理的数据分成几段,并行处理,在DBMS中有一个特殊的exchange操作符,将数据分段,分别处理数据,然后最后将数据组合起来。exchange有三种类型:
IO并行
- multi-disk 并行:使用多个冗余磁盘存储相同的数据
- database partitioning:将数据分成不相交的子集,分别存储在物理磁盘上单独管理
- 垂直分区:将数据按照列进行分区
- 水平分区:将数据按照行进行分区