针对现有学习索引难以随数据变化而动态调整的问题,提出了一种面向动态不均匀空间数据的学习索引结构(LIDUSA)。针对稀疏区域KNN查询性能较差的问题,LIDUSA可以通过合并和拆分相应的网格单元来动态调整数据布局,并重新学习该区域的映射函数,使存储在相邻稀疏网格单元中的数据点也存储在相邻磁盘页面中。它结合了树形索引可以动态调整的优点和学习索引的优点。在本文中,在真实数据集和合成数据集上进行了大量的实验。从实验结果可以看出,在KNN查询场景下,LIDUSA索引的速度是现有索引的两倍,这将大大扩展学习索引的适用范围。
背景:
随着数据量的增长和空间数据集维数的增加,树型索引的存储开销越来越大,甚至超过了索引所需数据的大小。
方法:
本文提出了一种面向动态非均匀空间数据的学习索引结构(简称LIDUSA)。当一个网格是稀疏的,它应该合并到相邻的网格单元。然后,系统需要重新计算合并网格单元中数据点的一维表示,调整这些点的存储位置,使空间上相邻的数据也存储在相邻的页面上。由于稀疏网格单元中的点数量较少,因此数据调整开销也较小。然后,通过动态插入和删除数据点,LIDUSA可以自动调整网格单元,以保证较低的IO成本。
Architecture
在LIDUSA中,记录的信息分为三部分。第一部分是网格单元(如图2左上角所示),包括网格单元的范围、每个网格单元内的点数以及自上次调整以来每个网格单元内插入或删除的点数。利用这些信息,可以获得相应的网格单元进行距离查询或KNN查询,并对网格单元进行自动调整。第二部分是数据点的原始多维坐标与一维表示的映射函数(如图2右上方所示),通过该函数可以对映射后的一维表示进行数据点排序。因此,根据可以存储在一个页面中的数据点的数量,网格单元格中的数据点被有序地存储在一系列页面中。也就是说,通过这个函数和输入的多维坐标,可以很容易地找到对应的页面。为了提高映射函数的精度,一般采用分段函数,其中与一个块对应的点称为分段。第三部分存储段和相应页面之间的对应关系。为了降低查询成本,段的点紧密存储,即存储在连续的页面中。然后,我们可以使用链表存储段的页号,按升序存储。也就是说,由所有链表组成的数组就是第三部分(如图2下方所示)。