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

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



                                                       PLTree-ff  3  PLTree    50
                      吞吐量 (MOPS)  4 3 2 1 0  100 0           2 1 0             40 0
                       5
                                         150
                                                                               30
                                                                               20
                                          50
                                                                               10
                         osm
                            face
                                                                                  osm
                                                                                      face
                                             osm
                                                 face
                                                                         planet
                                                        planet
                                                                                            planet
                                   planet
                                genome
                                                                                         genome
                                                    genome
                          (a) 查找操作 (1 线程) uniform  (b) 查找操作 (28 线程) uniform osm  face  genome  uniform  (d) 插入操作 (28 线程) uniform
                                                                (c) 插入操作 (1 线程)
                               图 18 对比不同溢出缓存设计在不同数据集上查找操作和插入操作的吞吐量


                 4.7   空间开销测试
                    在本节中我们首先对比了两个持久化学习索引                 PLTree 和  APEX  分别在合成数据集和真实数据集上写入           2  亿
                 个键值对后的     DRAM  和  PM  的空间开销, 实验结果显示在合成数据集上             PLTree 的存储空间开销要比       APEX  低.
                 在真实数据集上      PLTree 的  DRAM  空间开销比  APEX  低, 但是  PM  空间开销要比   APEX  要高, 详见表   2.

                                              表 2 PLTree 和  APEX  存储开销  (GB)

                                  索引               uniform (DRAM/PM)         face (DRAM/PM)
                                 PLTree               0.495/4.391               0.859/8.934
                                 APEX                 0.571/5.379               1.544/5.494

                    为进一步探究      PLTree  中重复数据写入时存储空间的消耗情况, 我们在真实数据集                   face  上构建了一个包含
                 200M  个  (即  2  亿个) 键值对的索引, 并进行了不同比例的重复数据随机插入实验. 如表                3  所示, 我们分别向索引随
                 机插入原数据集中       10%  至  50%  的键重复的数据, 即分别对应了额外插入          20M/40M/60M/80M/100M  个重复键值
                 对. 表  3  的实验结果显示, 随着重复数据写入比例的增加, PLTree 在            PM  上的空间开销相对于原始状态分别增长
                 了约  4.17%、6.91%、9.33%、11.66%   和  13.95%, 而在  DRAM  中的空间开销也相应增加了约          3.51%、5.82%、
                 7.87%、9.85%  及  11.81%. 每增加  10%  的重复数据, PM  和  DRAM  空间开销的增量平均约为      2.45%  和  2.08%.


                                     表 3 不同比例重复数据写入         PLTree 时存储空间的消耗情况

                             存储空间开销增量            10%       20%       30%       40%       50%
                            PM空间开销增量 (%)         4.17      6.91      9.33     11.66      13.95
                           DRAM空间开销增量 (%)        3.51      5.82      7.87      9.85      11.81

                    以上实验结果表明, 在真实数据分布下, PLTree 牺牲了一定的空间存储空间以换取更高的读写性能, 本文提
                 出的索引设计方案能够一定程度上减轻由于冗余数据导致的空间开销增大问题.

                 4.8   索引信息统计分析
                    本节首先分析了加载        1  亿条数据时, PLTree 和  APEX  在不同数据集上的索引高度和叶节点数, 结果如表               4  所
                 示. PLTree 在大部分数据集上能够构建较少的叶节点, 并且是一棵平衡树, 索引的最大最小高度相同. APEX                           是一
                 颗非平衡树, 在难以拟合的局部键空间可能需要构建更长的遍历路径, 因此查询性能更易受数据分布的影响.


                             表 4 PLTree 和  APEX  索引高度和叶节点数统计        (最小高度/最大高度/叶节点数)

                             索引         osm          face      genome       planet     uniform
                            PLTree    4/4/77 941  3/3/126 140  3/3/21 007  4/4/51 814  3/3/683
                             APEX     2/6/80 524  2/6/113 839  2/6/22 485  2/4/59 713  3/4/16 384

                    表  5  展示了在索引加载     1  亿个数据时, 不同数据集上       block  总数、溢出缓存总数以及其占        block  总数的比例,
                 结果显示在    osm/face/genome/planet/uniform  上溢出缓存占比分别  11.87%/12.22%/16.64%/11.83%/0.001 3‰. 这表
                 明溢出缓存的数量与数据的分布特点有关, 分布越均匀, 溢出缓存的数据量越少. 在此基础上, 我们进一步统计了
   432   433   434   435   436   437   438   439   440   441   442