CN107391554B - 高效分布式局部敏感哈希方法 - Google Patents
高效分布式局部敏感哈希方法 Download PDFInfo
- Publication number
- CN107391554B CN107391554B CN201710422330.3A CN201710422330A CN107391554B CN 107391554 B CN107391554 B CN 107391554B CN 201710422330 A CN201710422330 A CN 201710422330A CN 107391554 B CN107391554 B CN 107391554B
- Authority
- CN
- China
- Prior art keywords
- hash
- data
- key
- value
- item
- 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.)
- Expired - Fee Related
Links
Images
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/24—Querying
- G06F16/245—Query processing
- G06F16/2453—Query optimisation
-
- 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/2255—Hash tables
-
- 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/24—Querying
- G06F16/245—Query processing
- G06F16/2455—Query execution
- G06F16/24553—Query execution of query operations
- G06F16/24554—Unary operations; Data partitioning operations
-
- 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/24—Querying
- G06F16/245—Query processing
- G06F16/2458—Special types of queries, e.g. statistical queries, fuzzy queries or distributed queries
- G06F16/2471—Distributed queries
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Databases & Information Systems (AREA)
- General Engineering & Computer Science (AREA)
- Data Mining & Analysis (AREA)
- Computational Linguistics (AREA)
- Software Systems (AREA)
- Fuzzy Systems (AREA)
- Mathematical Physics (AREA)
- Probability & Statistics with Applications (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
一种分布式局部敏感哈希方法,包括:从分布式文件系统加载原始数据,读取原始数据向量集合,生成第一弹性分布式数据集;根据用户指定的哈希表数量L和哈希函数数量k,构造L个复合哈希函数;计算数据集中每项数据的L个哈希值,将每项数据分别映射到每个哈希表的各一个哈希桶中,将每项数据中的哈希表标识与复合哈希函数的值组成的键值对合并为字符串并映射为数字键值,数字键值与数据标识形成键值对,保存为第二弹性分布式数据集;根据第二数据集中每项数据的数字键值进行重分区,使得有具有相同数字键值的数据被保存在相同的分区中,完成哈希表的构建。该方法能减少构建哈希表过程产生的混洗量,提高构建索引效率,查询时能减少消息传递开销。
Description
技术领域
本发明属于互联网技术中的大数据数据挖掘领域,特别是涉及局部敏感哈希方法的分布式实现,加速海量高维数据的相似性搜索。
背景技术
相似性搜索是多媒体信息检索领域中的一个重要问题,是指根据用户输入的查询对象,基于某种相似度(或距离)度量方式,在已有的数据集合中查找与之相似度最高(或距离最小)的对象。为了提升相似性搜索的效率,已有KD-tree、R-tree、SR-tree等索引方法被相继被提出,并在低维空间中有良好的效果。但随着数据维度的增加,这些方法的性能则呈现急剧下降的趋势,该问题被称之为“维度灾难”。为了克服“维度灾难”,许多近似搜索的方法被提出,其中最著名的方法之一就是局部敏感哈希(LocalitySensitiveHashing,LSH)。LSH方法通过使用一组具有局部敏感性质的哈希函数,会以很高的概率将原始数据空间中距离相近的对象散列到相同的哈希桶之中,查询时则只需计算查询对象所在哈希桶中的数据对象与查询对象之间的距离即可找出近似点。
在搜索过程中,对于给定的一个特征,重要的是如何快速地从海量的特征中找到和这个特征相似的一些特征。局部敏感哈希就是:如果原来的数据相似,那么hash以后的数据也保持一定的相似性。数据的维数在某种程度上能反映其信息量,一般来说维数越多,其反映的信息量就越大。如果我们知道的信息越多,就能越准确地判定两个东西的相似性。但因为高维空间上计算复杂度太高,所以通常是通过哈希函数把高维数据映射到低维空间上,降维就在某种程度上造成的信息的丢失,在降维后的低维空间中就很难100%保持原始数据空间中的相似性,所以是说“保持一定的相似性”。局部敏感哈希的基本思想是,用hash的方法把数据从原空间哈希到一个新的空间中,使得在原始空间的相似的数据,在新的空间中也相似的概率很大,而在原始空间中不相似的数据,在新的空间中相似的概率很小。这种方法以牺牲一部分精度为代价,大大降低了计算的复杂度,提高了高维空间中相似性搜索的效率。
尽管LSH已经成为近似相似性搜索领域中最重要的索引技术之一,但是该方法的常见形式都局限于单机计算环境,难以处理大规模数据,需要将该方法扩展到分布式环境下以处理海量数据。分布式环境下,一种直观的方法是基于一系列通用分布式计算框架实现局部敏感哈希方法。ApacheSpark是目前最常用的分布式计算框架之一,相比于Hadoop等框架有着明显的性能优势。Spark的核心是弹性分布式数据集(RDD),它是一种对分布式存储的数据的抽象,本质是一组数据分片(partition),每个分片包含一个或者多个数据项,不同分片上的数据项可被并行操作。在RDD之上,Spark提供了丰富的算子,如map,filter等,可以对RDD中的数据进行转换和抽取。Spark的采用的是一种类HadoopMapReduce的计算模式。在MapReduce模式中计算过程分为map和reduce两个阶段,map阶段将输入的元素列表中的每一个独立元素进行制定的操作,得到一组中间数据组成的列表;reduce阶段则是对中间数据列表中的元素进行适当的合并和计算。而map阶段与reduce阶段之间传递中间结果的过程称作混洗(shuffle)。混洗过程中map阶段的中间结果会先写入到本地磁盘,然后reduce阶段不同节点跨网络读取中间结果数据。因此混洗通常是MapReduce类任务中最耗时的过程。
基于Spark实现分布式的LSH,基本思路如下:1)将数据对象加载进来用RDD进行分布式存储。2)构建索引,合并数据RDD不同分区中哈希值相同的数据对象,构成哈希表RDD;3)执行查询操作,首选计算查询点的一组哈希值,然后需要将这些哈希值广播到哈希表RDD中的每一个数据分片来进行检索,得到一组候选对象。4)计算候选对象与查询对象之间的相似度,根据结果进行排序或过滤,得到真正的相似对象。
然而,这种简单实现方式存在一系列的问题:1)缺省情况下,数据的分布可能很不规则,构建索引数据RDD中的数据需要跨分区合并,导致产生大量的混洗开销,而大量的混洗会产生频繁的磁盘读写操作和网络传输,从而最终导致整体性能的下降。2)数据对象的存储位置对查询对象是不可知的,因此计算出查询对象的哈希值后会广播到数据对象所有可能的存储位置进行检索,消息传递开销大,查询效率低。
发明内容
本发明针对解决海量高维数据相似搜索问题,基于Spark平台实现了高效分布式局部敏感哈希方法。为了解决前面提到实现分布式局部敏感哈希方法面临的技术问题,本发明在简单实现的基础上设计并实现了一系列优化方案。本发明请求保护一种分布式局部敏感哈希方法,包含以下步骤:
步骤1,从分布式文件系统加载原始数据,读取原始数据向量集合,为每条数据增加数据标识,生成第一弹性分布式数据集。其中第一弹性分布式数据集中每条数据记录的格式为由数据标识与数据向量组成的键值对。
步骤2,根据用户指定的哈希表数量L和哈希函数数量k,构造L个复合哈希函数。
步骤3,根据步骤2中生成的L个复合哈希函数gi,其中1≤i≤L,计算第一弹性分布式数据集中每项数据的L个哈希值,将每项数据分别映射到每个哈希表的各一个哈希桶中,所述哈希桶表示为<<i,gi(x)>,idx>,其中i为哈希表标识,表示该项数据的哈希桶所在的哈希表,每项数据会被映射到L个哈希桶当中;将每项数据中的哈希表标识与复合哈希函数的值组成的键值对<i,gi(x)>合并为字符串,根据字符哈希方法将所述字符串映射为数字键值key,所述数字键值与数据标识形成<keyx,idx>键值对,将映射后得到的全体数据的集合保存为第二弹性分布式数据集。
步骤4,根据第二弹性分布式数据集中每项数据的数字键值key对第二弹性分布式数据集进行重分区,使得有具有相同数字键值key的数据被保存在相同的分区中,将同一分区中的数据进行合并,得到形式如<key,(id1,id2,…,idn)>的哈希桶,n则为具有相同key的数据的数目,将这些哈希桶数据保存在哈希表弹性分布式数据集中,完成哈希表的构建。
进一步地,步骤2中复合哈希函数的构造方法为:设p-稳态局部敏感哈希函数族H,h∈H是该函数族中的一个局部敏感哈希函数,根据用户指定的哈希表个数L和哈希函数个数k,构造L个复合哈希函数g,对于某项维度为d的数据x,有gi(x)=(h1(x),h2(x),…,hk(x)),其中1≤i≤L,gi(x)为针对数据x构造的用于构建一个哈希表的第i个复合哈希函数,其中p-稳态局部敏感哈希函数族的定义为:
其中,a是一个d维的向量,向量的每一维是一个从标准高斯分布中随机选取的浮点数;b是一个从[0,w]中均匀选取的浮点数,w表示哈希桶的桶宽。
进一步地,步骤4中所述对第二弹性分布式数据集进行重分区的方法是,计算数字键值key的哈希码值,与分区个数进行非负取模计算,得到新的分区号,然后将数据根据新的分区号保存到相应的分区中。
进一步地,所述方法包括在完成哈希表的构建后执行查询处理过程,所述查询处理过程包括:
步骤(1),使用与构建哈希表过程相同的L个复合哈希函数gi,计算查询对象q的L个哈希值gi(q)1≤i≤L,并与哈希表号组成键值对<i,gi(q)>,其中i为哈希表号;
步骤(2),针对查询对象q的L个键值对<i,gi(q)>,将i和gi(q)拼接成一个字符串s,然后使用字符哈希方法将s映射成Long型的数字,作为数字键值key;
步骤(3),根据查询对象q的L个数字键值key计算对应的弹性分布式数据集的一个或多个分区,确定查询对象映射到的哈希桶,取出哈希桶中的数据作为查询对象的候选近邻点;
步骤(4),将分散在各工作节点的分区中的候选点回收到客户端,在客户端计算候选近邻点集合中每个点与查询对象之间的距离,距离度量方式为欧式空间的2范数距离;根据用户设定的距离阈值进行过滤,从候选近邻点集合中查找筛选出与查询对象的距离小于阈值的点作为查询对象的真正近邻点,得到查询对象的近邻点集合,其中所述欧式空间的2范数距离的计算方法为:其中x和y分别表示候选近邻点集合中每个点及查询对象的d维向量;
进一步地,步骤(3)中确定弹性分布式数据集的一个或多个分区的过程进一步包括,计算查询对象的L个数字键值key的哈希码值,与分区数进行非负取模操作,计算出相应哈希表弹性分布式数据集的一个或多个分区号。
本发明与现有技术相比,具有以下效果:
本发明将传统的单机局部敏感哈希方法扩展为了分布式方法,使之能够处理现有方法难以应对的海量高维数据相似性搜索问题。该方法在构建哈希表过程中通过在加载数据过程中的重分区之前进行哈希值的计算,减少了构建哈希表过程产生的混洗量,提高了构建索引的效率;基于这种构建哈希表的方法,该方法可以将查询点发送到指定的RDD分区中进行查询,减少了消息传递开销,提升了查询性能。
附图说明
图1为本发明的分布式架构图;
图2为本发明构建哈希表的数据流程图;
图3为本发明执行查询的数据流程图;
图4为本发明哈希表RDD中的分区与哈希表的哈希桶对应关系图。
具体实施方式
为了使本申请中的技术方案被更好地理解,下面将结合本申请实施例中的附图和具体实施方式,对本申请进行清楚、详细的描述:
如图1所示,本发明公开了一种高效分布式局部敏感哈希方法,并基于分布式计算框架Spark进行设计与实现,包含以下部分:
客户端是定义了具体任务的应用程序,其中定义的任务可以是构建哈希表或者执行查询。客户端将任务提交给主节点进行调度后发送到各个计算节点并行执行,并等待接收计算结果。
主节点与客户端和工作节点进行通信,接收客户端提交的作业,将作业划分成一组任务集合,根据集群状态对任务进行调度,分发到各个节点进行执行。
工作节点负责数据存储和任务计算。每个工作节点存储数据的一部分,即RDD中某个范围的分区集合。
如图2所示,构建哈希表的流程如下:
步骤1,从分布式文件系统加载原始数据,读取原始数据向量集合,为每条数据增加数据标识,生成第一弹性分布式数据集。其中第一弹性分布式数据集中每条数据记录的格式为由数据标识与数据向量组成的键值对。
具体地,从分布式文件系统HDFS加载原始数据,读取原始数据向量集合,并为每条数据加一个Long型的数据标识id,得到数据RDD:dataRDD1。数据RDD中的每条记录的格式为Long类型的id和Vector类型的data组成的键值对<id,data>。
步骤2,根据用户指定的哈希表数量L和哈希函数数量k,构造L个复合哈希函数。
具体地,设p-稳态局部敏感哈希函数族H,h∈H是该函数族中的一个局部敏感哈希函数。根据用户指定的哈希表个数L和哈希函数个数k,构造L个复合哈希函数g,对于某项维度为d的数据x,有gi(x)=(h1(x),h2(x),…,hk(x)),1≤i≤L,gi(x)为针对数据x构造的用于构建一个哈希表的第i个复合哈希函数,其中p-稳态局部敏感哈希函数族的定义为:
其中,a是一个d维的向量,向量的每一维是一个从标准高斯分布中随机选取的浮点数;b是一个从[0,w]中均匀选取的浮点数,w表示哈希桶的桶宽。a、b和w的取值需要根据局部敏感哈希LSH对查询结果质量的要求动态确定,具体的选择方式不在本专利的研究范围之内。
已有方法在构建复合哈希函数gi(x)=(h1(x),h2(x),…,hk(x))的过程中,通常是在哈希函数族中随机选取k个相互独立的h函数进行组合。为提高构造复合哈希函数的效率,步骤2可使用哈希函数复用的方式优化处理。对于一个维度为d的数据点q,计算h(q)的时间复杂度是O(d),计算g1(q),…,gL(q)的时间复杂度是O(dkL)。
具体地,用户指定的哈希表数量L和哈希函数数量k,其中k是偶数,根据计算得到一参数m的值,定义函数ui=(h1(i),...,hk/2(i)),其中1≤i≤L。定义复用哈希函数gi=(ua1,ub1),1≤a1<b1≤m。此时我们可以构建个复用哈希函数及对应的哈希表。使用这种方法,在同样条件下我们构建L个哈希表的时间复杂度就降低到了O(dkm)=O(dk√L)。
步骤3,根据步骤2中生成的L个复合哈希函数gi,其中1≤i≤L,计算第一弹性分布式数据集中每项数据的L个哈希值,将每项数据分别映射到每个哈希表的各一个哈希桶中,所述哈希桶表示为<<i,gi(x)>,idx>,其中i为哈希表标识,表示该项数据的哈希桶所在的哈希表,每项数据会被映射到L个哈希桶当中;将每项数据中的哈希表标识与复合哈希函数的值组成的键值对<i,gi(x)>合并为字符串,根据字符哈希方法将所述字符串映射为数字键值key,所述数字键值与数据标识形成<keyx,idx>键值对,将映射后得到的全体数据的集合保存为第二弹性分布式数据集。
具体地,使用步骤2中产生的L个哈希函数gi,1≤i≤L计算出数据RDD中每项数据的L个哈希值,将每项数据分别映射到L个哈希表中各一个形式如<<i,gi(x)>,idx>的哈希桶中,其中i为哈希表标识,表示该项数据的哈希桶所在的哈希表,即每项数据会被映射到L个哈希桶当中。
此处的哈希桶,实际就是包含一组具有相同哈希值的数据的集合,哈希表就是包含所有这些哈希桶的集合,所以这个映射过程就是哈希表和哈希桶的构建过程。哈希表初始创建为空,在开始计算每条数据哈希值的时候,并不知道最终总共会产生多少种不同的哈希值,也就确定不了哈希桶的个数,只能在映射过程中确定。
例如对于dataRDD1中的一项数据(idx,x)经过步骤3则会得到L个<<i,gi(x)>,idx>形式的哈希桶,其中1≤i≤L。然后将每项数据中的<i,gi(x)>合并成一个字符串s,利用字符哈希算法(bkdr算法)将s映射成一个Long型的数字作为key,得到<keyx,idx>,映射后得到的全体数据的集合保存为dataRDD2。
步骤4,根据第二弹性分布式数据集中每项数据的数字键值key对第二弹性分布式数据集进行重分区,使得有具有相同数字键值key的数据被保存在相同的分区中,将同一分区中的数据进行合并,得到形式如<key,(id1,id2,…,idn)>的哈希桶,n则为具有相同key的数据的数目,将这些哈希桶数据保存在哈希表弹性分布式数据集中,完成哈希表的构建。
其中,所述对第二弹性分布式数据集进行重分区的方法是,计算数字键值key的哈希码值,与分区个数进行非负取模计算,得到新的分区号,然后将数据根据新的分区号保存到相应的分区中。
具体地,根据dataRDD2中每项数据的key对dataRDD2进行重分区,重分区的方式是计算key的hashcode然后与分区个数做非负取模计算,得到新的分区号,然后数据根据新的分区号保存到相应的分区中。这样只有具有相同key的数据会被保存在相同的RDD分区中,然后将同一分区中的数据进行合并,得到形式如<key,(id1,id2,…,idn)>的哈希桶,n则为具有相同key的数据的数目。这些哈希桶数据保存在哈希表RDD:hashTablesRDD中。这样,进行相同哈希桶中数据的合并时只需在每个分区中完成,而无需执行跨分区计算,消除了这一步的混洗,降低了整体的混洗量。至此,哈希表构建过程完毕。
如图3所示,执行查询的过程如下:
步骤1,使用与构建哈希表过程相同的L个复合哈希函数计算查询对象q的L个哈希值;
使用与构建哈希表过程相同的L个复合哈希函数gi,计算查询对象q的L个哈希值gi(q),1≤i≤L,并与哈希表号组成键值对<i,gi(q)>,其中i为哈希表号。
步骤2,针对查询对象q的L个键值对<i,gi(q)>,将i和gi(q)拼接成一个字符串s,然后使用字符哈希算法(bkdr算法)将s映射成Long型的数字,作为数字键值key。
步骤3,根据查询对象q的L个数字键值key计算对应的弹性分布式数据集的一个或多个分区,确定查询对象映射到的哈希桶,取出哈希桶中的数据作为查询对象的候选近邻点。
其中所述查找弹性分布式数据集的一个或多个分区的过程进一步包括,计算查询对象的L个数字键值key的哈希码值,与分区数进行非负取模操作,计算出相应哈希表弹性分布式数据集的一个或多个分区号。
由于构建哈希表过程中数据是根据数字键值key进行分区的,任一哈希桶中的数据都只分布在一个分区中,而不会出现同一哈希桶中的数据分散在多个不同分区的情况。
如附图4所描述,哈希表RDD中的分区与哈希表的哈希桶是一对多的关系。因此本步骤计算q的L个key的hashcode然后与分区数进行非负取模操作,计算出相应哈希表RDD的一个或者多个分区号,就找到了查询对象q所映射到的哈希桶所在的分区,在这个分区内针对这个分区内的所有数据做查找操作,取出这些分区(哈希桶)中的数据则为q的候选近邻点。基于这种查询方法,查询数据不必被广播到所有RDD分区进行查询,减少了消息传递开销,加快了查询速度。
步骤4,将分散在各工作节点的分区中的候选点回收到客户端,在客户端计算候选近邻点集合中每个点与查询对象之间的距离,距离度量方式为欧式空间的2范数距离;根据用户设定的距离阈值进行过滤,从候选近邻点集合中查找筛选出与查询对象的距离小于阈值的点作为查询对象的真正近邻点,得到查询对象的近邻点集合,其中所述欧式空间的2范数距离的计算方法为:
其中x和y分别表示候选近邻点集合中每个点及查询对象的d维向量。
具体地,设步骤3中得到的候选近邻点的集合为S,计算候选近邻点集合S中每个点与查询点q之间的距离,距离度量方式为欧式空间的2范数距离,对于两个d维向量x和y,它们之间的距离计算方法如下所示:
然后按照用户输入的距离阈值r进行过滤,只有与q的距离小于r的点会被保留下来成为q的真正近邻点,这样最后就得到了q的近邻点集合。
步骤4中可以将过滤操作前移来优化本步骤的处理方式。
具体地,设各分区得到候选点集合为Si,1≤i≤n,n为包含候选点的分区的数量。直接在每个分区中计算该分区中候选点与查询点q的距离,即针对每个分区Si,计算Si中每个点与q的距离,距离小于r的点保留下来作为该分区中q的真正近邻点。最后将各分区中的真正近邻点回收到客户端,就得到了q的近邻点集合。这种优化方式并行地查找真正近邻点,且最后回收到客户端的数据量更小,使整体查询效率提高。至此,查询过程完毕。
以上所述仅是本发明的优选实施方式,本发明的保护范围并不仅局限于上述实施例,凡属于本发明思路下的技术方案均属于本发明的保护范围。应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理前提下的若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。
Claims (5)
1.一种分布式局部敏感哈希方法,包含以下步骤:
步骤1,从分布式文件系统加载原始数据,读取原始数据向量集合,为每条数据增加数据标识,生成第一弹性分布式数据集;其中第一弹性分布式数据集中每条数据记录的格式为由数据标识与数据向量组成的键值对;
步骤2,根据用户指定的哈希表数量L和哈希函数数量k,构造L个复合哈希函数;
步骤2使用哈希函数复用的方式优化处理,对于一个维度为d的数据点q,计算h(q)的时间复杂度是O(d),计算g1(q),…,gL(q)的时间复杂度是O(dkL);
用户指定的哈希表数量L和哈希函数数量k,其中k是偶数,根据计算得到一参数m的值,定义函数ui=(h1(i),...,hk(i)),其中1≤i≤L;定义复合 哈希函数gi=(ua1,ub1),1≤a1<b1≤m;此时我们可以构建 个复合 哈希函数及对应的哈希表;
步骤3,根据步骤2中生成的L个复合哈希函数gi,其中1≤i≤L,计算第一弹性分布式数据集中每项数据的L个哈希值,将每项数据分别映射到每个哈希表的各一个哈希桶中,所述哈希桶表示为<<i,gi(x)>,idx>,其中i为哈希表标识,表示该项数据的哈希桶所在的哈希表,每项数据会被映射到L个哈希桶当中;将每项数据中的哈希表标识与复合哈希函数的值组成的键值对<i,gi(x)>合并为字符串,根据字符哈希方法将所述字符串映射为数字键值key,所述数字键值与数据标识形成<keyx,idx>键值对,将映射后得到的全体数据的集合保存为第二弹性分布式数据集;
步骤4,根据第二弹性分布式数据集中每项数据的数字键值key对第二弹性分布式数据集进行重分区,使得有具有相同数字键值key的数据被保存在相同的分区中,将同一分区中的数据进行合并,得到形式如<key,(id1,id2,…,idn)>的哈希桶,n则为具有相同key的数据的数目,将这些哈希桶数据保存在哈希表弹性分布式数据集中,完成哈希表的构建。
3.如权利要求1所述的方法,步骤4中所述对第二弹性分布式数据集进行重分区的方法是,计算数字键值key的哈希码值,与分区个数进行非负取模计算,得到新的分区号,然后将数据根据新的分区号保存到相应的分区中。
4.如权利要求1-3之一所述的方法,所述方法包括在完成哈希表的构建后执行查询处理过程,所述查询处理过程包括:
步骤(1),使用与构建哈希表过程相同的L个复合哈希函数gi,计算查询对象q的L个哈希值gi(q),其中1≤i≤L,并与哈希表号组成键值对<i,gi(q)>,其中i为哈希表号;
步骤(2),针对查询对象q的L个键值对<i,gi(q)>,将i和gi(q)拼接成一个字符串s,然后使用字符哈希方法将s映射成Long型的数字,作为数字键值key;
步骤(3),根据查询对象q的L个数字键值key计算对应的弹性分布式数据集的一个或多个分区,确定查询对象映射到的哈希桶,取出哈希桶中的数据作为查询对象的候选近邻点;
5.如权利要求4所述的方法,步骤(3)中确定弹性分布式数据集的一个或多个分区的过程进一步包括,计算查询对象的L个数字键值key的哈希码值,与分区数进行非负取模操作,计算出相应哈希表弹性分布式数据集的一个或多个分区号。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710422330.3A CN107391554B (zh) | 2017-06-07 | 2017-06-07 | 高效分布式局部敏感哈希方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710422330.3A CN107391554B (zh) | 2017-06-07 | 2017-06-07 | 高效分布式局部敏感哈希方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN107391554A CN107391554A (zh) | 2017-11-24 |
CN107391554B true CN107391554B (zh) | 2021-10-01 |
Family
ID=60333173
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201710422330.3A Expired - Fee Related CN107391554B (zh) | 2017-06-07 | 2017-06-07 | 高效分布式局部敏感哈希方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN107391554B (zh) |
Families Citing this family (15)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US11106708B2 (en) * | 2018-03-01 | 2021-08-31 | Huawei Technologies Canada Co., Ltd. | Layered locality sensitive hashing (LSH) partition indexing for big data applications |
CN110210883B (zh) * | 2018-05-09 | 2023-08-22 | 腾讯科技(深圳)有限公司 | 群控账号识别方法、装置、服务器及存储介质 |
CN109471635B (zh) * | 2018-09-03 | 2021-09-17 | 中新网络信息安全股份有限公司 | 一种基于Java Set集合实现的算法优化方法 |
CN112417036A (zh) * | 2018-09-10 | 2021-02-26 | 华为技术有限公司 | 分布式存储系统中处理对象的元数据的方法及装置 |
CN109829066B (zh) * | 2019-01-14 | 2023-03-21 | 南京邮电大学 | 基于分层结构的局部敏感哈希图像索引方法 |
CN111597295A (zh) * | 2019-02-20 | 2020-08-28 | 北京奇虎科技有限公司 | 一种分布式相似句对的检索方法及装置 |
CN110008448B (zh) * | 2019-04-02 | 2023-10-17 | 中国工商银行股份有限公司 | 将SQL代码自动转换为Java代码的方法和装置 |
CN110309963B (zh) * | 2019-06-24 | 2022-04-01 | 浙江心怡供应链管理有限公司 | 一种基于动态分区的分布式库位优化方法 |
CN110532425B (zh) * | 2019-08-19 | 2022-04-01 | 深圳市网心科技有限公司 | 视频数据分布式存储方法、装置、计算机设备及存储介质 |
CN110795469B (zh) * | 2019-10-11 | 2022-02-22 | 安徽工业大学 | 基于Spark的高维序列数据相似性查询方法及系统 |
CN110738020B (zh) * | 2019-10-25 | 2023-05-30 | 重庆誉存大数据科技有限公司 | 一种基于spark的批量方法 |
CN111259060B (zh) * | 2020-02-18 | 2023-08-15 | 北京百度网讯科技有限公司 | 数据查询的方法及装置 |
CN111966649B (zh) * | 2020-10-21 | 2021-01-01 | 中国人民解放军国防科技大学 | 一种高效去重的轻量级在线文件存储方法及装置 |
CN112699676B (zh) * | 2020-12-31 | 2024-04-12 | 中国农业银行股份有限公司 | 一种地址相似关系生成方法及装置 |
CN113420141B (zh) * | 2021-06-24 | 2022-10-04 | 中国人民解放军陆军工程大学 | 基于哈希聚类和上下文信息的敏感数据搜索方法 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105760469A (zh) * | 2016-02-05 | 2016-07-13 | 大连大学 | 云计算环境下基于倒排lsh的高维近似图象检索方法 |
CN106570025A (zh) * | 2015-10-10 | 2017-04-19 | 北京国双科技有限公司 | 一种数据过滤的方法及装置 |
Family Cites Families (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7580921B2 (en) * | 2004-07-26 | 2009-08-25 | Google Inc. | Phrase identification in an information retrieval system |
US20140297996A1 (en) * | 2013-04-01 | 2014-10-02 | Advanced Micro Devices, Inc. | Multiple hash table indexing |
US9552408B2 (en) * | 2014-01-24 | 2017-01-24 | Facebook, Inc. | Nearest neighbor clustering determination and estimation algorithm that hashes centroids into buckets and redistributes vectors between clusters |
-
2017
- 2017-06-07 CN CN201710422330.3A patent/CN107391554B/zh not_active Expired - Fee Related
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106570025A (zh) * | 2015-10-10 | 2017-04-19 | 北京国双科技有限公司 | 一种数据过滤的方法及装置 |
CN105760469A (zh) * | 2016-02-05 | 2016-07-13 | 大连大学 | 云计算环境下基于倒排lsh的高维近似图象检索方法 |
Non-Patent Citations (2)
Title |
---|
Shuffle-Efficient Distributed Locality Sensitive Hashing on Spark;Wanxin Zhang 等;《Computer Communications Workshops (INFOCOM WKSHPS), 2016》;20161231;全文 * |
基于随机函数的哈希函数;王勇 等;《计算机工程与设计》;20151031;全文 * |
Also Published As
Publication number | Publication date |
---|---|
CN107391554A (zh) | 2017-11-24 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107391554B (zh) | 高效分布式局部敏感哈希方法 | |
Yagoubi et al. | Massively distributed time series indexing and querying | |
US9442929B2 (en) | Determining documents that match a query | |
Yagoubi et al. | Dpisax: Massively distributed partitioned isax | |
Song et al. | Solutions for processing k nearest neighbor joins for massive data on mapreduce | |
CN109033340B (zh) | 一种基于Spark平台的点云K邻域的搜索方法及装置 | |
US11281645B2 (en) | Data management system, data management method, and computer program product | |
CN107180031B (zh) | 分布式存储方法及装置、数据处理方法及装置 | |
Li et al. | SES-LSH: Shuffle-efficient locality sensitive hashing for distributed similarity search | |
CN113656670B (zh) | 面向飞行数据的时空轨迹数据管理分析方法和装置 | |
JP7019137B2 (ja) | 類似画像検索システム | |
JP5790755B2 (ja) | データベース管理装置及びデータベース管理方法 | |
JP4491480B2 (ja) | インデクス構築方法、文書検索装置及びインデクス構築プログラム | |
JP2002163272A (ja) | 特徴ベクトル空間のインデクシング方法及び検索方法 | |
JP2010277329A (ja) | 近傍探索装置 | |
CN113254720A (zh) | 一种基于新型存储器的存储内哈希排序构建方法 | |
CN108121807B (zh) | Hadoop环境下多维索引结构OBF-Index的实现方法 | |
JP4440246B2 (ja) | 空間インデックス方法 | |
CN112632118A (zh) | 查询数据的方法、装置、计算设备和存储介质 | |
JP3938815B2 (ja) | ノード作成方法、画像検索方法及び記録媒体 | |
CN105740371A (zh) | 一种基于密度的增量聚类数据挖掘方法及系统 | |
JP7211255B2 (ja) | 検索処理プログラム、検索処理方法及び情報処理装置 | |
CN113742288B (zh) | 用于数据索引的方法、电子设备和计算机程序产品 | |
KR101153966B1 (ko) | 고차원 데이터의 색인/검색 시스템 및 그 방법 | |
JP3639480B2 (ja) | 類似データ検索方法,類似データ検索装置,および類似データ検索用プログラム記録媒体 |
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 | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20211001 |
|
CF01 | Termination of patent right due to non-payment of annual fee |