CMU-cs445:查询执行

并行处理模型

  • 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

IO并行

  • multi-disk 并行:使用多个冗余磁盘存储相同的数据
  • database partitioning:将数据分成不相交的子集,分别存储在物理磁盘上单独管理
    • 垂直分区:将数据按照列进行分区
    • 水平分区:将数据按照行进行分区