Page 364 - 《软件学报》2026年第5期
P. 364

陈迪 等: 大图数据的统一查询处理机制                                                             2243


                                                               O(N V ·logN V ); 第二, 执行图划分算法  (算法  1), 每个顶
                 在图划分前需对图中所有顶点按照度值进行排序, 复杂度为
                                                                        O(N V + N E ); 第三, 执行中心索引构建算法
                 点在   ε 步广度优先遍历中最多访问一个邻域, 其复杂度在最坏情况下为
                 (算法  2), 对所有顶点进行局部遍历以生成中心索引图, 最坏情况下每个顶点都需访问整个图, 则其复杂度最多为
                 O(N V ·(N V + N E )); 第四, 临界顶点集合的提取与处理时间复杂度可视为        O(N V ) 因其最多只需遍历所有顶点一次; 第
                 五, 倒排标签索引的构建为线性扫描过程, 时间复杂度为                 O(N V ). 综上, 构建统一索引的总体时间复杂度为:          O(N V ·
                 logN V + N V + N E + N V ·(N V + N E )), 即最终简化为:  O(N V ·(N V + N E )).
                    统一索引的空间复杂度主要由存储中心索引图、临界顶点集合以及倒排标签索引这                              3  部分构成. 第一, 中心
                                                                      2
                 索引图在最坏情况下需存储所有顶点之间的连边, 空间复杂度为                     O(N ); 第二, 临界顶点集合通过对每个顶点打标
                                                                      V
                 记存储, 消耗   O(N V ) 的空间; 第三, 倒排标签索引存储时需要记录每个标签对应的划分区域, 以及划分区域中对应
                 的顶点, 同样需遍历所有顶点及其标签, 整体空间复杂度为                     O(N V ). 综上, 构建统一索引的总空间复杂度为
                    2
                 O(N + N V ).
                    V
                    需要指出的是, 在实际应用中, 图数据通常是稀疏的, 中心顶点集合远小于总体顶点数, 实际的时间和空间开
                 销远低于上述最坏情况.
                  4   查询算法

                    本节将分别介绍基于统一索引设计的可达、最短路径、关键字和图匹配这                          4  种查询处理算法.
                  4.1   可达查询算法
                    根据上述划分算法可知, 图         G  中任意顶点   u, 在广度优先遍历     2ε 步后, 至少会访问到一个中心顶点. 因此, 当
                 给定数据图    G  和图中的两顶点     u, v 后, 可达查询算法的主要思想是: 先判断顶点           u  和顶点  v 是否在同一划分区域,
                 若在同一划分区域, 则由顶点         u  广度优先遍历    ε 步, 若访问到顶点    v 则直接返回可达, 否则直接返回不可达; 若不
                 在同一划分区域, 则由顶点        u  前向遍历  2ε 步并记录下访问到的中心顶点并构成集合               U , 再由顶点   v 反向遍历   2ε
                                                                                    ∗
                                                                                       ∗
                                                   ∗                           ∗      V  中是否存在可达的顶
                 步并记录下访问到的中心顶点并构成集合               V , 最终通过中心索引来查询集合          U  和集合
                 点对, 从而返回最终结果.
                    可达查询算法      RQUI (reachability query on unified index) 的流程如算法  2  所示, 第  1  行将存放中心顶点的集合
                  ∗  V  初始化. 第      行讨论当顶点      和顶点   v 在同一划分区域的情况. 第            行从顶点     开始广度优先遍历
                       ∗
                 U  和           2–9            u                             3–7        u
                 2ε. 第  4  行若访问到顶点  v 返回  true, 否则返回  false. 第  10  行记录下由顶点  u  前向遍历  2ε 步内访问到的中心顶点.
                 第  11  行记录下顶点   v 反向遍历   2ε 步内访问到的中心顶点. 第       12–18  行用于查找集合    U  和集合  V  中是否存在可
                                                                                     ∗
                                                                                            ∗
                 达的一对顶点, 若存在则返回         true, 否则返回  false.
                 算法  2. 可达查询算法    RQUI.
                 输入: 图  G, 顶点  u, 顶点  v, 中心索引图  G CI ;
                 输出: 顶点  u 是否可达顶点     v.

                 1.  U ← ∅, V ← ∅;
                           ∗
                    ∗
                 2. IF u, v in the same partition THEN
                 3.   FOR each w that u visits in 2ε steps DO
                 4.     IF w == v THEN
                 5.       RETURN true;
                 6.     END IF
                 7.   END FOR
                 8.   RETURN false;
                 9. END IF
                 10.  U  ← center vertices that u visits in 2ε forward BFS;
                     ∗
   359   360   361   362   363   364   365   366   367   368   369