一种基于混合粒度分布式内存网格索引的knn查询方法

文档序号:9417439阅读:1104来源:国知局
一种基于混合粒度分布式内存网格索引的knn查询方法
【技术领域】
[0001] 本发明涉及信息检索领域,具体地说是一种实用性强、基于混合粒度分布式内存 网格索引的KNN查询方法。
【背景技术】
[0002] 随着互联网、物联网、大数据等技术的快速发展,KNN查询作为一种基础性操作被 广泛的用于各种基于位置的应用中。但是,随着数据量的不断增长,传统集中式KNN查询以 及基于MapReduce架构的KNN查询方法不能有效的对海量数据进行快速处理。如何在大数 据环境下,结合内存集群特性、索引技术以及分布式内存计算技术对传统集中式KNN查询 算法进行扩展是解决该问题的根本途径。
[0003] 索引技术是KNN查询算法的关键组成部分,其基本思想是利用划分、定位、映射等 方法对数据对象进行排序组成新的索引数据结构,利用索引技术可以提高数据的检索效 率。索引技术在KNN查询算法中的应用已经十分广泛,在集中式环境下:①基于Voronoi图 的特性建立的索引结构,在空间数据的KNN查询中得到了广泛应用。②基于树形结构的KNN 查询主要有:基于R树建立的索引结构已成熟应用于空间数据的KNN查询、基于TPR树建立 的索引结构被应用于移动数据对象的KNN查询、数据划分结合B+树建立的索引结构被应用 于时空数据的KNN查询。③基于网格索引结构的KNN查询主要有:基于等分网格建立的索 引结构广泛应用于无线广播环境的KNN查询、基于树和网格混合结构建立的索引结构被应 用于移动数据对象的KNN查询、基于主存的网格索引结构被广泛应用于持续KNN查询;在分 布式环境下,基于MapReduce架构的KNN查询也有了一些成果,主要有:基于R树的并行KNN 查询、基于倒排索引的并行KNN查询、基于Voronoi图的并行KNN查询等。
[0004] 大数据环境下KNN查询方法效率比较低下,缺乏有效的索引结构以及该结构下 支持的KNN查询算法是导致该问题的关键,主要体现在:①集中式环境下的索引结构研 究已经相对成熟,基于这些索引结构也提出很多相对有效KNN算法,但是随着数据量呈爆 炸式的增长,集中式环境下单机处理性能成为了不可调和的瓶颈;②分布式环境下基于 MapReduce架构的索引结构及相关的KNN查询算法也有一些研究,但是由于MapReduce架构 是批处理模型,中间结果需要写回磁盘,增加了 1/0,这就导致了查询的实时性较差,而且 现有算法,没有考虑数据分布情况,容易导致集群的数据倾斜问题。
[0005] 针对当前大数据环境下KNN查询效率低下问题以及现有技术的缺点,我们提出一 种基于混合粒度分布式内存网格索引的KNN查询方法,结合内存集群的特性,我们通过对 整体数据进行概要估计,建立粗-细混合粒度的分布式内存网格索引结构,以减小数据倾 斜和提高数据检索效率;设计无丢失的近邻细粒度网格搜索算法,以保障快速、准确的定位 查找对象的近邻网格,最终,基于所建立的索引结构和无丢失的近邻细粒度网格搜索算法, 结合分布式内存计算模型,对传统集中式KNN算法进行可分布式扩展,以消除集中式KNN算 法的单机性能瓶颈和基于MapReduce架构KNN算法的I/O瓶颈,进而对海量数据进行快速 KNN查询。

【发明内容】

