CN110175174B - 一种数据查询方法、装置、设备及存储介质 - Google Patents
一种数据查询方法、装置、设备及存储介质 Download PDFInfo
- Publication number
- CN110175174B CN110175174B CN201910441952.XA CN201910441952A CN110175174B CN 110175174 B CN110175174 B CN 110175174B CN 201910441952 A CN201910441952 A CN 201910441952A CN 110175174 B CN110175174 B CN 110175174B
- Authority
- CN
- China
- Prior art keywords
- storage
- query
- key
- stored
- value
- 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 62
- 230000015654 memory Effects 0.000 claims description 124
- 230000006870 function Effects 0.000 claims description 78
- 238000013507 mapping Methods 0.000 claims description 30
- 238000004590 computer program Methods 0.000 claims description 4
- 238000013500 data storage Methods 0.000 description 41
- 230000003068 static effect Effects 0.000 description 12
- 238000005516 engineering process Methods 0.000 description 6
- 238000010586 diagram Methods 0.000 description 5
- 238000004364 calculation method Methods 0.000 description 3
- 238000012545 processing Methods 0.000 description 2
- 230000000644 propagated effect Effects 0.000 description 2
- 230000009286 beneficial effect Effects 0.000 description 1
- 238000010295 mobile communication Methods 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 239000013307 optical fiber Substances 0.000 description 1
- 230000008707 rearrangement Effects 0.000 description 1
- 238000011160 research Methods 0.000 description 1
- 238000005070 sampling Methods 0.000 description 1
- 238000006467 substitution reaction 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/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
-
- 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
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Data Mining & Analysis (AREA)
- Databases & Information Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computational Linguistics (AREA)
- Software Systems (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明实施例公开了一种数据查询方法、装置、设备及存储介质,该方法包括:根据数据查询请求中的查询关键字生成查询索引值,查询关键字与查询索引值一一对应;根据查询索引值对应的存储关键字与查询关键字,确定查询结果。本发明实施例由于查询关键字与查询索引值一一对应,因此,避免了现有技术中不同关键字对应的索引值相同的冲突,通过单次数据查询即可得到查询结果,从而提高了数据查询效率。
Description
技术领域
本发明实施例涉及数据处理技术,尤其涉及一种数据查询方法、装置、设备及存储介质。
背景技术
随着大数据时代的到来,如何从海量数据中查询到所需要的数据成为重点研究内容。由于上述数据通常都是以键值对的数据结构进行存储的,因此,需要采用适合键值对的数据结构的查询方法,其中,键又称为关键字。
现有技术中,通常采用哈希查找或红黑树进行数据查询。其中,哈希查找的基本思想是将查询关键字作为预先设定的函数的自变量,计算其对应的函数值,如果函数值对应的存储关键字与查询关键字一致,则将与存储关键字对应的存储值作为查询结果,其中,预先设定的函数称为哈希函数,函数值又称为索引值。红黑树是一种特殊的二叉查找树。
然而,现有技术中至少存在如下问题:针对哈希查找而言,为了使得哈希函数具有通用性,不可避免会出现哈希冲突,所谓哈希冲突是指不同关键字对应的索引值相同,而为了解决哈希冲突,通常采用再哈希法。其中,再哈希法通过设置多个不同的哈希函数,当采用第一个哈希函数发生哈希冲突时,依次使用第二个、第三个、…、第N-1个和第N个哈希函数计算地址,直到无冲突,这种解决方案需要耗费较多的计算性能。针对红黑树而言,由于是基于二叉排序树查找思想进行查询的,因此,时间开销大。上述均导致数据查询的效率不高。
发明内容
本发明实施例提供一种数据查询方法、装置、设备及存储介质,以提高数据查询效率。
第一方面,本发明实施例提供了一种数据查询方法,该方法包括:
根据数据查询请求中的查询关键字生成查询索引值,所述查询关键字与所述查询索引值一一对应;
根据所述查询索引值对应的存储关键字与所述查询关键字,确定查询结果。
第二方面,本发明实施例还提供了一种数据查询装置,该装置包括:
查询索引值生成模块,用于根据数据查询请求中的查询关键字生成查询索引值,所述查询关键字与所述查询索引值一一对应;
查询结果确定模块,用于根据所述查询索引值对应的存储关键字与所述查询关键字,确定查询结果。
第三方面,本发明实施例还提供了一种设备,该设备包括:
一个或多个处理器;
存储器,用于存储一个或多个程序;
当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现如本发明实施例第一方面所述的方法。
第四方面,本发明实施例还提供了一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现如本发明实施例第一方面所述的方法。
本发明实施例通过根据数据查询请求中的查询关键字生成查询索引值,查询关键字与查询索引值一一对应,根据查询索引值对应的存储关键字与查询关键字,确定查询结果,上述由于查询关键字与查询索引值一一对应,因此,避免了现有技术中不同关键字对应的索引值相同的冲突,通过单次数据查询即可得到查询结果,从而提高了数据查询效率。
附图说明
图1是本发明实施例中的一种数据查询方法的流程图;
图2是本发明实施例中的另一种数据查询方法的流程图;
图3是本发明实施例中的一种数据查询方法的应用示意图;
图4是本发明实施例中的一种数据查询装置的结构示意图;
图5是本发明实施例中的一种设备的结构示意图。
具体实施方式
下面结合附图和实施例对本发明作进一步的详细说明。可以理解的是,此处所描述的具体实施例仅仅用于解释本发明,而非对本发明的限定,此外,在不冲突的情况下,本发明中的实施例及实施例中的特征可以相互组合。另外还需要说明的是,为了便于描述,附图中仅示出了与本发明相关的部分而非全部结构。
传统技术中,红黑树是建立在比较的基础上,时间复杂度依赖于查询过程中比较的次数,这里所述的时间复杂度可理解为查询次数。相比而言,哈希查找不是建立在比较的基础上,如果不存在哈希冲突,则只需要计算一次便可以得到查询结果,能够实现高效的数据查询。基于上述,本发明实施例建立在哈希查找的基础上。由于哈希查找中哈希冲突的存在,因此,其查询效率并没有达到最优。导致哈希冲突的原因在于不同关键字对应相同的索引值,其中,索引值是将关键字输入哈希函数得到的。可以理解到,如果哈希函数可以实现不同关键字对应不同的索引值,则将不会产生哈希冲突,即将避免出现哈希冲突。上述表明,如果哈希函数选择的合适,则可以避免哈希冲突的产生。需要说明的是,通常选择的哈希函数中哈希冲突的发生几率与关键字集合的分布有关,换句话说,需要根据关键字集合的分布来选择合适的哈希函数,以此避免出现哈希冲突,上述要求关键字集合是事先已知且在一段时间内是固定不变的。可将事先已知且在一段时间段内是固定不变的关键字集合称为静态关键字集合。与静态关键字集合对应的是动态关键字集合,动态关键字集合是在一定时间段内变化的关键字集合。但是,由于传统技术中的哈希查找为了满足通用性,所谓满足通用性是指可同时适用于动态关键字集合和静态关键字集合,因此,传统技术中的哈希查找无法通过选择合适的哈希函数的方式来避免哈希冲突的出现,而只能在哈希冲突出现后,采用再哈希法或者公共溢出区法来解决哈希冲突。
基于上述,可以理解到,如果关键字集合是静态关键字集合,则可以通过选择合适的哈希函数来避免哈希冲突的出现。由于不存在哈希冲突,即不同关键字对应不同的索引值,因此,可提高数据查询效率。
由于本发明实施例针对的是静态关键字集合,如推荐系统中的关键字集合,因此,可以通过选择合适的哈希函数的方式来避免哈希冲突的出现,以此提高数据查询效率。完美哈希函数正是针对静态关键字集合的哈希函数,即针对关键字集合为静态关键字集合的数据进行查询时,可调用完美哈希函数,其中,完美哈希函数是基于静态关键字集合生成的,完美哈希函数是无哈希冲突的哈希函数。下面将结合具体实施例进行说明。
图1为本发明实施例提供的一种数据查询方法的流程图,本实施例可适用于提高键值对数据的数据查询效率的情况,该方法可以由数据查询装置来执行,该装置可以采用软件和/或硬件的方式实现,该装置可以配置于设备中,例如典型的是计算机等。如图1所示,该方法具体包括如下步骤:
步骤110、根据数据查询请求中的查询关键字生成查询索引值,查询关键字与查询索引值一一对应。
步骤120、根据查询索引值对应的存储关键字与查询关键字,确定查询结果。
在本发明的实施例中,数据查询请求包括查询关键字,可调用完美哈希函数,计算查询关键字对应的查询索引值。通过完美哈希函数计算得到的查询索引值与查询关键字一一对应,即不同查询关键字对应不同的查询索引值。由于完美哈希函数是一种不存在哈希冲突的哈希函数,因此,相比于传统技术中的哈希查找或红黑树而言为了解决哈希冲突所带来的冲突时间开销,本方案的时间开销小,即通过单次数据查询,便可以得到查询结果,提高了数据查询效率。
在得到查询索引值后,可根据查询索引值得到查询索引值对应的存储关键字。在此基础上,根据查询索引值对应的存储关键字与查询关键字,确定查询结果,可作如下理解:确定查询索引值对应的存储关键字与查询关键字是否一致,如果查询索引值对应的存储关键字与查询关键字一致,则可通过如下两种方式确定查询结果:方式一、将与存储关键字对应的存储值作为查询结果;方式二、获取存储关键字对应的偏移地址,将偏移地址所指向的存储值作为查询结果。需要说明的是,在方式二中,存储关键字与存储关键字对应的偏移地址是对应存储的,偏移地址表示存储值所在的地址。如果查询索引值对应的存储关键字与查询关键字不一致,则将空或预设值作为查询结果。
可根据查询索引值对应的存储关键字与查询关键字,确定查询结果的原因在于:数据查询针对的对象是已存储数据,确定已存储数据中是否存在查询数据,并根据确定结果返回相应的查询结果。基于上述,可以理解到,需要将数据进行存储,以便于数据查询时可以使用。针对本发明实施例所提供的基于完美哈希进行数据查询的技术方案而言,基于完美哈希进行数据查询的基本思想是:将查询关键字作为完美哈希函数的自变量,计算其对应的函数值,根据函数值对应的存储关键字与查询关键字,确定查询结果。其中,函数值即可理解为查询索引值。存储关键字是指已存储数据中的关键字。在数据查询阶段所使用的完美哈希函数正是在数据存储阶段构建的,具体是:获取数据存储请求,数据存储请求包括存储关键字,存储关键字组成存储关键字集合,存储关键字集合为静态关键字集合。根据存储关键字集合构建完美哈希函数。该完美哈希函数生成后便可在数据查询时,采用该完美哈希函数计算查询关键字的索引值。
可通过如下两种方式将存储数据进行存储,具体的:方式一、调用完美哈希函数,计算存储关键字对应的存储索引值。根据存储索引值的顺序,将存储数据进行存储,存储数据包括存储关键字和与存储关键字对应的存储值;方式二、调用完美哈希函数,计算存储关键字对应的存储值。根据存储索引值的顺序,将与存储关键字对应的存储值进行存储,得到偏移地址。根据存储索引值的顺序,将存储关键字和偏移地址对应存储。可以理解到,正是存在上述两种数据存储方式,相应的,才存在前文所述的如果查询索引值对应的存储关键字与查询关键字一致,则可存在两种数据查询方式。换句话说,采用何种数据存储方式,相应的,将采用与之对应的数据查询方式。还可以理解到,前文所述的查询索引值对应的存储关键字也可理解为存储索引值对应的存储关键字,可作上述理解的原因在于:由于数据查询针对的对象是已存储数据,因此,在根据查询索引值确定存储关键字时,实际上是在已存储数据中,根据存储索引值确定存储关键字。简而言之,在数据查询阶段,称为查询索引值,当需要利用已存储数据时,查询索引值即为存储索引值。
需要说明的是,上述两种数据存储方式的区别在于:方式二在确定各个存储值在存储区域中的地址后,即确定了偏移地址后,便将偏移地址与存储关键字对应存储。而方式一在数据存储时未存储各个存储值在存储区域中的地址,即未存储偏移地址。上述将导致如果索引值对应的存储关键字与查询关键字一致,则采用前文所述的两种数据查询方式时,在数据查询效率上将有所不同,具体的:如果采用数据查询中的方式一进行数据查询,则为了得到与存储关键字对应的存储值,需要计算存储关键字对应的存储值在存储区域中的地址,无法立即得到存储关键字对应的存储值。而由于数据查询中的方式二存在与存储关键字对应的偏移地址,该偏移地址是在数据存储阶段得到并存储的,因此,如果采用数据查询中的方式二进行数据查询,则可根据存储关键字确定偏移地址,并将偏移地址所指向的存储值作为查询结果。由于采用数据查询中的方式二,便无需再计算存储关键字对应的存储值在存储区域中的地址,因此,可立即得到存储关键字对应的存储值。上述表明,在数据查询阶段,相比于采用数据查询中的方式一,采用数据查询中的方式二,数据查询效率更高。需要说明的是,可根据实际情况选择数据存储方式,在此不作具体限定。
还需要说明的是,为了实现节省存储空间,可设置不同的存储值连续存储。可通过如下方式实现不同的存储值连续存储,具体的:根据存储索引值的顺序,依次将存储值进行存储,各存储值所占据的存储区域之间连续。通过上述方式实现不同的存储值连续存储的原因在于:由于通常并不是所有存储值的长度均相同,即不同存储值的长度有长有短,为了实现将全部存储值进行存储,传统技术中通常设置每个存储值所占据的存储区域的长度相同,该长度为各存储值中长度最大的存储值所占据的长度,上述将导致如果某存储值的长度小于设置这个统一长度,则由于其无法占满统一长度所对应的存储区域,使得存储空间被浪费。上述表明,在并不是所有存储值的长度均相同的情况下,为了实现不同的存储值连续存储,无法采用上述传统技术中所述的方式,而可以采用上述所述的根据存储索引值的顺序,依次将存储值进行存储,各存储值所占据的存储区域之间连续的方式。
另需要说明的是,针对数据查询的方式一,存储关键字和存储值可以存储在同一存储区域,也可以存储在不同的存储区域,具体可根据实际情况进行选择,在此不作具体限定。如果存储关键字和存储值存储在同一存储区域,则可以按照如下表1的方式存储。如果将存储关键字和存储值存储在不同的存储区域,则可以按照如下表2的方式存储存储关键字。
表1
表2
针对数据查询的方式二,存储关键字和与存储关键字组成存储键偏移对,存储键偏移对和存储值可以存储在同一存储区域,也可以存储在不同的存储区域,具体可根据实际情况进行选择,在此不作具体限定。如果存储键偏移对和存储值存储在同一存储区域,则可以按照如下表3的方式存储。如果将存储键偏移对和存储值存储在不同的存储区域,则可以按照如下表4的方式存储存储键偏移对。
表3
表4
考虑到前文所述的并不是所有存储值的长度均相同,为了实现不同的存储值连续存储,而采用了根据存储索引值的顺序,依次将存储值进行存储的方式。由于数据查询时,是随机查询的,即无法确定查询关键字是哪个关键字,相应的,也就无法确定查询索引值是哪个索引值。在根据查询关键字确定查询索引值后,需要快速确定查询索引值的地址以获取该地址存储的存储关键字。基于上述,无论是如前文所述的将存储关键字和存储值存储在同一存储区域,还是如前文所述的将存储键偏移对和存储值存储在同一存储区域,则在数据查询时均存在无法快速确定查询索引值的地址的情况,进而也就无法快速获取该地址存储的存储关键字。上述是由于:无论是如前文所述的将存储关键字和存储值存储在同一存储区域,还是如前文所述的将存储键偏移对和存储值存储在同一存储区域,则在不同的存储值连续存储且不同的存储值的长度可能不同的基础上,计算查询索引值(即存储索引值)所在地址时,均涉及到需要获取存储值的长度的问题,具体的:
如果将存储关键字和存储值存储在同一存储区域,则可参见表1,计算查询索引值N(即存储索引值N)所在地址时,需要获知前N-1个存储关键字的长度和前N-1个存储值的长度;如果将存储键偏移对和存储值存储在同一存储区域,则可参见表3,计算查询索引值N(即存储索引值N)所在地址时,需要获知前N-1个存储关键字的长度、前N-1个偏移地址的长度和前N-1个存储值的长度。上述表明,计算查询索引值(即存储索引值)所在地址时,均涉及到需要获取存储值的长度。可以理解到,如果不同的存储关键字的长度相同,不同的偏移地址的长度相同和不同的存储值的长度相同,则即使将存储关键字和存储值存储在同一存储区域,或者,将存储键偏移对和存储值存储在同一存储区域,也可以快速计算出查询关键字所在的地址。示例性的,如设置各存储关键字的长度为L1、各偏移地址的长度为L2以及各存储值的长度为L3,现需计算查询索引值N的地址。针对将存储关键字和存储值存储在同一存储区域而言,查询索引值N所在的地址为(N-1)(L1+L3)。针对将存储键偏移对和存储值存储在同一存储区域而言,查询索引值N所在的地址为(N-1)(L1+L2+L3)。上述表明,由于已认为不同存储值的长度是相同的,因此,实际上无需获知各个存储值的具体长度。而实际情况是通常不同的存储关键字的长度,以及,不同的偏移地址的长度均可认为是相同的,不同的存储值的长度是不同的,在此情况下,如果将存储关键字和存储值存储在同一存储区域,或者,将存储偏移对和存储值存储在同一存储区域,则将由于不同的存储值的长度的不同而无法快速计算出查询关键字所在的地址,即需要获知某查询索引值之前的各个存储值的具体长度,而无法采用统一设置的存储值的长度。
如果将存储关键字和存储值存储在不同的存储区域,则可参见表2,计算查询索引值N(即存储索引值N)所在地址时,需要获知前N-1个存储关键字的长度;如果将存储键偏移对和存储值存储在不同的存储区域,则可参加表4,计算查询索引值N(即存储索引值N)所在地址时,需要获知前N-1个存储关键字的长度和前N-1个偏移地址的长度。上述表明,如果将存储关键字和存储值存储在不同的存储区域,或者,将存储键偏移对和存储值存储在不同的存储区域,则在计算查询索引值的地址时,均无需再考虑存储值的长度。由于无需考虑存储值的长度,因此,可以实现快速确定查询索引值的地址以获取该地址存储的存储关键字。示例性的,如设置各存储关键字的长度为L1和各偏移地址的长度为L2,现需计算查询索引值N的地址。针对将存储关键字和存储值存储在不同的存储区域而言,查询索引值N所在的地址为(N-1)L1。针对将存储键偏移对和存储值存储在不同的存储区域而言,查询索引值N所在的地址为(N-1)(L1+L2)。
可以理解到,上述所述的将存储关键字和存储值存储在不同的存储区域,或者,将存储键偏移对和存储值存储在不同的存储区域,可实现快速确定查询索引值的地址以获取该地址存储的存储关键字,进而可提高数据查询效率。
需要说明的是,在数据存储阶段,存储关键字、存储值和偏移地址均的存储区域位于磁盘中。
本实施例的技术方案,通过根据数据查询请求中的查询关键字生成查询索引值,查询关键字与查询索引值一一对应,根据查询索引值对应的存储关键字与查询关键字,确定查询结果,上述由于查询关键字与查询索引值一一对应,因此,避免了现有技术中不同关键字对应的索引值相同的冲突,通过单次数据查询即可得到查询结果,从而提高了数据查询效率。
可选的,在上述技术方案的基础上,根据查询索引值对应的存储关键字与查询关键字,确定查询结果,具体可以包括:如果查询索引值对应的存储关键字与查询关键字一致,则将与存储关键字对应的存储值作为查询结果。或者,如果查询索引值对应的存储关键字与查询关键字一致,则获取与存储关键字对应的偏移地址,并将偏移地址所指向的存储值作为查询结果。
在本发明的实施例中,针对如果查询索引值对应的存储关键字与查询关键字一致,则将与存储关键字对应的存储值作为查询结果,可作如下理解:如果查询索引值对应的存储关键字与查询关键字一致,则可以说明查询关键字为存储关键字,而存储关键字为数据存储时,存储数据中的关键字,即存储关键字属于存储数据中的关键字,相应的,便可确定查询关键字属于存储数据中的关键字。由于数据查询的目的在于查找查询关键字对应的值,针对的对象是存储数据,因此如果该查询关键字对应的值存在,则该值将为数据存储时,存储数据中与存储关键字对应的存储值,即转换为从存储数据中确定将哪个存储关键字对应的存储值作为查询结果。可以理解到,应当将与查询关键字一致的存储关键字作为需要查找的存储关键字。上述表明,如果查询索引值对应的存储关键字与查询关键字一致,则存储关键字对应的存储值即为查询关键字对应的值,而数据查询的目的便是在于查找查询关键对应的值,换句话说,查询结果即为查找查询关键字对应的值,基于上述,可将存储关键字对应的存储值作为查询结果。
可以理解到,如果可以采用上述所述的确定查询索引值对应的存储关键字与查询关键字一致,则将与存储关键字对应的存储值作为查询结果,便可以说明是采用如下方式进行数据存储的,具体的:获取数据存储请求,数据存储请求包括存储关键字和与存储关键字对应的存储值。调用完美哈希函数,计算存储关键字对应的存储索引值。根据存储索引值的顺序,将存储关键字和存储值进行存储。上述建立了存储关键字与存储索引值之间的对应关系。在数据查询时,调用同样的完美哈希函数,计算查询关键字对应的查询索引值,根据查询索引值确定与查询索引值对应的存储关键字,如果查询关键字与存储关键字一致,则可以说明查询关键字即为存储关键字,便可将存储关键字对应的存储值作为查询关键字对应的值,并将其作为查询结果。
针对如果查询索引值对应的存储关键字与查询关键字一致,则获取与存储关键字对应的偏移地址,并将偏移地址所指向的存储值作为查询结果,可作如下理解:如果可以采用上述所述的确定查询索引值对应的存储关键字与查询关键字一致,则获取与存储关键字对应的偏移地址,并将偏移地址所指向的存储值作为查询结果,便可以说明是采用如下方式进行数据存储的,具体的:获取数据存储请求,数据存储请求包括存储关键字和与存储关键字对应的存储值。调用完美哈希函数,计算存储关键字对应的存储索引值。根据存储索引值的顺序,将数据存储请求中的存储值存储至第一文件,并得到偏移地址,偏移地址表示存储值的地址。根据存储索引值的顺序,将存储关键字与偏移地址对应存储至第二文件。可以理解到,上述在数据存储时,建立了如下对应关系,具体的:建立存储关键字与偏移地址的对应关系,偏移地址为与存储关键字对应的存储值的地址,即建立偏移地址与存储值的对应关系。基于上述,在数据查询时,便可基于上述建立的对应关系,查找查询关键字对应的值。如果查询索引值对应的存储关键字与查询关键字一致,则可以说明查询关键字为存储关键字,而存储关键字为数据存储时,存储数据中的关键字,即存储关键字属于存储数据中的关键字,相应的,便可确定查询关键字属于存储数据中的关键字。由于数据查询的目的在于查找查询关键字对应的值,针对的对象是存储数据,因此如果该查询关键字对应的值存在,则该值将为数据存储时,存储数据中与存储关键字对应的存储值,即转换为从存储数据中确定将哪个存储关键字对应的存储值作为查询结果。还可以理解到,应当将与查询关键字一致的存储关键字作为需要查找的存储关键字。同时,由于存储关键字与偏移地址的对应关系,以及,偏移地址与存储值的对应关系的存在,因此,可根据存储关键字确定对应的偏移地址,再根据偏移地址确定存储值。
上述表明,如果查询索引值对应的存储关键字与查询关键字一致,则根据存储关键字确定对应的偏移地址,偏移地址所指向的存储值即为查询关键字对应的值,而数据查询的目的便是在于查找查询关键对应的值,换句话说,查询结果即为查找查询关键字对应的值,基于上述,可将根据存储关键字确定的偏移地址所指向的存储值作为查询结果。
可选的,在上述技术方案的基础上,根据数据查询请求中的查询关键字生成查询索引值之前,具体还可以包括:将存储关键字和存储值分别存储在磁盘的不同存储区域。或者,将存储键偏移对和存储值分别存储在磁盘的不同存储区域,存储键偏移对包括存储关键字和对应的偏移地址。
在本发明的实施例中,为了实现快速确定查询索引值的地址以获取该地址存储的存储关键字,进而提高数据查询效率,可将存储关键字和存储值分别存储在磁盘的不同存储区域,或者,将由存储关键字和偏移地址组成的存储键偏移对和存储值分别存储在磁盘的不同存储区域。针对将由存储关键字和偏移地址组成的存储键偏移对和存储值分别存储在磁盘的不同存储区域,具体可通过如下方式实现:获取存储数据,存储数据包括存储关键字和与存储关键字对应的存储值。调用完美哈希函数,计算存储关键字对应的存储索引值。根据存储索引值的顺序,将存储值存储至磁盘中的第一文件,并得到偏移地址,偏移地址表示存储值的地址。根据存储索引值的顺序,将存储关键字与偏移地址对应存储至磁盘中的第二文件。上述第一文件和第二文件表示磁盘的不同存储区域。
上述所述的将由存储关键字和偏移地址组成的存储键偏移对和存储值分别存储在磁盘的不同存储区域,可提高数据查询效率的原因在于:如果将存储键偏移对和存储值存储在磁盘的同一存储区域,则可参见前文所述的表3,计算查询索引值N(即存储索引值N)所在地址时,需要获知前N-1个存储关键字的长度、前N-1个偏移地址的长度和前N-1个存储值的长度。上述表明,计算查询索引值(即存储索引值)所在地址时,涉及到需要获取存储值的长度。由于通常不同的存储关键字的长度,以及,不同的偏移地址的长度均可认为是相同的,不同的存储值的长度是不同的,在此情况下,如果将存储偏移对和存储值存储在磁盘的同一存储区域,则将由于不同的存储值的长度的不同而无法快速计算出查询关键字所在的地址,即需要获知某查询索引值之前的各个存储值的具体长度,而无法采用统一设置的存储值的长度,因此,将无法快速确定查询索引值的地址以获取该地址存储的存储关键字,进而也降低了数据查询效率。
如果将存储键偏移对和存储值存储在磁盘的不同存储区域,则可参加前文所述的表4,计算查询索引值N(即存储索引值N)所在地址时,只需要获知前N-1个存储关键字的长度和前N-1个偏移地址的长度,而无需再考虑存储值的长度。由于无需考虑存储值的长度,因此,可以实现快速确定查询索引值的地址以获取该地址存储的存储关键字。示例性的,如设置各存储关键字的长度为L1和各偏移地址的长度为L2,现需计算查询索引值N的地址。针对将存储键偏移对和存储值存储在磁盘的不同存储区域而言,查询索引值N所在的地址为(N-1)(L1+L2)。
可以理解到,上述所述的将存储键偏移对和存储值存储在磁盘的不同存储区域,可实现快速确定查询索引值的地址以获取该地址存储的存储关键字,进而可提高数据查询效率。
针对将存储关键字和存储值分别存储在磁盘的不同存储区域,具体可以通过如下方式实现:获取存储数据,存储数据包括存储关键字和与存储关键字对应的存储值。调用完美哈希函数,计算存储关键字对应的存储索引值。根据存储索引值的顺序,将存储值存储至磁盘中的第三文件。根据存储索引值的顺序,将存储关键字存储至磁盘中的第四文件。上述第三文件和第四文件表示磁盘的不同存储区域。
上述将存储关键字和存储值分别存储在磁盘的不同存储区域,可提高数据查询效率的原因在于:如果将存储关键字和存储值分别存储在磁盘的不同存储区域,则可参见前文所述的表1,计算查询索引值N(即存储索引值N)所在地址时,需要获知前N-1个存储关键字的长度和前N-1个存储值的长度。上述表明,计算查询索引值(即存储索引值)所在地址时,涉及到需要获取存储值的长度。由于通常不同的存储关键字的长度可认为是相同的,不同的存储值的长度是不同的,在此情况下,如果将存储关键字和存储值存储在磁盘的同一存储区域,则将由于不同的存储值的长度的不同而无法快速计算出查询关键字所在的地址,即需要获知某查询索引值之前的各个存储值的具体长度,而无法采用统一设置的存储值的长度,因此,将无法快速确定查询索引值的地址以获取该地址存储的存储关键字,进而也降低了数据查询效率。
如果将存储关键字和存储值存储在磁盘的不同存储区域,则可参加前文所述的表2,计算查询索引值N(即存储索引值N)所在地址时,只需要获知前N-1个存储关键字的长度,而无需再考虑存储值的长度。由于无需考虑存储值的长度,因此,可以实现快速确定查询索引值的地址以获取该地址存储的存储关键字。示例性的,如设置各存储关键字的长度为L1,现需计算查询索引值N的地址。针对将存储关键字和存储值存储在磁盘的不同存储区域而言,查询索引值N所在的地址为(N-1)L1。
可以理解到,上述所述的将存储关键字和存储值存储在磁盘的不同存储区域,可实现快速确定查询索引值的地址以获取该地址存储的存储关键字,进而可提高数据查询效率。
此外,由于存储关键字与存储索引值一一对应,因此,还可根据存储索引值的顺序,得到存储关键字的顺序,即根据存储索引值的顺序,将存储关键字进行排序。基于上述,由于存储关键字与存储值对应,因此,根据存储索引值的顺序,将存储值存储至磁盘中的第一文件,可作如下理解:根据存储关键字的顺序,将存储值存储至磁盘中的第一文件。根据存储索引值的顺序,将存储关键字与偏移地址对应存储至磁盘中的第二文件,可作如下理解:根据存储关键字的顺序,将存储关键与偏移地址对应存储至磁盘中的第二文件。根据存储索引值的顺序,将存储值存储至磁盘中的第三文件,可作如下理解:根据存储关键字的顺序,将存储值存储至磁盘中的第三文件。根据存储索引值的顺序,将存储关键字存储至磁盘中的第四文件,可作如下理解:根据存储关键字的顺序,将存储关键存储至磁盘中的第四文件。上述存储索引值的顺序可指存储索引值由小到大的顺序,相应的,根据存储索引值的顺序,得到存储关键字的顺序,可作如下理解:根据存储索引值由小到大的顺序,将存储关键字进行排序。
可选的,在上述技术方案的基础上,根据数据查询请求中的查询关键字生成查询索引值之前,具体还可以包括:将存储在磁盘的存储关键字和存储值分别映射到内存。或者,将存储在磁盘的存储键偏移对和存储值分别映射到内存。
在本发明的实施例中,针对大数据集而言,可离线执行数据存储操作,并得到存储有存储值的第一文件,以及,存储有存储键偏移对的第二文件。或者,得到存储有存储值的第三文件,以及,存储有存储关键字的第四文件。上述第一文件、第二文件、第三文件和第四文件存储在磁盘中。后续在线执行数据查询操作,为了提高数据查询效率,可将存储有存储值的第一文件,以及,存储有存储键偏移对的第二文件由存储在磁盘,映射到存储在内存,即将存储在磁盘的第一文件和第二文件分别映射到内存。或者,将存储有存储值的第三文件,以及,存储有存储关键字的第四文件由存储在磁盘,映射到存储在内存,即将存储在磁盘的第三文件和第四文件分别映射到内存。可以理解到,当将存储在磁盘的第一文件和第二文件分别映射到内存后,数据查询时,从第一文件中获取的存储值和从第二文件中获取的存储键偏移对便为从内存中获取的。当将存储在磁盘的第三文件和第四文件分别映射到内存后,数据查询时,从第三文件中获取的存储值和从第四文件中获取的存储关键字便为从内存中获取的。
为了提高将存储在磁盘的第一文件和第二文件映射到内存的效率,或者,提高将存储在磁盘的第三文件和第四文件映射到内存的效率,可采用调用内存映射函数的方式实现,具体的:调用内存映射函数,将存储在磁盘的第一文件和第二文件分别映射到内存。或者,调用内存映射函数,将存储在磁盘的第三文件和第四文件分别映射到内存。其中,内存映射函数(MMAP)是一种内存映射文件的方法,即可将一个文件或者其它对象映射到进程的地址空间,实现磁盘地址和进程虚拟地址空间中一段虚拟地址的一一对应关系。在实现上述的映射关系后,进程就可以采用指针的方式对该段内存进行读写操作,系统会自动回写脏页面到对应的磁盘上,即完成了对文件的操作实现共享内存而不必再调用读写函数。
简而言之,由于内存映射函数对文件的读取操作跨过了页缓存,减少了数据的拷贝次数,用内存读写取代I/O读写,提高了文件读取效率,进而也提高了将存储在磁盘的第一文件和第二文件映射到内存的效率,或者,提高了将存储在磁盘的第三文件和第四文件映射到内存的效率。由于是离线执行数据存储操作,在线执行数据查询操作,因此,上述可将存储在磁盘的第一文件和第二文件分别映射到内存,以及,将存储在磁盘的第三文件和第四文件映射到内存均理解为在线加载过程,相应的,提高了将存储在磁盘的第一文件和第二文件分别映射到内存的效率,以及,提高了将存储在磁盘的第三文件和第四文件分别映射到内存的效率,也即提高了在线加载效率。此外,将存储在磁盘的第一文件和第二文件分别映射到内存后,或者,将存储在磁盘的第三文件和第四文件分别映射到内存后,相比于在磁盘上的数据查询操作,在内存上的数据查询效率更高。
需要说明的是,上述内存映射函数是Unix或Linux下的系统调用。
还需要说明的是,针对基于存储数据构建的完美哈希函数可存储在第五文件,第五文件也存储在磁盘上,由于数据查询操作时,需要调用完美哈希函数计算查询关键字对应的查询索引值,因此,为了提高数据查询效率,完美哈希函数也需要由存储在磁盘映射到内存,即需要将存储在磁盘的第五文件映射到内存。与第一文件、第二文件、第三文件和第四文件所不同的是,可调用对应的专门用于将完美哈希函数由磁盘映射到内存空间的接口,将存储在磁盘的第五文件映射到内存。
可选的,在上述技术方案的基础上,至少以下信息之一连续存储:磁盘中的存储值和内存中的存储值。
在本发明的实施例中,为了节省存储空间,在存储存储值时,将不同的存储值连续存储,即不同的存储值所占的存储区域之间连续,上述存储值存储在磁盘中。如果数据存储时,不存储偏移地址,则可通过如下方式实现:根据存储关键字的顺序,依次将存储值存储至磁盘中的第一文件。如果数据存储时,存储偏移地址,则可通过如下方式实现:根据存储关键字的顺序,依次将存储值存储至磁盘中的第三文件。不同的存储值所占的存储区域之间连续。可以理解到,为了提高数据查询效率,需要将存储在磁盘的存储值映射到内存,当存储在磁盘的存储值连续存储时,映射到内存的存储值也连续存储。
可选的,在上述技术方案的基础上,至少以下信息之一连续存储:磁盘中的存储关键字、磁盘中的存储键偏移对、内存中的存储关键字和内存中的存储键偏移对。
在本发明的实施例中,为了节省存储空间,在存储存储键偏移对时,将不同的存储键偏移对连续存储,即不同的存储键偏移对所占的存储区域之间连续。可通过如下方式实现:根据存储关键字的顺序,依次将存储键偏移对存储至磁盘中的第二文件,不同的存储键偏移对所占的存储区域之间连续,上述存储键偏移对存储在磁盘中。可以理解到,为了提高数据查询效率,需要将存储在磁盘的存储键偏移对映射到内存,当存储在磁盘的存储键偏移对连续存储时,映射到内存的存储键偏移对也连续存储。
同样的,为了节省存储空间,在存储存储关键字时,将不同的存储关键字连续存储,即不同的存储关键字所占的存储区域之间连续。可通过如下方式实现:根据存储关键字的顺序,依次将存储关键字存储至磁盘中的第四文件,不同的存储关键字所占的存储区域之间连续,上述存储关键字存储在磁盘中。可以理解到,为了提高数据查询效率,需要将存储在磁盘的存储关键字映射到内存,当存储在磁盘的存储关键字连续存储时,映射到内存的存储关键字也连续存储。
可选的,在上述技术方案的基础上,查询索引值对应的存储关键字以及存储值在内存中,或者,查询索引值对应的存储关键字、偏移地址以及存储值在内存中。
在本发明的实施例中,在数据查询时,查询索引值对应的存储关键字,以及,与存储关键字对应的存储值存储在内存中。或者,查询索引值对应的存储关键字、与存储关键字对应的偏移地址,以及,与存储关键字对应的存储值存储在内存中,其中,存储关键字和偏移地址可组成存储键偏移对,即存储键偏移对存储在内存中。
需要说明的是,由于完美哈希函数适用的前提是关键字集合为静态关键字集合,因此,在数据存储阶段,如果存储关键字集合发生了变化,则需要重新根据变化后的存储关键字集合构建新的完美哈希函数。可通过调用CMPH库构建完美哈希函数。
图2为本发明实施例提供的另一种数据查询方法的流程图,本实施例是上述实施例的一个具体示例。本实施例可适用于提高键值对数据的数据查询效率的情况,该方法可以由数据查询装置来执行,该装置可以采用软件和/或硬件的方式实现,该装置可以配置于设备中,例如典型的是计算机等。如图2所示,该方法具体包括如下步骤:
步骤210、将存储键偏移对和存储值分别存储在磁盘的不同存储区域,存储键偏移对包括存储关键字和对应的偏移地址,磁盘中的存储值和存储键偏移对均连续存储。
步骤220、将存储在磁盘的存储键偏移对和存储值分别映射到内存。
步骤230、根据数据查询请求中的查询关键字生成查询索引值,查询关键字与查询索引值一一对应。
步骤240、查询索引值对应的内存中的存储关键字与查询关键字是否一致;若是,则执行步骤250;若否,则执行步骤260。
步骤250、获取与内存中的存储关键字对应的偏移地址,并将偏移地址所指向的存储值作为查询结果,内存中的存储值和存储键偏移对均连续存储。
步骤260、将空或预设值作为查询结果。
在本发明的实施例中,上述可作如下理解:根据数据存储请求中的存储关键字生成存储索引值,存储关键字与存储索引值一一对应。根据存储索引值的顺序,得到存储关键字的顺序。根据存储关键字的顺序,将数据存储请求中的存储值存储至磁盘中的第一文件,并得到偏移地址,偏移地址表示存储值的地址。根据存储关键字的顺序,将存储关键字与偏移地址对应存储至磁盘中的第二文件,第一文件和第二文件表示磁盘中的不同存储区域。为了提高数据查询效率,可调用内存映射函数分别将存储在磁盘中的第一文件和第二文件映射到对应的内存。其中,根据数据存储请求中的存储关键字生成存储索引值,存储关键字与存储索引值一一对应,可作如下理解:
获取数据存储请求,数据存储请求包括存储关键字。调用完美哈希函数,计算存储关键字对应的存储索引值。完美哈希函数通过如下方式生成:获取数据存储请求,数据存储请求包括存储关键字,存储关键字组成存储关键字集合,存储关键字集合为静态关键字集合。根据存储关键字集合构建完美哈希函数。上述可理解为数据存储阶段,经过数据存储阶段后,得到如下内容以便于后续数据查询时使用,具体的:其一、将存储数据进行数据存储,并基于存储数据,构建完美哈希函数。在数据查询阶段,存储数据作为数据查询所针对的对象,完美哈希函数可用于计算查询关键字对应的查询索引值;其二、存储键偏移对存储在磁盘的第一文件,存储值存储在磁盘的第二文件,使得存储键偏移对和存储值分别存储在磁盘的不同存储区域。当调用内存映射函数分别将磁盘中的存储键偏移对和存储值分别映射到对应的内存时,存储键偏移对和存储值分别存储在内存的不同存储区域。在数据查询阶段,由于存储键偏移对和存储值分别存储在内存的不同存储区域,因此,可实现快速确定查询索引值的地址以获取该地址存储的存储关键字,进而可提高数据查询效率。
此外,由于存储在磁盘的不同的存储键偏移对和不同的存储值,以及,存储在内存的不同的存储键偏移对和不同的存储值均连续存储,因此,可实现节省存储空间。需要说明的是,在数据存储阶段,可将完美哈希函数存储在磁盘的第五文件。同样的,为了提高数据查询效率,也可将存储在磁盘的第五文件映射到对应的内存。在数据查询时,获取数据查询请求,数据查询请求包括查询关键字。调用完美哈希函数,计算查询关键字对应的查询索引值。如果查询索引值对应的内存中的存储关键字与查询关键字一致,则获取与存储关键字对应的偏移地址,并将偏移地址所指向的存储值作为查询结果,内存中的存储值和存储键偏移对连续存储。
为了更好地理解本发明实施例所提供的技术方案,下面将通过具体示例进行说明,具体的:
如图3所示,给出了一种数据查询方法的应用示意图。图3中,存储数据为{18,王一;27,张三;1,李四;25,赵六;22,刘二;6,吴五;15,周日;13,杨四},其中,{18,27,1,25,22,6,15,13}表示由存储关键字组成的存储关键字集合;{王一,张三,李四,赵六,刘二,吴五,周日,杨四}表示由存储值组成的存储值集合,存储关键字与存储值一一对应。存储关键字用key表示,存储值用value表示,与存储关键字key对应的偏移地址用P(key)表示。
在数据存储阶段,首先,构建完美哈希函数。具体为:获取数据存储请求,数据存储请求包括存储关键字,存储关键字组成存储关键字集合,存储关键字集合为{18,27,1,25,22,6,15,13},存储关键字集合为静态关键字集合。根据存储关键字集合构建完美哈希函数,构建的完美哈希函数为H(key)=key mod11。其中,key表示存储关键字。需要说明的是,可将构建的完美哈希函数H(key)=keymod11存储在第五文件中。
其次,计算存储关键字对应的存储索引值。具体为:获取数据存储请求,数据存储请求包括存储关键字。调用完美哈希函数H(key)=key mod11,计算存储关键字对应的存储索引值,即得到存储关键字key=18对应的存储索引值H(18)=7;存储关键字key=27对应的存储索引值为H(27)=5;存储关键字key=1对应的存储索引值为H(1)=1;存储关键字key=25对应的存储索引值为H(25)=3;存储关键字key=22对应的存储索引值为H(22)=0;存储关键字key=6对应的存储索引值为H(6)=6;存储关键字key=15对应的存储索引值为H(15)=4;存储关键字key=13对应的存储索引值为H(13)=2。
再次,存储磁盘中的存储值和存储键偏移对。具体为:根据存储索引值的顺序,得到存储关键字的顺序。根据存储关键字的顺序,将数据存储请求中的存储值存储至磁盘中的第一文件,并得到偏移地址,偏移地址表示存储值的地址。根据存储关键字的顺序,将存储关键字与偏移地址对应存储至磁盘中的第二文件。
为了提高数据查询效率,将存储在磁盘中的第五文件映射到对应的内存,以及,调用内存映射函数分别将存储在磁盘中的第一文件和第二文件映射到对应的内存。在数据查询时,获取数据查询请求,数据查询请求包括查询关键字key’=22。调用完美哈希函数H(key’)=key’mod11,计算查询关键字key’=22对应的查询索引值H(22)=0,确定查询索引值H(22)=0对应的存储关键字key=22,其与查询关键字key’=22一致,则获取与存储关键字key=22对应的偏移地址为P(22)=0,并将偏移地址P(22)=0所指向的存储值value=刘二作为查询结果。
本实施例的技术方案,通过将存储键偏移对和存储值分别存储在磁盘的不同存储区域,实现了快速确定查询索引值的地址以获取该地址存储的存储关键字,从而提高了数据查询效率。根据数据查询请求中的查询关键字生成查询索引值,查询关键字与查询索引值一一对应,上述由于查询关键字与查询索引值一一对应,因此,避免了现有技术中不同关键字对应的索引值相同的冲突,通过单次数据查询即可得到查询结果,从而提高了数据查询效率。同时,由于磁盘中的存储值和存储键偏移对均连续存储,以及,内存中的存储值和存储键偏移对均连续存储,因此,实现了节省存储空间。
图4为本发明实施例提供的一种数据查询装置的结构示意图,本实施例可适用于提高键值对数据的数据查询效率的情况,该装置可以采用软件和/或硬件的方式实现,该装置可以配置于设备中,例如典型的是计算机等。如图4所示,该装置具体包括:
查询索引值生成模块310,用于根据数据查询请求中的查询关键字生成查询索引值,查询关键字与查询索引值一一对应。
查询结果确定模块320,用于根据查询索引值对应的存储关键字与查询关键字,确定查询结果。
本实施例的技术方案,通过根据数据查询请求中的查询关键字生成查询索引值,查询关键字与查询索引值一一对应,根据查询索引值对应的存储关键字与查询关键字,确定查询结果,上述由于查询关键字与查询索引值一一对应,因此,避免了现有技术中不同关键字对应的索引值相同的冲突,通过单次数据查询即可得到查询结果,从而提高了数据查询效率。
可选的,在上述技术方案的基础上,查询结果确定模块320,具体可以包括:
查询结果确定第一确定单元,用于如果查询索引值对应的存储关键字与查询关键字一致,则将与存储关键字对应的存储值作为查询结果。或者,
查询结果确定第二确定单元,用于如果查询索引值对应的存储关键字与查询关键字一致,则获取与存储关键字对应的偏移地址,并将偏移地址所指向的存储值作为查询结果。
可选的,在上述技术方案的基础上,该装置具体还可以包括:
第一存储模块,用于将存储关键字和存储值分别存储在磁盘的不同存储区域;或者,
第二存储模块,用于将存储键偏移对和存储值分别存储在磁盘的不同存储区域,存储键偏移对包括存储关键字和对应的偏移地址。
可选的,在上述技术方案的基础上,该装置具体还可以包括:
第一映射模块,用于将存储在磁盘的存储关键字和存储值分别映射到内存。
或者,
第二映射模块,用于将存储在磁盘的存储键偏移对和存储值分别映射到内存。
可选的,在上述技术方案的基础上,至少以下信息之一连续存储:磁盘中的存储值和内存中的存储值。
可选的,在上述技术方案的基础上,至少以下信息之一连续存储:磁盘中的存储关键字、磁盘中的存储键偏移对、内存中的存储关键字和内存中的存储键偏移对。
可选的,在上述技术方案的基础上,查询索引值对应的存储关键字以及存储值在内存中,或者,查询索引值对应的存储关键字、偏移地址以及存储值在内存中。
本发明实施例所提供的数据查询装置可执行本发明任意实施例所提供的数据查询方法,具备执行方法相应的功能模块和有益效果。
图5为本发明实施例提供的一种设备的结构示意图。图5显示的设备仅仅是一个示例,不应对本发明实施例的功能和使用范围带来任何限制。如图5所示,本发明实施例提供的设备,包括处理器41、存储器42、输入装置43和输出装置44;设备中处理器41的数量可以是一个或多个,图5中以一个处理器41为例;设备中的处理器41、存储器42、输入装置43和输出装置44可以通过总线或其他方式连接,图5中以通过总线连接为例。
存储器42作为一种计算机可读存储介质,可用于存储软件程序、计算机可执行程序以及模块,如本发明实施例中的特征点采样方法对应的程序指令/模块(例如,使用数据查询装置中的查询索引值生成模块310和查询结果确定模块320)。处理器41通过运行存储在存储器42中的软件程序、指令以及模块,从而执行各种功能应用以及数据处理,例如实现本发明实施例所提供的应用于设备的数据查询方法。
存储器42可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序;存储数据区可存储根据设备的使用所创建的数据等。此外,存储器42可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他非易失性固态存储器件。在一些实例中,存储器42可进一步包括相对于处理器41远程设置的存储器,这些远程存储器可以通过网络连接至设备。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。
输入装置43可用于接收用户输入的数字或字符信息,以产生与设备的用户设置以及功能控制有关的键信号输入。输出装置44可包括显示屏等显示设备。
当然,本领域技术人员可以理解,处理器还可以实现本发明任意实施例所提供应用于设备的数据查询方法的技术方案。该设备的硬件结构以及功能可参见实施例的内容解释。
本发明实施例还提供了一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现如本发明实施例所提供的一种数据查询方法,该方法包括:
根据数据查询请求中的查询关键字生成查询索引值,查询关键字与查询索引值一一对应。
根据查询索引值对应的存储关键字与查询关键字,确定查询结果。
本发明实施例的计算机存储介质,可以采用一个或多个计算机可读的介质的任意组合。计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质。在本文件中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。
计算机可读的信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。计算机可读的信号介质还可以是计算机可读存储介质以外的任何计算机可读介质,该计算机可读介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。
计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括——但不限于无线、电线、光缆、射频等等,或者上述的任意合适的组合。
可以以一种或多种程序设计语言或其组合来编写用于执行本发明操作的计算机程序代码,例如,C++、C语言和JAVA等。程序代码可以完全地在用户计算机上执行、部分地在用户计算机上执行、作为一个独立的软件包执行、部分在用户计算机上部分在远程计算机上执行、或者完全在远程计算机或服务器上执行。在涉及远程计算机的情形中,远程计算机可以通过任意种类的网络——局域网(Local Area Network,LAN)或广域网(Wide AreaNetwork,WAN)—连接到用户计算机,或者,可以连接到外部计算机(例如利用因特网服务提供商来通过因特网连接)。
当然,本发明实施例所提供的一种计算机可读存储介质,其计算机可执行指令不限于如上所述的方法操作,还可以执行本发明任意实施例所提供的设备的数据查询方法的相关操作。对存储介质的介绍可参见实施例中的内容解释。
注意,上述仅为本发明的较佳实施例及所运用技术原理。本领域技术人员会理解,本发明不限于这里所述的特定实施例,对本领域技术人员来说能够进行各种明显的变化、重新调整和替代而不会脱离本发明的保护范围。因此,虽然通过以上实施例对本发明进行了较为详细的说明,但是本发明不仅仅限于以上实施例,在不脱离本发明构思的情况下,还可以包括更多其他等效实施例,而本发明的范围由所附的权利要求范围决定。
Claims (8)
1.一种数据查询方法,其特征在于,包括:
根据数据查询请求中的查询关键字生成查询索引值,所述查询关键字与所述查询索引值一一对应;
根据所述查询索引值对应的存储关键字与所述查询关键字,确定查询结果;所述存储关键字为已存储数据中的关键字;
所述根据所述查询索引值对应的存储关键字与所述查询关键字,确定查询结果,包括:
如果所述查询索引值对应的存储关键字与所述查询关键字一致,则将与所述存储关键字对应的存储值作为查询结果;或者,获取与所述存储关键字对应的偏移地址,并将所述偏移地址所对应的存储值作为查询结果;其中,通过调用完美哈希函数,计算所述存储关键字对应的存储值;所述偏移地址表示所述存储值所在的地址;
所述根据数据查询请求中的查询关键字生成查询索引值之前,还包括:
将存储关键字和存储值分别存储在磁盘的不同存储区域;或者,
将存储键偏移对和存储值分别存储在磁盘的不同存储区域,所述存储键偏移对包括存储关键字和对应的偏移地址。
2.根据权利要求1所述的方法,其特征在于,所述根据数据查询请求中的查询关键字生成查询索引值之前,还包括:
将存储在磁盘的存储关键字和存储值分别映射到内存;或者,
将存储在磁盘的存储键偏移对和存储值分别映射到内存。
3.根据权利要求2所述的方法,其特征在于,至少以下信息之一连续存储:磁盘中的存储值和内存中的存储值。
4.根据权利要求3所述的方法,其特征在于,至少以下信息之一连续存储:磁盘中的存储关键字、磁盘中的存储键偏移对、内存中的存储关键字和内存中的存储键偏移对。
5.根据权利要求3或4所述的方法,其特征在于,所述查询索引值对应的存储关键字以及存储值存储在内存中,或者,所述查询索引值对应的存储关键字、偏移地址以及存储值存储在内存中。
6.一种数据查询装置,其特征在于,包括:
查询索引值生成模块,用于根据数据查询请求中的查询关键字生成查询索引值,所述查询关键字与所述查询索引值一一对应;
查询结果确定模块,用于根据所述查询索引值对应的存储关键字与所述查询关键字,确定查询结果;所述存储关键字为已存储数据中的关键字;
所述查询结果确定模块,具体包括:查询结果确定第一确定单元或者查询结果确定第二确定单元;
所述查询结果确定第一确定单元,用于如果查询索引值对应的存储关键字与查询关键字一致,则将与存储关键字对应的存储值作为查询结果;
所述查询结果确定第二确定单元,用于如果查询索引值对应的存储关键字与查询关键字一致,则获取与存储关键字对应的偏移地址,并将偏移地址所指向的存储值作为查询结果;其中,通过调用完美哈希函数,计算所述存储关键字对应的存储值;所述偏移地址表示所述存储值所在的地址;
第一存储模块,用于将存储关键字和存储值分别存储在磁盘的不同存储区域;或者,
第二存储模块,用于将存储键偏移对和存储值分别存储在磁盘的不同存储区域,存储键偏移对包括存储关键字和对应的偏移地址。
7.一种数据查询设备,其特征在于,包括:
一个或多个处理器;
存储器,用于存储一个或多个程序;
当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现如权利要求1-5任一所述的方法。
8.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,该程序被处理器执行时实现如权利要求1-5任一所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910441952.XA CN110175174B (zh) | 2019-05-24 | 2019-05-24 | 一种数据查询方法、装置、设备及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910441952.XA CN110175174B (zh) | 2019-05-24 | 2019-05-24 | 一种数据查询方法、装置、设备及存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110175174A CN110175174A (zh) | 2019-08-27 |
CN110175174B true CN110175174B (zh) | 2023-08-29 |
Family
ID=67695725
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910441952.XA Active CN110175174B (zh) | 2019-05-24 | 2019-05-24 | 一种数据查询方法、装置、设备及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110175174B (zh) |
Families Citing this family (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110941730B (zh) * | 2019-11-29 | 2020-12-08 | 南京甄视智能科技有限公司 | 基于人脸特征数据偏移的检索方法与装置 |
CN111177476B (zh) * | 2019-12-05 | 2023-08-18 | 北京百度网讯科技有限公司 | 数据查询方法、装置、电子设备及可读存储介质 |
CN111241108B (zh) * | 2020-01-16 | 2023-12-26 | 北京百度网讯科技有限公司 | 基于键值对kv系统的索引方法、装置、电子设备和介质 |
CN113407550A (zh) * | 2021-08-19 | 2021-09-17 | 支付宝(杭州)信息技术有限公司 | 数据存储及查询方法、装置及数据库系统 |
CN114817151A (zh) * | 2022-04-13 | 2022-07-29 | 北京字节跳动网络技术有限公司 | 一种数据处理方法、装置、计算机设备及存储介质 |
CN118394714B (zh) * | 2024-06-26 | 2024-08-23 | 湖南交通物流信息服务有限公司 | 一种加密文件索引快速构建与存储方法 |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10339135B2 (en) * | 2015-11-06 | 2019-07-02 | International Business Machines Corporation | Query handling in search systems |
CN109388654A (zh) * | 2017-08-04 | 2019-02-26 | 北京京东尚科信息技术有限公司 | 一种查询数据表的方法和装置 |
-
2019
- 2019-05-24 CN CN201910441952.XA patent/CN110175174B/zh active Active
Also Published As
Publication number | Publication date |
---|---|
CN110175174A (zh) | 2019-08-27 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110175174B (zh) | 一种数据查询方法、装置、设备及存储介质 | |
US11068441B2 (en) | Caseless file lookup in a distributed file system | |
US8601474B2 (en) | Resuming execution of an execution plan in a virtual machine | |
US8812489B2 (en) | Swapping expected and candidate affinities in a query plan cache | |
US9369332B1 (en) | In-memory distributed cache | |
US11308060B2 (en) | Method, apparatus, device and storage medium for managing index | |
CN113704291A (zh) | 数据查询方法、装置、存储介质及电子设备 | |
US8321421B2 (en) | Storage device having full-text search function | |
US20140280019A1 (en) | Systems and methods for managing data in relational database management system | |
CN111737564A (zh) | 一种信息查询方法、装置、设备及介质 | |
CN111488371A (zh) | 一种数据查询方法和装置 | |
US8396858B2 (en) | Adding entries to an index based on use of the index | |
CN112905587B (zh) | 数据库的数据管理方法、装置及电子设备 | |
WO2024016789A1 (zh) | 日志数据查询方法、装置、设备和介质 | |
CN111949648B (zh) | 内存缓存数据系统和数据索引方法 | |
EP4242819A1 (en) | System and method for efficiently obtaining information stored in an address space | |
CN111125216A (zh) | 数据导入Phoenix的方法及装置 | |
CN111708715A (zh) | 内存分配方法、内存分配装置及终端设备 | |
CN107357853B (zh) | 一种redis控制台的操作方法、装置及计算机系统 | |
CN115237954A (zh) | 基于pim装置的布谷鸟哈希查询的方法、pim装置及系统 | |
US10877685B2 (en) | Methods, devices and computer program products for copying data between storage arrays | |
CN114463068A (zh) | 一种数据处理方法和装置 | |
CN114064729A (zh) | 一种数据检索方法、装置、设备及存储介质 | |
CN114969020B (zh) | 一种数据处理方法、装置、设备及介质 | |
CN110569258A (zh) | 规则处理系统、方法、电子终端、及存储介质 |
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 |