Page 222 - 《软件学报》2021年第10期
P. 222

3194                                 Journal of Software  软件学报 Vol.32, No.10, October 2021

                 统不断扫描事实表,将元组推入过滤器中,元组在 filter 中对维度表进行 join 操作,之后被推入聚合算子中.CJoin
                 流水线可同时进行多个查询,在扫描时通过对 tuple 进行标记,带有查询 id 的 tuple 被源源不断地推入 filter 中与
                 维度表进行连接,之后再推入聚合算子以生成一个多查询结果集,最后通过查询 id 得到查询所对应的元组.实验
                 中,CJoin 在高并发星型查询场景下,吞吐量比传统商业系统要领先一个数量级.但 Cjoin 的设计使其支持的查询
                 场景单一,可扩展性不高;并且对于设备内存要求较高,因为其维度表必须存储在内存中,否则事实表与维度表
                 的连接操作将大大拖慢整个系统.
                                                                                            Aggr
                                                                                           聚合算子
                          连续扫描
                        Continuous scan
                          事实表       预处理器       过滤器        过滤器        过滤器       分配器          Aggr
                         Fact table  Preprocessor  Filter  Filter    Filter   Distributor  聚合算子

                                   流水线管理器                                                   Aggr
                                     Pipeline
                                     manager                                               聚合算子
                                                    Fig.13   Cjoin pipeline
                                                图 13   Cjoin 查询流水线模型

                                       SELECT  ,A Aggr 1 ,..., Aggr k
                                       FROM  ,FD 1 d  ,...,D  n d
                                                              
                                             
                                                j
                                                                j
                                       WHERE  1≤≤    nF   D  1 d   AND 1≤ ≤    n   j c  (D  j d  ) AND   co F
                                                                                ( )
                                       GROUP BY B
                                                   Fig.14  Star query mode
                                                    图 14   星型查询模式
                    2010 年,Subi 利用各种多查询共享技术,设计了一个以数据为中心的多查询原型数据库系统,名为
                 Datapath [21] .在 DataPath 中,查询不请求数据,取而代之的是:系统自动地将数据推送到 CPU 中进行计算,一旦到
                 达该相应的位置,所有可以使用数据的运算符都将对它们进行所需的计算,而 DataPath 中的共享机会在于将多
                 个相似的运算符合并,并在数据被推入运算符时达到共享计算的目的.Datapath 把全局查询计划中的每个运算
                 符视为一个 waypoint,新来的查询被拆分为若干运算符,这些运算符要么与相同的 waypoint 合并,要么被创建为
                 新的 waypoint 并加入到全局查询计划中.系统每隔一段时间就将数据 push 至各 waypoint 中.
                    Datapath 主要围绕两个问题进行研究:路径网络和调度策略.Subi 等人设计的显示调度策略如下:调度程序
                 为单线程,主要对 work queue 进行操作.当 I/O 子系统或 waypoint 产生一个块时,该块和任何相关的元数据将被
                 放入 work queue 中.调度程序不断监视 work queue 中块的进出.从 work queue 中提取块时,调度程序有两个选项:
                 (1)  系统可能没有足够的 CPU 资源来处理该块,因此必须丢弃该块;(2)  调度程序可以将块提供给相关的
                 waypoint.waypoint 本身在调度程序的线程上运行,并像调度程序一样,它们实际上不执行任何数据处理.取而代
                 之的是:一个 waypoint 将数据块打包到一个工作单元中,该工作单元既包含数据块,也需要处理该数据块所需的
                 任何其他状态信息,包括代码和元数据.工作单元构造完成后,调度程序将工作单元发送到工作线程,由该线程
                 执行工作单元.调度程序通常为每个 CPU 内核维护一个工作线程.Subi 等人设计的路径网络优化策略如下:路径
                 网络优化器类似于传统的基于成本的查询优化器;系统将现有的路径网络作为输入,然后以数据移动代价尽可
                 能小的方式将新查询应用到路径网络中;他们将路径网络优化视为基于成本的搜索问题,对于一个 waypoint(w)
                 来说,设 t(w)为该 waypoint 所对应的算子需要执行的所有元组;路径网络 P 的成本定义为                        tw
                                                                                             () .Subi 等人
                                                                                          WP
                 目前使用 A*style 搜索  [19] 来实现将新查询集成到路径网络中的过程.
                    到目前为止,Datapath 的研究进展并不是很乐观,最大的原因是:当查询并发量非常大时,waypoint 的管理和
                 维护成本也变得非常高,新来的查询往往无法与原本的 waypoint 进行合并,从而达不到共享的效果.对此,
   217   218   219   220   221   222   223   224   225   226   227