CN117131050B - 面向工作负载和查询敏感性的基于磁盘的空间索引方法 - Google Patents
面向工作负载和查询敏感性的基于磁盘的空间索引方法 Download PDFInfo
- Publication number
- CN117131050B CN117131050B CN202311092647.7A CN202311092647A CN117131050B CN 117131050 B CN117131050 B CN 117131050B CN 202311092647 A CN202311092647 A CN 202311092647A CN 117131050 B CN117131050 B CN 117131050B
- Authority
- CN
- China
- Prior art keywords
- node
- data
- nodes
- index
- split
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
- 238000000034 method Methods 0.000 title claims abstract description 52
- 230000035945 sensitivity Effects 0.000 title claims abstract description 7
- 238000001514 detection method Methods 0.000 claims abstract description 3
- 238000011068 loading method Methods 0.000 claims description 13
- 238000003780 insertion Methods 0.000 claims description 11
- 230000037431 insertion Effects 0.000 claims description 11
- 239000013598 vector Substances 0.000 claims description 10
- 238000004590 computer program Methods 0.000 claims description 8
- 238000012554 master batch record Methods 0.000 claims description 7
- 238000012545 processing Methods 0.000 claims description 5
- 238000003860 storage Methods 0.000 claims description 3
- 238000013500 data storage Methods 0.000 abstract description 3
- 239000002699 waste material Substances 0.000 abstract description 3
- 238000004422 calculation algorithm Methods 0.000 description 9
- 230000008569 process Effects 0.000 description 9
- 230000008521 reorganization Effects 0.000 description 9
- 238000005192 partition Methods 0.000 description 6
- 230000015556 catabolic process Effects 0.000 description 5
- 238000006731 degradation reaction Methods 0.000 description 5
- 238000012423 maintenance Methods 0.000 description 5
- 238000013459 approach Methods 0.000 description 4
- 238000000638 solvent extraction Methods 0.000 description 4
- 238000012217 deletion Methods 0.000 description 3
- 230000037430 deletion Effects 0.000 description 3
- 230000008901 benefit Effects 0.000 description 2
- 230000007246 mechanism Effects 0.000 description 2
- 230000011218 segmentation Effects 0.000 description 2
- 230000003044 adaptive effect Effects 0.000 description 1
- 238000004364 calculation method Methods 0.000 description 1
- 230000006835 compression Effects 0.000 description 1
- 238000007906 compression Methods 0.000 description 1
- 238000005520 cutting process Methods 0.000 description 1
- 230000008531 maintenance mechanism Effects 0.000 description 1
- 238000007726 management method Methods 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000012544 monitoring process Methods 0.000 description 1
- 238000005457 optimization Methods 0.000 description 1
- 230000008520 organization Effects 0.000 description 1
- 230000008447 perception Effects 0.000 description 1
- 230000000644 propagated effect Effects 0.000 description 1
- 230000001902 propagating effect Effects 0.000 description 1
- 230000008707 rearrangement Effects 0.000 description 1
- 230000003068 static effect Effects 0.000 description 1
- 238000009827 uniform distribution Methods 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/22—Indexing; Data structures therefor; Storage structures
- G06F16/2228—Indexing structures
- G06F16/2246—Trees, e.g. B+trees
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/22—Indexing; Data structures therefor; Storage structures
- G06F16/2228—Indexing structures
- G06F16/2272—Management thereof
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Data Mining & Analysis (AREA)
- Databases & Information Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开了一种面向工作负载和查询敏感性的基于磁盘的空间索引方法。本方法为:1)针对具有N个数据点的空间数据库,创建一个数据节点n0以及一个指向n0的根节点r1;将该N数据点存储到节点n0中,如果n0中的数据点数量超过设定阈值C,则对n0进行分裂;2)将r1作为索引结构的根节点,从索引结构的根节点开始,对索引结构中的每一层索引节点进行扇出检测;其中对于第h层索引节点rh,检查rh的扇出是否超过设定阈值F,如果超过F,则使用s1将rh分裂为索引节点和并生成第h+1层索引节点rh+1,直至所有索引节点的扇出均不超过F。本发明可以较少磁盘空间的浪费,提高数据存储的效率。
Description
技术领域
本发明属于计算机软件技术领域,涉及一种面向工作负载和查询敏感性的基于磁盘的空间索引方法。
背景技术
空间数据库管理大量带有位置信息的数据集(如智能手机用户的GPS坐标,船只和飞机坐标)。由于数据量巨大,以及多维空间中没有自然排序,对满足空间谓词的对象线性搜索(如城市中心的移动用户,离机场最近的飞机)是很困难的。因此,需要空间索引来有效的检索信息。空间索引通常是树结构的,可以分割空间,也可以分割数据对象。最深的树层由数据节点组成,其余包括根节点由目录组成。每个节点都与一个空间范围相关联(如二维空间中的最小边界矩形),该范围覆盖其所有子节点和对象。每个节点的子节点的最大数量由磁盘页面大小决定。
空间索引通常是树结构,其中每个叶节点(也称数据节点)存储数据对象的点或最小边界矩形(MBR)以及指向相应记录的指针,每个内部节点(也称目录)存储指向其范围内的子节点的指针。他们根据驻留的存储类型进行分类。主内存索引(KD-Trees、2-Level、CR-Trees、Block等)完全存储在RAM中。它们是敏捷的,适合相对小规模的应用。另一方面,辅助内存索引(KDB-Trees、R-Tree等)主要驻留在磁盘上,通过访问的节点(即目录)保存在主内存中,以便快速跟踪指针。基于磁盘的索引优先最小化I/O成本(即磁盘页面的访问次数)。节点具有最大容量C,受磁盘页面的大小限制。通常,也有一个最小容量,以便在索引大小和查询性能上有保证。本发明的重点是基于磁盘的2D数据点的空间索引,因为它们无处不在,通常被用于捕获移动用户、汽车、船舶轨迹等,它们庞大的数据量需要基于磁盘索引。
假设数据是提前给出的,批量加载将索引条目打包成页面,然后用于构建紧凑的索引。针对空间数据,目前已经提出了各种批量装载方法。动态数据(例如,移动对象)需要高效的插入和删除算法。空间索引中的更新可能是昂贵的,因为节点溢出可能导致树的广泛重组。因此,动态索引伴随着在运行中重新排列树结构的构建算法,目的是优化索引,同时最小化更新成本。根据批量加载或更新算法的不同,空间索引被分为空间分区或数据分区。空间划分方案在每个树层生成不相交的矩形节点,覆盖整个空间。最简单的方法是网格,它们将空间分解为大小相等、轴线平行的单元。在实践中,更复杂的称此结构(KDB-Trees、Quad-Tree、等)具有更好的查询性能。这些递归的划分空间,直到每个页面在其最小和最大容量这几件有一定数量的对象。另一方面,数据分区索引(R-Tree家族等)在每个树级别上产生可能重叠的节点,其目的是最小化节点内部的节点之间的重叠、周长和死区(即空白区域)等措施。节点范围由MBR表示。
空间索引(例R树)可以实现快速查询处理,但它们对于高度动态的数据集的效果很差,由于树结构的广泛重组,更新可能变得更昂贵。
发明内容
针对现有技术中存在的问题,本发明的目的在于提供一种面向工作负载和查询敏感性的基于磁盘的空间索引方法。
本发明引入了一种查询感知的节点重新组织机制,通过监控查询和更新操作的比例来决定节点的重新组织时机。在高查询比例的情况下,系统会及时对节点进行重新组织,以保持低查询成本。而在高更新比例的情况下,系统会优先考虑更新操作,从而避免频繁的节点重新组织。这种机制有效平衡了查询和更新操作的性能需求,提高了系统的整体性能。
本发明提出了一种动态更新算法,用于创建非重叠节点。在数据更新过程中,传统方法容易导致节点重叠和频繁的节点调整,从而影响查询性能。而通过本专利提出的动态更新算法,系统能够在保持节点不重叠的前提下进行数据更新,有效减少了节点重叠带来的影响,提高了数据更新的效率和索引的稳定性。
本发明引入了一种新颖的批量加载方法,专注于保证对静态数据的最佳磁盘页面利用率,并强调创建方形节点。通过优化数据节点的布局和组织方式,该方法能够减少磁盘空间的浪费,提高数据存储的效率。
本发明提出了一种基于磁盘的框架,具有全自适应的特性,能够适应所有空间索引的目的。这一全自适应的特性将空间索引的灵活性和性能大程度的提高,为空间数据的高效管理和查询提供了全新的解决方案。
一种面向工作负载和查询敏感性的基于磁盘的空间索引方法,其步骤包括:
1)针对具有N个数据点的空间数据库,创建一个数据节点n0以及一个指向n0的根节点r1;将该N数据点存储到该数据节点n0中,如果n0中的数据点数量超过设定阈值C,则对n0进行分裂;对n0进行分裂方法为:将n0中的条目在n0节点的主要维度上进行排序,将在n0节点的主要维度上排名为的条目作为分裂点s1,在分裂点s1位置生成两子节点/>和然后将排序列表中s1之前的条目被插入到新节点/>中,其余记录插入到/>中;然后计算和/>的MBR,并将/>的MBR及指向/>的指针、/>的MBR及指向/>的指针、指向s1的指针一起插入到r1中,同时删除n0;如果/>或/>中的数据点数量超过设定阈值C,则对存储数据点数量超过C的节点继续进行分裂,直到所有数据节点最多包含C个数据点,并将指向每次分裂所得数据节点的指针、各数据节点的MBR以及分裂点位置保存到根节点r1中;其中根据数据节点的最小边界矩形MBR获得对应数据节点的主要维度;每一节点维护一分裂向量,用于按时间顺序维护生成该节点的分裂位置;
2)将根节点r1作为索引结构的根节点,从索引结构的根节点开始,对索引结构中的每一层索引节点进行扇出检测;其中对于第h层索引节点rh,检查rh的扇出是否超过设定阈值F,如果超过F,则使用第一次分裂点位置s1将rh分裂为两个索引节点和/>并生成第h+1层索引节点rh+1,将rh内除s1外的其他内容存储到/>和/>中,rh+1内存储指向/>及其MBR的指针,将s1插入到rh+1的分裂向量/>中;当所有索引节点的扇出均不超过设定阈值F,得到该空间数据库对应的索引结构。
进一步的,当在该空间数据库中插入一数据点p时,执行执行步骤21)~23):
21)从所述索引结构的根节点r1开始,执行深度优先遍历,寻找可插入数据点p的数据节点如果将该数据点p插入到/>中不导致页面溢出,则完成插入,否则进行步骤22);
22)在的主要维度的中位数作为分裂点si上分裂/>得到两子节点/>和/>并删除/>将两个新的数据节点/>和/>添加到根节点r1,将分裂点si添加到r1对应的分裂向量然后检查n1是否溢出,如果溢出则进行步骤23);
23)从中检索第一个分裂点s1,并利用分裂点s1将r1分割成两个新的索引节点。
进一步的,当在该空间数据库中删除一数据点p时,查询所述索引结构返回覆盖要删除的点p的数据节点扫描数据节点/>并删除该数据点p;令r1为/>的父节点,当r1变为空时,删除r1并向上传播此操作。
进一步的,对于每个索引节点r,为每个索引节点r维护一读取计数器(Rr)和一写入计数器(Wr);计算该索引节点r包含的数据节点数与最优数目之间的差异fat(r),以及容忍度当fat(r)超过tolerance(r)时,则对该索引节点r下的数据进行步骤1)的处理,即执行批量加载。
进一步的,所述差异其中,Pr表示索引节点r下的数据节点数,Nr表示索引节点r下的数据点数。
一种服务器,其特征在于,包括存储器和处理器,所述存储器存储计算机程序,所述计算机程序被配置为由所述处理器执行,所述计算机程序包括用于执行上述方法中各步骤的指令。
一种计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现上述方法的步骤。
本发明的优点如下:
本发明对空间索引的插入和查询做了负载均衡,可以灵活的适应不同场景下的性能需求,提高系统的性能。
本发明采用了一种动态更新的方法,在更新的时候可以保证节点不重叠,提高数据更新的效率和索引的稳定性。
本发明在对数据进行批量加载,可以较少磁盘空间的浪费,提高数据存储的效率。
附图说明
图1是本发明的方法流程图。
具体实施方式
下面结合附图对本发明进行进一步详细描述,所举实例只用于解释本发明,并非用于限定本发明的范围。
本发明设计了一个基于磁盘的空间索引,结合了空间分割和数据分割的概念,对索引的批量加载、插入、删除、维护、查询操作。批量加载和动态更新算法应用高效的基于排序的方案,生成不重叠的节点,具有出色的负载均衡,并且不会导致自顶向下的拆分传播,与数据分割索引一样,节点不必覆盖空白空间。每个目录节点的空间范围是一个MBR包含其所有子节点的索引范围。本方法涉及两个参数:数据容量C和目录扇出F,C是每个数据节点的最大数据点数,F是每个目录节点的最大指针数;本发明的方法流程如图1所示。
步骤一:批量加载
将具有N个数据点数据点集合进行批量加载,每一数据点为一条用户数据信息。让nh表示在第h层的一个溢出节点(h=0对应叶子层)。本方法中的分裂是垂直于分裂轴的,该分裂轴对应于节点nh的主要维度,即节点nh的MBR(最小边界矩形)最大伸展的维度。减少节点在主要维度上的周长可以得到更容易装填的类似于正方形的节点。Spread Split也为了同样的原因,将KDB-Tree的数据节点沿着主要维度进行分区,但由于它总是在中位数处划分,数据节点不一定能够完全装填。相反,本方法的分裂点对应于在排序后的坐标的主要维度上排名为的条目。这确保了至少有一个分裂产生的新数据节点中的条目数量是C的倍数。使用C的倍数的另一个好处是,当中位数不是其数据节点中的最后一个数据点时,分裂需要划分持有中位数的页面,从而增加了叶节点的总数。而本方法则确保了数据节点的数量保持稳定。
本方法中节点nh的主要维度直接通过其MBR获得,而Spread Split需要计算nh中所有点对之间的距离。此外,对于中间节点nh(h>0),包括Spread Split在内的中位数划分算法需要:(i)寻找nh中所有点的中位数,以及(ii)可能导致整个nh子树(nh节点及其后续子节点构成nh子树)重新组织的级联分裂。本方法则通过利用第一次分裂s1来消除这些问题。当有数据要存储到节点nh时,如果会导致nh溢出则将nh沿着其主要维度分裂,分裂位置s1选取在nh节点的主要维度上排名为的条目,以便所有后续的分裂和节点完全位于s1的两侧,分裂后产生的新数据节点用于存储当前数据。除了中位数搜索外,这种方法还通过在新节点下保留现有的nh子树来避免级联分裂。为了确定分裂s1以对nh进行划分,所有生成nh子节点的分裂都按时间顺序维护在nh中。对数据节点nh分裂产生的新数据节点为nh的子节点。
基于上述观察,本方法使用两步过程进行数据点的批量加载。第一步创建包含数据节点的最低级别,假设最初只有一个包含所有数据点的数据节点n0,以及一个指向n0的根节点r1。如果n0中的数据点数量超过设定阈值C则对n0进行分裂,为了对n0进行划分,我们对将n0中的条目(每一数据点为一个条目)在主要维度上进行排序,将在n0节点的主要维度上排名为的条目作为分裂点s1。在确定分裂点s1,排序列表中s1之前的数据点被插入到新节点/>中,其余的插入到/>中。然后计算/>和/>的MBR,并将它们和指向新节点以及s1(分裂轴和位置)的指针一起插入到r1中(即将/>的MBR及指向/>的指针、/>的MBR及指向的的指针、指向s1的指针一起插入到r1中),同时删除n0。如果/>或/>中的数据点超过C个,它们将再次进行分裂。该递归过程持续进行,直到所有数据节点最多包含C个数据点并能适合在一个磁盘页中。第一步以包含恰好C个数据点的/>个满节点结束。如果数据点数N不是C的倍数,则最后一个数据节点包含N%C个数据点。可能溢出的根节点r1存储:(i)指向所有数据节点的指针,(ii)它们的MBR,以及(iii)一个按时间顺序维护生成这些节点的分裂的向量/>(即/>以s1开始)。
第二步,多回合加载。从第1级开始,每一回合都将一个溢出的根节点分裂,以创建下一级的新根节点。设rh表示高度为h的目录节点(初始时,h=1)。每一回合的开始检查rh的扇出是否超过F,如果超过F,则使用中的第一个分裂点s1将rh分裂为两个新目录/>和/>除了叶子节点之外的节点均为目录。除了s1以外,rh的内容(即指向子节点和分裂的指针)将分布到/>和/>中,取决于它们位于s1的哪一侧。然后新的根节点rh+1存储指向/>和它们的MBR的指针;将分裂点信息传递其给父索引节点,从而/>中存储其子节点的分裂点信息,每一节点分裂向量中存储的信息,按时间顺序维护生成该节点的分裂位置,s1被插入到rh+1的分裂向量/>中,并将s1从/>中移除。如果/>和/>的扇出超过F,则它们将分别使用它们各自的第一次分裂(维护在/>和/>中)进行分裂。分裂后的节点将在rh+1中替换为新的目录。新目录的MBR是通过其子节点的MBR计算得出的。
目录分裂和填充rh+1将持续进行,直到在级别h上的所有目录的扇出不超过F。如果在循环结束时rh+1的扇出超过F,那么该过程将为rh+1重复执行。
对于给定的磁盘页面大小,最大扇出F比每个数据节点的最大数量C要小,因为除了指针,目录还存储分割向量和MBR(最小外包矩形),每个条目需要两个点(MBR对角线的两个顶点)。另一方面,如果目录保留在主内存中,任何F的值都是可应用的,包括F≥C。例如,如果我们设置所有由第一步创建的数据节点都可以容纳在根节点r1下,不需要在批量加载过程中进行第二步。在这种情况下,本方法将退化为一个非均匀网格。
步骤二:插入、删除处理
插入一个点p到索引涉及三个阶段:
阶段1:寻找可以插入点p的数据节点。从根节点开始,执行深度优先遍历,访问每一层寻找可以插入数据点p的数据节点。然而,在某些层级h上可能不存在适合插入数据点的节点(即这一层目录节点的MBR不包括p点),这意味着数据点p位于空白区域。但是每个存储在当前访问的目录rh+1中的子目录都与数据点p在同一侧。因此,我们通过计算这些区域的交集,得到一个覆盖数据点p的合适的MBR。接着,我们在该目录中找到子节点rh,并将其MBR扩展,以适应数据点p的插入,并继续向下遍历。由于所有节点都是通过分裂来形成并分隔的,因此总是存在一个唯一的节点,可以被扩展以容纳数据点p的插入,而不会与任何其他节点发生重叠。我们用表示在叶节点级别找到的数据节点。如果将数据点p插入到节点中不会导致溢出(即/>的容量≤C),则完成插入。否则,继续到第2阶段。考虑到可能在某些层级h上没有这样的节点,即p位于空白区域。但是,p在每个存储在nh+1(当前访问的目录)中的分裂的一侧,因此我们计算所有这些半空间的交集,并获得覆盖p的目录。接下来,找到在此目录中的子节点nh,将其扩展以适应该点,并继续向下遍历。由于所有节点都由分裂形成并分开,总是存在一个唯一的节点可以被扩展以适应数据点p的插入而不重叠任何其他节点。令/>为在叶节点级别找到的数据节点。如果将p插入到/>中不导致页面溢出(即/>),则完成插入。否则,继续到第2阶段。
阶段2:在的主要维度的中位数作为分裂点si上分裂/>得到两子节点/>和/>并删除/>并将两个新的数据节点添加到r1。将新的分裂点si添加到/>最后,检查r1是否溢出,如果是,则继续到第3阶段。
阶段3:从中检索第一个分裂s1,并用它来将r1分割成两个新的目录。根据它们在分裂的哪一侧,将r1的内容(除了s1)分发到新的目录中。用新的目录替换r1,并将s1添加到r2。如果将p插入到r2会产生溢出,则重复第3阶段对r2进行处理。
第一个分裂实现了一个分区,它是:(i)接近中位数,(ii)端对端地切割子空间,并且(iii)与子树中的零节点相交,消除级联分裂并简化子树分区。而R*-树涉及二次更新过程,本方法采用线性方法来找到保证零节点重叠的分区。
对于删除操作,点查询返回覆盖要删除的点p的数据节点扫描节点/>并删除p,可能会缩小其MBR或在节点为空时删除该节点。令r1为/>的父目录。当r1变为空时,它将被删除,当r1被删除后它的父目录也变空了其父目录节点将被删除,向上传播,直至被删除后节点的父目录不为空时停止向上传播操作。在传播过程中,如果p位于当前节点的MBR边缘上,则相应地收紧其区域。本方法不涉及显式的最小节点容量,因为下溢是通过下面描述的维护过程处理的。
步骤三:维护
在分裂或删除后,索引中的节点可能会有相对较少的子节点,导致存在大量半满节点。然而,对于输出较大的查询(例如范围查询),访问的数据节点数量与查询选择性成比例。例如,假设均匀分布,检索x%的点的范围查询预计将访问约x%的数据节点。相比之下,批量加载的四叉树应该比R-Boost慢得多,因为它的数据节点数量是R-Boost的2.5倍以上。尽管这类问题可以通过一些节点压缩技术解决,重新组织整个索引会耗费时间,并且在更新频繁的工作负载中可能是多余的。
出于这些观察的启发,本方法执行局部重新整理,旨在通过查询和更新在相应的数据空间部分中的比例来最小化数据节点的数量。
对于每个目录r(即索引节点r),我们使用(i)fat(r)来衡量r的退化程度,即r包含的数据节点数与最优数目之间的差异,以及(ii)tolerance(r)来定义基于更新/查询比例的退化程度的限制。Pr和Nr分别表示节点r下的数据节点数和数据点数。给定容量C,节点r下的最优数目为目录r的退化程度被计算为:
直观地说,如果目录有退化,意味着它包含比其子树中的条目所需的节点更多。本方法监视目录的退化程度,并为每个r维护读取计数器(Rr)和写入计数器(Wr),每当在该目录中执行读取或写入操作时,这两个计数器都会更新。容忍度计算为比例:
当fat(r)超过tolerance(r)时,目录r将被重新整理。重新整理涉及使用第一步的方法将子树中的所有数据点进行批量加载,以确保在子树的所有级别上都没有退化,同时恢复节点的类似正方形的形状。通过这种方式,频繁查询的目录及时重新整理以保持查询的低I/O成本。另一方面,与查询相比,相对于更新操作较多的目录提供了推迟重新整理的余地,从而实现更快的更新操作。
本方法也尝试了更复杂的公式,考虑操作的时间(近期操作被认为更重要)。然而,这些方法并没有显著提高性能,反而增加了额外的(空间/时间)复杂性。此外,尽管可以在所有级别上执行重新整理,但本方法将其限制在高度为1的级别,因为在较高级别上的维护会中和低级别的细粒度控制。因此,本方法的最低级别的目录会自动、独立地调整以适应其空间域中的任何工作负载。这使得本方法可以同时处理不同区域上的多种工作负载。
最后,维护机制隐含地区分了查询类型。例如,包含点查询和kNN(k最近邻)查询的工作负载,其中结果通常在1-2个数据节点中找到,会触发比包含范围查询的工作负载更少的重新整理操作,即使两个工作负载的查询/更新比率相同。这是因为每个范围查询很可能访问(并增加读取计数器)更多的数据节点,从而降低它们的容忍度。
步骤四:查询处理
与其他空间索引类似,范围查询和点查询使用深度优先遍历进行处理。具体而言,处理从根节点开始,并递归地访问与查询点或范围重叠的每个节点。当搜索到达数据节点时,相应的页面将被扫描,并将符合条件的点添加到输出。深度优先搜索也可以应用于其他空间查询,通过采用现有的基于最小边界矩形(MBR)的算法,这些算法主要针对R-Tree开发。例如,考虑空间连接查询:给定点集A和B,检索所有满a∈A,b∈B,且a和b之间距离小于等于d的点对(a,b)。假设A和B已经由本方法建立索引,可以通过并行遍历这两个索引,并递归地访问最小距离不超过d的节点对来检索符合条件的点对。这种优化措施最初是针对R-Tree提出的,同样适用于本方法。
最近邻查询采用最佳优先遍历。最大堆存储迄今为止检索的k个最近点,而最小堆维护待访问的节点。在这两种情况下,键值是查询位置与数据点(在最大堆中)或节点(在最小堆中)之间的距离。处理从根节点开始,将其所有子节点插入到最小堆中。最小堆的顶部节点(即与查询的最小距离)被访问,并且其内容也被插入到最小堆中。重复此过程,直到在某个数据节点中找到了与查询条件最匹配的前k个节点。第k个(最远的)候选最近点位于最大堆的顶部。在此步骤之后,仅访问最小距离低于当前第k个最近邻的节点。当最小堆顶部的键值超过第k个最近邻的距离时,搜索终止,因为未访问的节点不能包含更靠近查询的数据点。
类似的最佳优先遍历技术适用于其他相关查询,例如k个最接近对查询:给定点集A和B,检索k个满足a∈A,b∈B,且它们之间最小距离的点对(a,b)。假设A和B已由本方法建立索引,它们在顶部向下同步遍历,并根据它们之间的最小距离将节点对插入到最小堆中。候选点对被插入到最大堆中。搜索在最大堆的顶部(即第k个点对的距离)低于最小堆的顶部(即所有未访问的节点对之间的最小距离)时终止。其他基于最佳搜索的算法,最初是针对R-Tree提出的,可以很容易地适应本方法,包括基于Vorono的k最近邻查询,反向最近邻查询和天际线查询。
尽管为说明目的公开了本发明的具体实施例,其目的在于帮助理解本发明的内容并据以实施,本领域的技术人员可以理解:在不脱离本发明及所附的权利要求的精神和范围内,各种替换、变化和修改都是可能的。因此,本发明不应局限于最佳实施例所公开的内容,本发明要求保护的范围以权利要求书界定的范围为准。
Claims (3)
1.一种面向工作负载和查询敏感性的基于磁盘的空间索引方法,其步骤包括:
1)针对具有N个数据点的空间数据库,创建一个数据节点n0以及一个指向n0的根节点r1;将该N个数据点存储到该数据节点n0中,如果n0中的数据点数量超过设定阈值C,则对n0进行分裂;对n0进行分裂方法为:将n0中的条目在n0节点的主要维度上进行排序,将在n0节点的主要维度上排名为的条目作为分裂点s1,在分裂点s1位置生成两子节点/>和然后将排序列表中s1之前的条目被插入到新节点/>中,其余记录插入到/>中;然后计算和/>的MBR,并将/>的MBR及指向/>的指针、/>的MBR及指向/>的指针、指向s1的指针一起插入到r1中,同时删除n0;如果/>或/>中的数据点数量超过设定阈值C,则对存储数据点数量超过C的节点继续进行分裂,直到所有数据节点最多包含C个数据点,并将指向每次分裂所得数据节点的指针、各数据节点的MBR以及分裂点位置保存到根节点r1中;其中根据数据节点的最小边界矩形MBR获得对应数据节点的主要维度;每一节点维护一分裂向量,用于按时间顺序维护生成该节点的分裂位置;
2)将根节点r1作为索引结构的根节点,从索引结构的根节点开始,对索引结构中的每一层索引节点进行扇出检测;其中对于第h层索引节点rh,检查rh的扇出是否超过设定阈值F,如果超过F,则使用第一次分裂点位置s1将rh分裂为两个索引节点和/>并生成第h+1层索引节点rh+1,将rh内除s1外的其他内容存储到/>和/>中,rh+1内存储指向/>及其MBR的指针,将s1插入到rh+1的分裂向量/>中;如果所有索引节点的扇出均不超过设定阈值F,得到该空间数据库对应的索引结构;其中,在该空间数据库中删除一数据点p时,查询所述索引结构返回覆盖要删除的点p的数据节点/>扫描数据节点/>并删除该数据点p;令r1为/>的父节点,当r1变为空时,删除r1并向上传播此操作;在该空间数据库中插入一数据点p时,执行步骤21)~23):
21)从所述索引结构的根节点r1开始,执行深度优先遍历,寻找可插入数据点p的数据节点如果将该数据点p插入到/>中不导致页面溢出,则完成插入,否则进行步骤22);
22)在的主要维度的中位数作为分裂点si上分裂/>得到两子节点/>和/>并删除/>将两个新的数据节点/>和/>添加到根节点r1,将分裂点si添加到r1对应的分裂向量Sr1;然后检查r1是否溢出,如果溢出则进行步骤23);
23)从中检索第一个分裂点s1,并利用分裂点s1将r1分割成两个新的索引节点;
其中,对于每个索引节点r,为每个索引节点r维护一读取计数器(Rr)和一写入计数器(Wr);计算该索引节点r包含的数据节点数与最优数目之间的差异fat(r),以及容忍度 当fat(r)超过tolerance(r)时,则对该索引节点r下的数据进行步骤1)的处理,即执行批量加载;所述差异/>Pr表示索引节点r下的数据节点数,Nr表示索引节点r下的数据点数。
2.一种服务器,其特征在于,包括存储器和处理器,所述存储器存储计算机程序,所述计算机程序被配置为由所述处理器执行,所述计算机程序包括用于执行权利要求1所述方法中各步骤的指令。
3.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现权利要求1所述方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311092647.7A CN117131050B (zh) | 2023-08-28 | 2023-08-28 | 面向工作负载和查询敏感性的基于磁盘的空间索引方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311092647.7A CN117131050B (zh) | 2023-08-28 | 2023-08-28 | 面向工作负载和查询敏感性的基于磁盘的空间索引方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN117131050A CN117131050A (zh) | 2023-11-28 |
CN117131050B true CN117131050B (zh) | 2024-05-28 |
Family
ID=88859464
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202311092647.7A Active CN117131050B (zh) | 2023-08-28 | 2023-08-28 | 面向工作负载和查询敏感性的基于磁盘的空间索引方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN117131050B (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117785889A (zh) * | 2024-02-22 | 2024-03-29 | 支付宝(杭州)信息技术有限公司 | 一种针对图数据库的索引管理方法及相关设备 |
Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2007141809A1 (en) * | 2006-06-06 | 2007-12-13 | Haskolinn I Reykjavik | Data mining using an index tree created by recursive projection of data points on random lines |
CN105138560A (zh) * | 2015-07-23 | 2015-12-09 | 北京天耀宏图科技有限公司 | 基于多级空间索引技术的分布式空间矢量数据管理方法 |
CN106980673A (zh) * | 2017-03-27 | 2017-07-25 | 恒生电子股份有限公司 | 内存数据库表索引更新方法及系统 |
CN109407978A (zh) * | 2018-09-27 | 2019-03-01 | 清华大学 | 高并发索引b+链表数据结构的设计与实现方法 |
CN110990404A (zh) * | 2019-11-27 | 2020-04-10 | 亚信科技(中国)有限公司 | 一种索引数据的处理方法、装置及电子设备 |
CN111274456A (zh) * | 2020-01-20 | 2020-06-12 | 中国科学院计算技术研究所 | 基于nvm主存的数据索引方法及数据处理系统 |
CN113032390A (zh) * | 2021-02-05 | 2021-06-25 | 浙江大学 | 一种内存数据库中的工作负载自适应学习型索引方法 |
-
2023
- 2023-08-28 CN CN202311092647.7A patent/CN117131050B/zh active Active
Patent Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2007141809A1 (en) * | 2006-06-06 | 2007-12-13 | Haskolinn I Reykjavik | Data mining using an index tree created by recursive projection of data points on random lines |
CN105138560A (zh) * | 2015-07-23 | 2015-12-09 | 北京天耀宏图科技有限公司 | 基于多级空间索引技术的分布式空间矢量数据管理方法 |
CN106980673A (zh) * | 2017-03-27 | 2017-07-25 | 恒生电子股份有限公司 | 内存数据库表索引更新方法及系统 |
CN109407978A (zh) * | 2018-09-27 | 2019-03-01 | 清华大学 | 高并发索引b+链表数据结构的设计与实现方法 |
CN110990404A (zh) * | 2019-11-27 | 2020-04-10 | 亚信科技(中国)有限公司 | 一种索引数据的处理方法、装置及电子设备 |
CN111274456A (zh) * | 2020-01-20 | 2020-06-12 | 中国科学院计算技术研究所 | 基于nvm主存的数据索引方法及数据处理系统 |
CN113032390A (zh) * | 2021-02-05 | 2021-06-25 | 浙江大学 | 一种内存数据库中的工作负载自适应学习型索引方法 |
Non-Patent Citations (2)
Title |
---|
M-Quadtree索引:一种基于改进四叉树编码方法的云存储环境下空间索引方法;付仲良;胡玉龙;翁宝凤;彭瑞;;测绘学报;20161115(第11期);全文 * |
空间数据库的索引技术;郭龙江, 李建中;黑龙江大学自然科学学报;20050925(第03期);全文 * |
Also Published As
Publication number | Publication date |
---|---|
CN117131050A (zh) | 2023-11-28 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US5781906A (en) | System and method for construction of a data structure for indexing multidimensional objects | |
Traina Jr et al. | Slim-trees: High performance metric trees minimizing overlap between nodes | |
Papadias et al. | An optimal and progressive algorithm for skyline queries | |
US5701467A (en) | Computer data storage management system and methods of indexing a dataspace and searching a computer memory | |
Procopiuc et al. | Bkd-tree: A dynamic scalable kd-tree | |
Papadias et al. | Progressive skyline computation in database systems | |
Beckmann et al. | A revised R*-tree in comparison with related index structures | |
Pandey et al. | The case for learned spatial indexes | |
KR100284778B1 (ko) | 내용기반 이미지 검색을 위한 고차원 색인구조의 삽입 방법 | |
US9298754B2 (en) | Query management system and engine allowing for efficient query execution on raw details | |
CN117131050B (zh) | 面向工作负载和查询敏感性的基于磁盘的空间索引方法 | |
Su et al. | Indexing and parallel query processing support for visualizing climate datasets | |
CN111639075A (zh) | 一种基于扁平化r树的非关系数据库矢量数据管理方法 | |
Zhang | B trees | |
Pandey et al. | Enhancing In-Memory Spatial Indexing with Learned Search | |
CN114741388B (zh) | 一种集成电路版图数据索引的新型构建方法 | |
Shin et al. | Adaptive and incremental processing for distance join queries | |
US7668845B1 (en) | C-tree for multi-attribute indexing | |
Wang et al. | PL-Tree: An efficient indexing method for high-dimensional data | |
Wang et al. | GLIN: A (G) eneric (L) earned (In) dexing Mechanism for Complex Geometries | |
Otoo et al. | Chunked extendible dense arrays for scientific data storage | |
Wang et al. | GLIN: a lightweight learned indexing mechanism for complex geometries | |
Chaudhry et al. | A hash-based index for processing frequent updates and continuous location-based range queries | |
Li et al. | A Survey of Multi-Dimensional Indexes: Past and Future Trends | |
Kaporis et al. | Efficient processing of 3-sided range queries with probabilistic guarantees |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |