Page 433 - 《软件学报》2025年第5期
P. 433

张志国 等: PLTree: 一个高性能持久化内存学习索引                                                   2333


                    此外, 可以发现在      4  个真实数据集上, APEX    的插入操作性能较传统结构索引            DPTree 和  NBTree 弱, 主要是
                 因为  APEX  面对真实数据集时叶节的冲突增加, APEX            在插入操作时需要进行额外的           PM  和缓存访问, 以检查键
                 在叶节点和    stash  中是否已经存在. 并且每次向       stash  插入数据时只写入     16 B  数据, 导致  16  倍的  PM  写放大. 而
                 DPTree 采用了分层的结构, 新插入的数据先写入            DRAM  驻留的缓冲树中, 之后再通过后台线程批量写入持久化
                 树中, 从而提高了写入性能. 对于范围查找, PLTree 在所有数据集上性能均优于其他索引, 在                        uniform  数据集上
                 PLTree 相对于  DPtree/APEX/uTree/FPTree 性能分别提高了  4.3  倍/3.5  倍/10.4  倍/5.8  倍. 这是因为  PLTree 相较于
                 B+树结构持久索引具有更大的叶节点, 范围查找时可以在连续的地址范围内顺序访问                            PM, 从而具有更高     PM  带
                 宽利用率. 而   DPTree 需要搜索多个树并组合结果, 影响了范围查找性能. uTree 的范围查找性能最低, 因为                      uTree
                 将每个记录都存储在链表节点中, 遍历它们会导致许多缓存未命中.

                 4.4   多线程测试
                    本节的实验测试了索引在不同负载上的多线程可扩展性, 实验中线程从                        1  个线程扩展到   28  个线程, 所有的线
                 程被固定在物理核心上运行, 每个线程独立使用一个物理核心.
                    图  7−图  10  展示了单个操作的并发性能, 包括        100%  的点查询/插入/范围查询/删除操作. 实验结果表明, 在不
                 同的负载下, PLTree 在所有的数据集上都表现出了良好的多线程可扩展性, 随着线程数量增加, PLTree 的吞吐量
                 也相应地增加, 且增加的趋势呈现线性或近似线性. 在                4  个真实数据集上, PLTree 的单项操作负载的并发性能均
                 优于其他索引, 这是因为: 首先, PLTree 通过拟合数据集的分布, 采用基于模型的搜索, 提高了                       CPU  缓存利用率;
                 其次, PLTree 采用轻量级并发控制, 减少了同步开销; 第三, PLTree 利用           DRAM  中的元数据来加速查找, 避免了不
                 必要的   PM  访问, 从而减少了有限的      PM  带宽争用, 保证了高性能; 最后, PLTree 采用了批量写入和追加写入的方
                 式将数据写入溢出缓存, 降低了           PM  的写放大, 提高了     PM  带宽的利用率. 另外与单线程实验的情况一样, 在
                 uniform  数据集上, PLTree 的点查询和删除操作并发性与         APEX  性能相近.
                        80            80            80           80           150              PLTree
                       吞吐量 (MOPS)  60  60           60           60           100              DPtree
                                                                                               APEX
                        40
                                                                 40
                                                    40
                                      40
                                                                               50
                                                                                               uTree
                        20
                                      20
                                                    20
                                                                 20
                                                                                               FPTree
                         0
                                                                                   10
                                                                                       20
                                20
                                                                      10
                                                                         20
                                                        10
                                                            20
                             10
                         0
                                           (b) face
                             (a) osm  30  0 0  10  20  30  0 0  (c) genome  30  0 0  (d) planet  30  0 0  (e) uniform  30  NBTree
                                   图 7 多线程点查询操作吞吐量, 横坐标为线程数, 纵坐标为吞吐量
                       40             40           50             30           50              PLTree
                       吞吐量 (MOPS)  30 0  30 0      40 0           20 0         40 0            DPtree
                                                   30
                                                                               30
                                                                                               APEX
                       20
                                      20
                                                   20
                                                                               20
                                                                  10
                                                                                               uTree
                       10
                                      10
                                                   10
                                                                               10
                                                                                               FPTree
                                                                                       20
                                                                          20
                                                                                    10
                                                                      10
                                                            20
                         0
                            10
                                                        10
                                20
                                           (b) face
                             (a) osm  30  0  10  20  30  0  (c) genome  30  0  (d) planet  30 0  (e) uniform  30  NBTree
                                    图 8 多线程插入操作吞吐量, 横坐标为线程数, 纵坐标为吞吐量

                        15            10                          15           30              PLTree
                       吞吐量 (MOPS)  10 5  5          10 5          10 5         20              DPtree
                                                                                               APEX
                                                                               10
                                                                                               uTree
                                                                                               FPTree
                                                                                0
                        0
                                                                                    10
                                                                                        20
                         0
                                20
                             10
                                                        10
                                                                      10
                                                                          20
                                                            20
                             (a) osm  30  0 0  10  20  30  0 0  (c) genome  30  0 0  (d) planet  30 0  (e) uniform  30
                                           (b) face
                                  图 9 多线程范围查询操作吞吐量, 横坐标为线程数, 纵坐标为吞吐量

                    图  11−图  13  展示了混合负载的并发性能. 实验结果表明, 混合负载测试中, PLTree 在所有的数据集上展现
                 了最佳的性能和可扩展性. 随着负载中插入操作比例的增加, 其他的索引的扩展性变差, 而                             PLTree 仍然保持最
   428   429   430   431   432   433   434   435   436   437   438