[0006] 本发明的技术任务是针对以上不足之处,提供一种实用性强、基于混合粒度分布 式内存网格索引的KNN查询方法。
[0007] -种基于混合粒度分布式内存网格索引的KNN查询方法,其具体实现过程为:
[0008] -、进行数据预处理的步骤:基于网格和密度,将整体数据进行空间划分,得到总 体数据分布的概要估计;
[0009] 二、进行数据查询的步骤:
[0010] 建立混合粒度的分布式内存网格索引结构,即建立非等分粗粒度网格索引和等分 细粒度网格索引;
[0011] 基于上述索引结构设计分布式KNN查询算法,实现对海量数据的快速KNN查询:即 基于非等分粗粒度网格索引,通过搜索待查询对象所在非等分粗粒度网格的邻接粗粒度网 格集合,确定邻接粗粒度网格集合中的各个粗粒度网格所在的Slave节点;在这些Slave节 点上,基于等分细粒度网格索引,通过搜索待查询对象所在等分细粒度网格的邻接细粒度 网格集合,对邻接细粒度网格集合中每个细粒度网格包含的各个对象与待查询对象的距离 进行对比,进而得到查询的k个最近邻对象。
[0012] 所述整体数据空间划分的具体过程为:
[0013] 将全数据空间的各维按照等步长δ进行等分细粒度划分,形成细粒度网格空间;
[0014] 将数据对象ρ映射到相应的网格;
[0015] 每个网格用特征向量g(gid,num)表示,记录每个网格的编号以及包含的数据对 象个数,其中gid表示网格的编号,具有唯一性,num表示该网格所包含的数据对象的个数。
[0016] 所述混合粒度的分布式内存网格索引结构的建立过程为:
[0017] 根据步骤一得出的数据分布的概要估计,对全数据空间进行非等分粗粒度的网格 划分,建立全数据空间的非等分粗粒度网格索引,内存集群的Master节点维护全数据空间 的粗粒度的分布式内存网格索引结构CGGI,该Master节点负责向集群各个SIave节点分发 数据;
[0018] 对上述划分的每个粗粒度网格的所表示的子数据空间进行等分细粒度的划分,建 立各个子数据空间的细粒度的网格索引,内存集群的每个Slave节点维护一个或者几个子 数据空间的细粒度的分布式内存网格索引结构FGGI,每个Slave节点维护的细粒度网格索 引互不重叠即维护的子空间互不重叠。
[0019] 所述非等分粗粒度分布式内存网格索引结构的具体建立过程为:
[0020] 根据步骤一的处理,统计各维各个划分所包含的数据对象的个数;
[0021] 令每一维每一个划分至少包含Θ个数据对象,当某个划分中的数据对象个数小 于Θ时,则将其与相邻的划分合并,直到其包含的数据对象个数据大于Θ或者数据空间已 经没有剩余的划分;
[0022] 经过上述的计算与合并,全数据空间被划分为一个非等分粗粒度网格空间,每个 粗粒度网格包含的数据对象基本均匀;
[0023] 建立全数据空间粗粒度的网格索引CGGI,CGGI的每个粗粒度网格用一个三元组 〈Cgid,Cgnum,SIP>表示,其中,Cgid表示粗粒度网格的编号,用(〈lbp Ub1X <lb2, ub2>,…, 〈lb;,ubi>,…,<lbn,ubn>)表示,〈lb;,lib;〉表示该网格在第i维的划分的下界和上界; Cgnum表示该粗粒度网格中数据对象的个数;SIP表示该粗粒度网格所对应的Slave节点地 址。
[0024] 所述等分细粒度的分布式内存网格索引结构的建立过程为:基于建立的非等分粗 粒度分布式内存网格索引结构,对每个粗粒度网格〈Cgid,Cgnum,SIP>对应的子数据空间 进行进一步的细分,取固定步长λ作为每一维进行划分的粒度,这样每个粗粒度网格将被 划分为一个等步长的细粒度网格空间,基于该细粒度网格空间建立等分细粒度分布式内存 网格索引FGGI,FGGI的每个细粒度网格用一个三元组仆 8丨(1^81111111,1^8〇表示,其中^81(1 表示细粒度网格的编号,用〈1:,I 2,…,I3,…,ln>表示,具有唯一性,Fgnum表示该细粒度 网格中数据对象的个数,List表示该细粒度网格所包含的数据对象。
[0025] 所述CGGI、FGGI的数据对象均可插入与删除,其中:
[0026] CGGI数据对象的插入过程为:对于数据对象p (山,d2,…...,dn)的插入,通过计 算山所在的划分(i = 1,2,3,……,η),即可确定ρ所在的粗粒度网格,更新该粗粒度网格 的Cgnum,将其增长1 ;
[0027] 同时,对该粗粒度网格对应的细粒度网格索引FGGI进行插入更新:首先,Master 节点通过CGGI的插入操作,将数据对象ρ分发到相应的粗粒度网格及Slave节点;其次,对 于数据对象Pdd2,…...,dn)的插入,通过计算
即可确 定P所在细粒度网格索引的Fgid,更新该细粒度网格的Fgnum,将其增长1,同时,将数据对 象P插入List ;
[0028] CGGI的数据对象的删除过程为:对于数据对象ρ (山,d2,…...,dn)的删除,通过 计算Cl1所在的划分(i = 1,2,3,……,η),即可确定ρ所在的粗粒度网格,更新该粗粒度网 格的Cgnum,将其减少1 ;
[0029] 同时,对该粗粒度网格对应的细粒度网格索引FGGI进行删除更新:首先,Master 节点通过CGGI的删除操作,找到数据对象ρ所在的粗粒度网格及Slave节点;其次,对于数 据对象Pdd2,…...,dn)的删除,通过计算:1
4即可确定P 所在细粒度网格索引的Fgid,更新该细粒度网格的Fgnum,将其减少1,同时,将数据对象ρ 从List中删除。
[0030] 所述KNN查询过程即为查找对象q的k个最近邻对象,其具体查询过程为:
[0031] Master节点首先运行数据对象映射算法MOG算法,将数据对象映射到粗粒度网格 索引CGGI,确定q在CGGI所在的粗粒度网格Cg q;
[0032] 其次运行邻接网格搜索算法SNNG算法搜索粗粒度网格的邻接网格,即搜索Cgq的 邻接网格,判断Cg q以及其邻接网格中的对象个数总和是否大于k,如果小于k,继续搜索其 邻接网格的邻接网格,直到对象的总数量大于k或者搜索完整个粗粒度网格空间,最终得 到Cg q的邻接粗粒度网格集合C q,确定Cq中粗粒度网格所在的Slave节点;
[0033] 在包含Cq中粗粒度网格的Slave节点运行SDKNN算法,每个Slave节点输出查询 结果;
[0034] 将每个Slave节点输出的结果归约到一个Slave节点,得到结果集S,对S进行升 序排序,取前k个对象作为最终结果输出。
[0035] 所述的MOG算法在Master节点运行,其具体实现过程为:输入待查询数据对象 q (山,d2,…· · ·,dn)、粗粒度网格集合C,确定q每一维所在的粗粒度网格的划分,将q映射 到CGGI中,确定q所在的粗粒度网格Cg\
[0036] 所述SNNG算法在Master节点运行,依据"邻接网格"的定义计算q所在粗粒度网 格Cg q的邻接网格,得到粗粒度邻接网格集合C '统计Cq中粗粒度网格中的对象个数总和 num,如果num> = k,则输出Cq,否贝lj,对于Cq中的每个粗粒度网格执行SNNG算法,直到Cq中 粗粒度网格中的对象个数num> = k或者搜索完整个粗粒度网格空间,输出C\
[0037] 所述SDKNN算法为分布式、可扩展KNN算法,该算法分布式的运行于存储待查询对 象q所在的粗粒度网格Cg q以及C q中粗粒度网格的各个Slave节点,每个Slave节点返回 q的最近邻的k个对象;
[0038] 基于Slave节点,该算法的具体实现过程为:
[0039] 令Slave节点1存储粗粒度网格Cgj,且Cgj e C q,Cgj在该Slave节点
当前第1页1 2 3 4 5 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1