Page 14 - 《软件学报》2026年第2期
P. 14

刘佳伟 等: LA-tree: 查询感知的自适应学习型多维索引                                                  493


                  3.2   多层节点划分维度选择
                    LA-tree 具有多层的空间划分多叉树结构, 因此单节点划分维度选择仅能解决                     LA-tree 查询感知数据划分的一

                 个子问题. 现在分析以评分函数         OPRS T,Q,N k (a) 为目标的全树节点划分维度选择问题.
                    ● 全树节点划分维度选择是          NP  难问题. 为方便讨论, 不妨将      LA-tree 看作一棵满多叉树, 且树高为        h+1 (含
                 叶子节点), 分叉数为     b. 首先, 讨论  N k  为最底层中间节点的情况, 这是一个典型的单节点扫描比优化问题, 故需要
                                          0  1                                       h−2  h−1  种维度组合, 则最
                 枚举索引可能的维度组合共计           b |A|  种. 现在, 假设已枚举完成    h−1 层子树, 即枚举了     b  |A|
                                                                             h
                 上面一层的根节点       N 1  枚举其划分维度   a N 1  ∈ A. 带来整个问题共计枚举   b h−1 |A|  种维度组合. 至此发现多层次节点
                 划分维度选择是      NP  难问题, 可归约其简化问题       (令  b = 2, 是否存在一棵  LA-tree, 使  Q 在其上总扫描比为    1) 至精
                 确覆盖问题加以证明, 参考        Hyafil 等人  [9] 研究最小决策树的思路.
                    结合公式     (5), 注意到任意节点     N k  上, 数据子集  T N k   被不同节点维度  a N k   等分为 b    份, 产生的数据表子集
                      {                              }
                         c−1        a N k     c
                 T N k ,c = t l |  < CDF(T  ) ⩽ ,t l ∈ T N k  ,c ∈ {1,2,...,b}  有很大差异. 随节点深度增加, 数据子集大小   T N k
                          b         N k  = v t l ,a N k  b
                 关于  b 指数级下降, 因而浅层节点维度的选择对整棵              LA-tree 优化效果的影响比深处节点更大, 这意味着对于每个
                 节点, 其维度选择导致产生不同子问题本身的优化, 比子问题的优化更加重要. 因此, 可将全局优化自顶向下地拆
                 解为局部优化.

                    ● 多级搜索贪心算法. 将优化分数                  (a) 的计算推广到多层节点, 并设置一个参数级数             w, 将高度为   h
                                               OPRS T,Q,N k
                 的树构造问题按每级高度为          w 分段. 段内搜索: 即每高度      w 的子树, 枚举其中每个节点维度, 以从该子树最后一层
                 节点自下而上计算的优化比为目标. 段间贪心: 不同段的子树忽略后效性, 在上层段所有节点确定划分维度后, 独
                 立地搜索下层段各节点划分维度.
                    分析该算法, 贪心算法本身就可以得到相当优的解, 因为查询负载感知选择维度优化划分数据的过程类似剪
                 枝, 越浅层节点, 对应越大的数据子集, 对其优化越能提高索引筛选效果. 而多级搜索则进一步考虑了后效性的影
                 响, 令全树节点维度选择更接近最优解. LA-tree 离线索引构建见算法                1.

                 算法  1. LA-tree 离线索引构建: latree-offline(  T N k ,  Q N k     ht 0 ht).
                                                           ,
                 输入: 数据表子集     T N k  , 查询负载训练集子集   Q N k  , 本级枚举起始高度   ht 0 , 当前高度  ht;
                 输出: LA-tree 已构建节点   N k .
                 1. if  ht = h then //叶子节点直接决定节点维度构建
                 2.  Choose    where    has smallest  sel on  T  a
                          a N k
                                  Q N k
                                                    N k
                 3.   N k ← Leaf node on   T N k
                                                                  ) 为目标
                 4. else //中间节点   w 步枚举节点维度, 以最小化              (a N k
                                                     OPRS T N k  ,Q N k  ,N k
                 5.  if  ht 0 ⩽ ht then //节点尚未确定, 处于维度选择过程中
                 6.   if   ht = ht 0 +w−1 then //   N k  是本级  w 层枚举的最后一层
                 7.    Choose    with smallest          )
                              a N k
                                           OPRS T N k
                                                 ,Q N k  ,N k (a N k
                 8.   else //本级   w 层枚举的中间层, 每个   a N k   都选择最优子问题以最小化                 )
                                                                                ,Q N k  ,N k  (a N k
                                                                          OPRS T N k
                 9.     for c from 1 to b do
                                                                                  ,
                                                                           ,
                 10.    Choose     with smallest          ) by latree-offline( T N k ,c Q N k ,c ht 0 ht +1)

                                a N k
                                             OPRS T N k
                                                   ,Q N k  ,N k  (a N k
                 11.   end for
                 12.    end if
                 13.    Try partition  T N k  and divide  Q N k   by   a N k
                 14.    Try  N k ← Middle node on  T  a N k
                                           N k
                 15.    if  ht = ht 0  then //本级枚举完成, 枚举的根节点确定当前构建的子树
   9   10   11   12   13   14   15   16   17   18   19