CN110532284A - 海量数据存储和检索方法、装置、计算机设备及存储介质 - Google Patents

海量数据存储和检索方法、装置、计算机设备及存储介质 Download PDF

Info

Publication number
CN110532284A
CN110532284A CN201910843509.5A CN201910843509A CN110532284A CN 110532284 A CN110532284 A CN 110532284A CN 201910843509 A CN201910843509 A CN 201910843509A CN 110532284 A CN110532284 A CN 110532284A
Authority
CN
China
Prior art keywords
key value
value
data
hash
critical field
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.)
Granted
Application number
CN201910843509.5A
Other languages
English (en)
Other versions
CN110532284B (zh
Inventor
何海龙
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Shenzhen Qianhai Huanlianyi Information Technology Service Co Ltd
Original Assignee
Shenzhen Qianhai Huanlianyi Information Technology Service Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Shenzhen Qianhai Huanlianyi Information Technology Service Co Ltd filed Critical Shenzhen Qianhai Huanlianyi Information Technology Service Co Ltd
Priority to CN201910843509.5A priority Critical patent/CN110532284B/zh
Publication of CN110532284A publication Critical patent/CN110532284A/zh
Application granted granted Critical
Publication of CN110532284B publication Critical patent/CN110532284B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/24Querying
    • G06F16/242Query formulation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/24Querying
    • G06F16/245Query processing
    • YGENERAL 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
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE 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/00Energy efficient computing, e.g. low power processors, power management or thermal management

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Computational Linguistics (AREA)
  • Data Mining & Analysis (AREA)
  • Databases & Information Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Mathematical Physics (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本申请公开了海量数据存储和检索方法、装置、计算机设备及存储介质,其中,方法包括:对数据的关键字段进行hash计算,并将计算得到的hash值作为第一key值;对数据的关键字段进行截取,并将截取得到的截取值作为第二key值;对数据的关键字段进行拼接,并将拼接得到的拼接值作为第三key值;对数据的关键字段进行取模,并将取模得到的取模值作为第四key值;将所述第一key值、第二key值、第三key值和第四key值中的至少两个进行拼接作为最终key值;根据所述最终key值将数据存储至相应节点的服务器中。本申请通过对关键字段进行计算和组合确定最终key值,然后依据最终key值进行存储和检索,提高了存储和检索效率。

Description

海量数据存储和检索方法、装置、计算机设备及存储介质
技术领域
本申请涉及数据存储技术领域,尤其涉及海量数据存储和检索方法、装置、计算机设备及存储介质。
背景技术
随着科技的发展,各种业务场景所产生的数据量非常之大,例如一些票据类的产品,每天都会产生海量数据,如发票、流水、股票、提单等数据,在这种数据量比较大的情况下,如果仍通过mysql、oracle等传统数据库进行存储,会造成存储的效率低,同时查询的速度会非常慢,且mysql或者oracle单机存储能力有限,所以为了解决上述问题,目前最为常用的解决方式是通过hbase等数据库进行大数据分布式存储。但这种大数据分布式存储技术对于海量数据来说,存储和查询效率仍有待提高。
申请内容
本申请实施例提供了海量数据存储和检索方法、装置、计算机设备及存储介质,旨在解决现有技术中海量数据存储和查询效率有待提高的问题。
第一方面,本申请实施例提供了一种海量数据存储和检索方法,其包括:
对数据的关键字段进行hash计算,并将计算得到的hash值作为第一key值;
对数据的关键字段进行截取,并将截取得到的截取值作为第二key值;
对数据的关键字段进行拼接,并将拼接得到的拼接值作为第三key值;
对数据的关键字段进行取模,并将取模得到的取模值作为第四key值;
将所述第一key值、第二key值、第三key值和第四key值中的一个作为最终key值或者将所述第一key值、第二key值、第三key值和第四key值中的至少两个进行拼接作为最终key值;
根据所述最终key值将数据存储至相应节点的服务器中;
当进行检索时,根据所述最终key值在相应的服务器中查找对应的数据。
第二方面,本申请实施例提供了一种海量数据存储和检索装置,其包括:
第一计算模块,用于对数据的关键字段进行hash计算,并将计算得到的hash值作为第一key值;
第二计算模块,用于对数据的关键字段进行截取,并将截取得到的截取值作为第二key值;
第三计算模块,用于对数据的关键字段进行拼接,并将拼接得到的拼接值作为第三key值;
第四计算模块,用于对数据的关键字段进行取模,并将取模得到的取模值作为第四key值;
综合模块,用于将所述第一key值、第二key值、第三key值和第四key值中的一个作为最终key值或者将所述第一key值、第二key值、第三key值和第四key值中的至少两个进行拼接作为最终key值;
存储模块,用于根据所述最终key值将数据存储至相应节点的服务器中;
检索模块,用于当进行检索时,根据所述最终key值在相应的服务器中查找对应的数据。
第三方面,本申请实施例提供了一种计算机设备,其包括存储器、处理器及存储在所述存储器上并可在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现如第一方面所述的海量数据存储和检索方法。
第四方面,本申请实施例提供了一种计算机可读存储介质,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现如第一方面所述海量数据存储和检索方法。
本申请实施例提供了一种海量数据存储和检索方法,其包括:对数据的关键字段进行hash计算,并将计算得到的hash值作为第一key值;对数据的关键字段进行截取,并将截取得到的截取值作为第二key值;对数据的关键字段进行拼接,并将拼接得到的拼接值作为第三key值;对数据的关键字段进行取模,并将取模得到的取模值作为第四key值;将所述第一key值、第二key值、第三key值和第四key值中的一个作为最终key值或者将所述第一key值、第二key值、第三key值和第四key值中的至少两个进行拼接作为最终key值;根据所述最终key值将数据存储至相应节点的服务器中;当进行检索时,根据所述最终key值在相应的服务器中查找对应的数据。上述方法通过对关键字段进行计算和组合确定最终key值,然后依据最终key值进行存储和检索,提高了存储和检索效率。本申请实施例同时还提供了一种海量数据存储和检索装置、一种计算机可读存储介质和一种计算机设备,具有上述有益效果,在此不再赘述。
附图说明
为了更清楚地说明本申请实施例技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本申请实施例提供的海量数据存储和检索方法的流程示意图;
图2为本申请实施例提供的海量数据存储和检索装置的结构示意图。
具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
应当理解,当在本说明书和所附权利要求书中使用时,术语“包括”和“包含”指示所描述特征、整体、步骤、操作、元素和/或组件的存在,但并不排除一个或多个其它特征、整体、步骤、操作、元素、组件和/或其集合的存在或添加。
还应当理解,在此本申请说明书中所使用的术语仅仅是出于描述特定实施例的目的而并不意在限制本申请。如在本申请说明书和所附权利要求书中所使用的那样,除非上下文清楚地指明其它情况,否则单数形式的“一”、“一个”及“该”意在包括复数形式。
还应当进一步理解,在本申请说明书和所附权利要求书中使用的术语“和/或”是指相关联列出的项中的一个或多个的任何组合以及所有可能组合,并且包括这些组合。
请参阅图1,图1为本申请实施例提供的一种海量数据存储和检索方法的流程示意图,方法可以包括步骤:
S101、对数据的关键字段进行hash计算,并将计算得到的hash值作为key值;
S102、对数据的关键字段进行截取,并将截取得到的截取值作为第二key值;
S103、对数据的关键字段进行拼接,并将拼接得到的拼接值作为第三key值;
S104、对数据的关键字段进行取模,并将取模得到的取模值作为第四key值;
S105、将所述第一key值、第二key值、第三key值和第四key值中的一个作为最终key值或者将所述第一key值、第二key值、第三key值和第四key值中的至少两个进行拼接作为最终key值;
S106、根据所述最终key值将数据存储至相应节点的服务器中;
S107、当进行检索时,根据所述最终key值在相应的服务器中查找对应的数据。
本申请实施例中,可以采用多种方式对数据的关键字段进行处理,例如可以对数据的关键字段进行hash计算,也可以对数据的关键字段进行截取(即直接截取关键字段的一部分),也可以对数据的关键字段进行拼接(即将数据的不同关键字段进行拼接,可以是将不同关键字段中的一部分或全部进行拼接),也可以对数据的关键字段进行取模(具体可以是对服务器的节点数进行取模,如所述关键字段包含数字外的其他字符,则可以先进行hash计算再取模),这样可以将这些处理方式得到的key值单独作为最终key值,也可以进行拼接组合得到最终key值,从而确保全局唯一。
所述步骤S101中,对数据的关键字段进行也可以对数据的关键字段进行hash计算,将计算得到的hash值作为第一key值,以避免热点读写问题。
本申请实施例中,采用了一种或者多种hash计算组合的方式进行处理,所述的hash计算包括但不限于murmurhash3、MD4hash、MD5hash、SHA-1hash等方式。
进一步,所述步骤S101包括:对数据的关键字段进行不同的hash计算,得到多个hash值,并将多个hash值进行组合得到第一计算结果;对数据不同关键字段进行hash计算,得到多个hash值并进行组合得到第二计算结果;对数据关键字段进行hash计算,得到hash值,然后利用hash值对服务器的节点数进行取模运算得到第三计算结果;对数据的不同关键字段进行hash计算后,得到多个hash值,并截取各hash值中的一段或者多段并组合得到第四计算结果;将上述计算结果中的一种作为第一key值或几种进行拼接得到第一key值。
也就是说,hash计算的方式包括多种,hash计算可以采用一种或者多种hash组合的方式。具体的,计算的方式可以是对同一数据的同一个关键字段进行不同的hash计算得到多个hash值,然后进行组合;也可以是对同一数据的不同关键字段进行相同的hash计算得到多个hash值,然后进行组合;也可以是对数据关键字段进行hash计算,得到hash值,然后利用hash值对服务器的节点数进行取模运算;也可以是对同一数据的不同关键字段进行hash计算,得到多个hash值,然后各hash值中的一段或者多段,再进行组合;可以采用上述任意一种计算方式的计算结果直接作为最终key值,也可以将上述任意两种、三种或四种计算方式的计算结果进行拼接最为最终key值。以数据为发票数据为例,计算的方式包括但不限于:一、对同一数据的同一个关键字段例如票号进行不同的hash计算然后进行组合;二、对同一数据的不同关键字段例如票号和销方分别进行相同的hash计算然后进行组合;三、对数据关键字段例如票号进行hash计算,得到hash值,然后利用hash值对服务器的节点数进行取模运算;四、对于同一数据的不同关键字段例如票号进行hash计算后,截取各hash值中的一段或者多段然后进行组合,然后采用上述任意一种计算方式的计算结果直接作为最终key值,也可以将上述任意两种、三种或四种计算方式的计算结果进行拼接最为最终key值
对于第一种方式,举例来说,对于发票数据,可以对同一数据的同一关键字段销方税号(sellerTaxNo)分别进行murmurhash3计算和MD5hash计算,从而得到第一hash值和第二hash值,然后将这两个hash值按照预定的方式进行组合从而得到第一计算结果,例如第一hash值为0000,第二hash值为1111,那么第一计算结果可以是00001111。
对于第二种方式,举例来说,对于发票数据,可以对同一数据的关键字段销方税号(sellerTaxNo)以及机构号(orgId)分别进行MD5hash计算,从而得到第一hash值和第二hash值,然后将这两个hash值按照预定的方式进行组合,从而得到第二计算结果,例如第一hash值为0000,第二hash值为1111,那么第二计算结果可以是11110000。
对于第三种方式,举例来说,对于发票数据,可以对同一数据的关键字段销方税号(sellerTaxNo)进行MD5hash计算,从而得到第一hash值,然后对第一hash值对服务器的节点数50进行取模运算得到19,那么第三计算结果为19。
对于第四种方式,举例来说,对于发票数据,可以对同一数据的关键字段销方税号(sellerTaxNo)进行MD5hash计算后得到第一hash值,同时对其关键字段机构号(orgId)进行murmurhash3计算得到第二hash值,然后截取第一hash值中的两位如得到00,同时截取第二hash值中的三位如得到111,再进行拼接,得到的第四计算结果可以是00111,这样可以以更少的位数达到全局唯一的目的。
所以,本申请实施例中,优选单独采用第四计算结果作为第一key值或者采用第四计算结果结合其他计算结果拼接第一key值,这样可以使最终key值全局唯一,并且位数更少。进一步,在按照第四种方式进行计算时,可以为不同关键字段设置不同的等级,等级高的关键字段,则会从对应hash值中截取更多的位数,等级低的关键字段,则会从对应hash值中截取更少的位数,这样可以在第四计算结果中体现出关键字段的重要程度。例如对于三个关键字段:销方税号、机构号、发票ID,可以预先将销方税号这个关键字段设置为第一级,将机构号这个关键字段设置为第二级,将发票ID这个关键字段设置为第三级。同时预先设置第一级关键字段计算出的hash值截取四位得到第一子key值,第二级关键字段计算出的hash值截取三位得到第二子key值,第三级关键字段计算出的hash值截取两位得到第三子key值,将三者组合,这样最终确定的第四计算结果包含九位,并且第一级关键字段、第二级关键字段、第三级关键字段对应所占比例为4:3:2。在进行组合时,可将第一子key值放在最前、将第二子key值放在中间,将第三子key值放在最后。
为了使第四计算结果的位数统一,可以对上述得到的第四计算结果进行位数对齐,使第四计算结果的位数达到标准位数,如果单独将第四计算结果作为第一key值,那么就是使第一key值的位数为标准位数,如果单独将第一key值作为最终key值,那么就是使最终key值的位数为标准位数。对齐的方式要么是删除要么是增加,具体可根据初步的第四计算结果来确定。
删除的规则是:当总的待删除的位数大于或等于hash值个数时,则对每个hash值进行位数删除,并且删除的位数相同,在仍有待删除的位数剩余时(即总的待删除的位数不是hash值个数的整数倍,例如hash值为3个,总的待删除的位数为8个,所以可先对每个hash值删除2位,此时待删除的位数剩余2个,待删除的位数小于hash值个数),则按照关键字段等级从低到高依次删除对应hash值中的位数,若关键字段等级相同,则随机删除对应hash值中的位数;当总的待删除的位数小于hash值个数时,则直接按照对应关键字段等级从低到高依次删除hash值中的位数,若关键字段等级相同,则随机删除对应hash值中的位数。例如当hash值为三个并且对应的关键字段分别为第一级、第二级、第二级时,那么如果继续按照上述方法将会分别截取4位、3位、3位,这样就会得到10位的初步第四计算结果,在此情况下,可对初步第四计算结果进行位数删除。例如在上述例子中,初步第四计算结果为10位,而标准的位数为9位,所以待删除的位数为1位,hash值的个数为3,所以1小于3,故可以直接按照对应关键字段等级从低到高依次删除hash值中的位数,即删除第二级关键字段对应的hash值,由于具有两个第二级的关键字段,所以可以随机删除其中一个hash值的位数。另外,在进行删除时,优先从hash值末尾开始删除。
增加的规则是:当总的待增加的位数大于或等于hash值个数时,则对每个hash值进行位数增加,并且增加的位数相同,在仍有待增加的位数剩余时(即总的待增加的位数不是hash值个数的整数倍,例如hash值为3个,总的待增加的位数为8个,所以可先对每个hash值增加2位,此时待增加的位数剩余2个,此时待增加的位数小于hash值个数),则按照对应关键字段等级从高到低依次增加hash值中的位数,若关键字段等级相同,则随机增加对应hash值中的位数;当总的待增加的位数小于hash值个数时,则直接按照对应关键字段等级从高到低依次增加hash值中的位数,若关键字段等级相同,则随机增加对应hash值中的位数。假设初步第四计算结果为8位,而标准的位数为9位,所以待增加的位数为1位,hash值的个数为3,所以1小于3,故可以直接按照对应关键字段等级从高到低依次删除hash值中的位数,假设关键字段中最高的等级为第一级,且第一级关键字段有两个,此时可随机选择一个第一级关键字段对应的hash值,并对其进行位数增加。另外,在进行增加时,优先从初步第四计算结果中各hash值的末尾开始向前增加,例如初步第四计算结果为abcdefghi,增加位数后的第四计算结果可能为abcdefghiba。并且增加的位数的值可以设置为对称结构,例如对初步第四计算结果中某个hash值进行位数增加时,末尾增加的位数值与对应hash值中第一个位数的值相同,末尾增加的第二个位数的值与对应hash值中第二个位数的值相同,以此类推,例如初步第四计算结果为abcdefghi,其中第一个hash值为abc,第二个hash值为def,第三个hash值为ghi,那么当需要增加7个位数时,第一个hash值可更新为abcba,第二个hash值可更新为defed,第三个hash值可更新为ghihg,此时共增加6个位数,所以还需增加1位,假如第一个hash值对应的关键字段等级最高,所以可继续对第一个hash值进行位数增加,具体为abccba。所以最终的第四计算结果为abccbadefedghihg。
从hash值截取的方式,可以是根据等级来设置,例如对于第一级的关键字段计算出的hash值则截取最前面的四位,对于第二级的关键字段计算出的hash值可以截取中间的三位,对于第三级的关键字段计算出的hash值可以截取末尾的两位。这样不同等级的关键字段,其所截取的位置有所不同,从而避免不同等级的关键字段截取位置重复,尽量使最终的第四计算结果达到全局唯一的目的。
对于第二key值、第三key值和第四key值的计算方式则比较简单,第二key值是直接从同一数据的关键字段上截取其中的几位或全部得到,当然可以是截取多个关键字段进行组合得到也可以是截取其中一个关键字段得到。第三key值是直接将同一数据的多个关键字段进行组合拼接得到。第四key值则是利用数据的关键字段对服务器节点数进行取模得到,当然可以是利用不同关键字段对服务器节点数进行取模然后组合得到,也可以是利用一个关键字段对服务器节点数进行取模得到。
本申请实施例中,根据数据的最终key值来确定数据的存储节点,即存储数据的服务器与节点是对应的,根据最终key值即可确定将数据存储在哪个节点的服务器中。
进一步,所述步骤S106包括:步骤一、获取最终key值中字符;步骤二、根据所述字符确定与之匹配的服务器;步骤三、将所述数据存储至相应节点的服务器。
具体的,首先获取最终key值中的字符,然后根据字符确定与之匹配的服务器,每一个服务器都与字符对应,如一一对应,这样即可将数据存储至相应节点的服务器中。在一个具体应用场景中,所述获取最终key值中字符包括:获取最终key值中首字符。即通过最终key值中的首字符来确定服务器的节点,当然,需要预先为各节点的服务器设置关联的字符。也就是说,存储数据的时候生成最终key值并保存到相应数据中,并且根据最终key值来确定存储的位置,例如最终key值首字符是1,那么将所有最终key值首字符为1的数据存储到对应节点的服务器。
最终key值为纯数字,所以最终key值首字符可能的数值是从0-9,所以其可对应的服务器节点不超过10个,当需要增加服务器时,则可以取最终key值的首两个字符,那么其可能的数值是从00-99,所以其可对应的服务器节点不超过100个,当需要再增加服务器时,则可以继续增加所取的字符数量。
进一步,所述将所述数据存储至相应节点的服务器包括:
采用列存储或者键值对的方式存储数据。本申请实施例的方法可以采用列式存储或者键值对(key-value)的方式进行存储。
在按照最终key值进行存储后,可以继续依据最终key值进行检索,以便快速查找数据。
进一步,所述步骤S107包括:步骤一、接收指定的关键字段以及指定的目标字段范围;步骤二、根据所述指定的关键字段以及指定的目标字段范围确定最终key值范围;步骤三、根据所述最终key值范围从服务器中查找相应范围的数据。
具体的,可以先指定一个或几个关键字段,然后指定一个或几个目标字段的范围,然后根据指定的关键字段以及指定的目标字段范围来确定最终key值范围,最后根据最终key值范围即可在对应服务器中查找该范围的数据即可。
例如,可以指定两个关键字段销方税号(sellerTaxNo)和机构号(orgId),指定目标字段为发票Id,目标字段的范围为从00000000000000000000至fffffffffffffffffff,这样就可以确定最终key值范围,然后根据最终key值范围就可以扫描出sellerTaxNo和机构号对应的全部发票Id从而查到所有需要的发票数据,采用上述方法可以提高查询效率,特别是对hbase数据库来说,查询效率有较大提升,其中,即本申请所使用的数据库优选为hbase数据库,所述hbase数据库是一个分布式的、面向列的开源数据库,HBase在Hadoop之上提供了类似于Bigtable的能力。HBase是Apache的Hadoop项目的子项目。HBase不同于一般的关系数据库,它是一个适合于非结构化数据存储的数据库,另一个不同的是HBase基于列的而不是基于行的模式,其是一个高可靠性、高性能、面向列、可伸缩的分布式存储系统,利用HBase技术可在PC服务器上搭建起大规模结构化存储集群。
本申请实施例中,所述数据具体可以是发票数据,发票数据中的关键字段可以是发票号、时间、销方、销方归属地、销方编码等,将最常用的关键字段选取出来作为设计key的基础字段,通过前面的方法对关键字段进行各种计算并进行组合,以更均匀地从分布式集群中的每个服务器中获取数据,避免了单机压力过大读写慢的问题,同时也提高了数据查询效率,因为数据是根据最终key值进行路由的,一般按照自然顺序排序,然后根据每个服务器节点配置的最终key值的范围进行存储,如果最终key值的首字符是随机的,那么最终key值就会均匀分布到多个节点,避免了过多的最终key值存在一个节点的情况。
本申请实施例的方法可以通过调节计算组合方式、截取长度、字段个数、最终key值的整体长度等增加所有组合的可能数,减少最终key值重复的概率,大大方便了存储和检索。
一个具体的最终key值的设计例子如下:存储的对象是发票数据,存储数据库是hbase。
Bytes.add(Bytes.toBytes(String.format("%02d",Math.abs(MurmurHash3.stri ngHash(sellerTaxNo))%50)),
Bytes.add(
Bytes.add(
Bytes.toBytes(orgId),
Bytes.toBytes(MD5Hash.getMD5AsHex(Bytes.toBytes(sellerTaxNo)))),
Bytes.toBytes("00000000000000000000")
)
)
其中sellerTaxNo是销方税号,orgId是机构号,”00000000000000000000”代表发票id。
上述例子中,是通过字节的方式进行拼接,这个字节最后可以转成字符串形成直观的最终key值,第一个逗号以前的部分是指对销方税号进行hash处理,结果除以50取余数,取该余数的前两位作为最终key值的第一二位,orgId代表一个企业或者机构,是一个编号,MD5Hash是一种hash算法,但是这一部分取的是销方税号hash计算后的所有结果,最后000000.....则一部分是发票id。也就是将不同的字段通过不同的算法形成不同的值,然后截取其中一些不容易重复的部分拼接到一起形成一个新的最终key值,再通过这个最终key值去数据库里面取值。
请参见图2,图2为本申请实施例所提供的海量数据存储和检索装置的结构示意图;
该装置可以包括:
第一计算模块100,用于对数据的关键字段进行hash计算,并将计算得到的hash值作为第一key值;
第二计算模块200,用于对数据的关键字段进行截取,并将截取得到的截取值作为第二key值;
第三计算模块300,用于对数据的关键字段进行拼接,并将拼接得到的拼接值作为第三key值;
第四计算模块400,用于对数据的关键字段进行取模,并将取模得到的取模值作为第四key值;
综合模块500,用于将所述第一key值、第二key值、第三key值和第四key值中的一个作为最终key值或者将所述第一key值、第二key值、第三key值和第四key值中的至少两个进行拼接作为最终key值;
存储模块600,用于根据所述最终key值将数据存储至相应节点的服务器中;
检索模块700,用于当进行检索时,根据所述最终key值在相应的服务器中查找对应的数据。
进一步,所述第一计算模块100包括:
第一组合单元,用于对数据的关键字段进行不同的hash计算,得到多个hash值,并将多个hash值进行组合得到第一计算结果;
第二组合单元,用于对数据不同关键字段进行hash计算,得到多个hash值并进行组合得到第二计算结果;
第三组合单元,用于对数据关键字段进行hash计算,得到hash值,然后利用hash值对服务器的节点数进行取模运算得到第三计算结果;
第四组合单元,用于对数据的不同关键字段进行hash计算后,得到多个hash值,并截取各hash值中的一段或者多段并组合得到第四计算结果;
拼接单元,用于将所述第一计算结果、第二计算结果、第三计算结果和第四计算结果中的一种作为第一key值或将所述第一计算结果、第二计算结果、第三计算结果和第四计算结果中的至少两个进行拼接得到第一key值。
进一步,所述存储模块600包括:
字符获取单元,用于获取最终key值中字符;
匹配单元,用于根据所述字符确定与之匹配的服务器;
存储单元,用于将所述数据存储至相应节点的服务器。
进一步,所述检索模块700包括:
字段接收单元,用于接收指定的关键字段以及指定的目标字段范围;
范围确定单元,用于根据所述指定的关键字段以及指定的目标字段范围确定最终key值范围;
数据查找单元,用于根据所述最终key值范围从服务器中查找相应范围的数据。
进一步,所述字符获取单元具体用于获取最终key值中首字符。
进一步,所述存储单元具体用于采用列式存储或者键值对的方式存储数据。
进一步,所述hash计算为murmurhash3或MD5Hash。
由于装置部分的实施例与方法部分的实施例相互对应,因此装置部分的实施例请参见方法部分的实施例的描述,这里暂不赘述。
本申请还提供了一种计算机可读存储介质,其上存有计算机程序,该计算机程序被执行时可以实现上述实施例所提供的方法。该存储介质可以包括:U盘、移动硬盘、只读存储器(Read-Only Memory,ROM)、随机存取存储器(RandomAccess Memory,RAM)、磁碟或者光盘等各种可以存储程序代码的介质。
本申请还提供了一种计算机设备,可以包括存储器和处理器,所述存储器中存有计算机程序,所述处理器调用所述存储器中的计算机程序时,可以实现上述实施例所提供的方法。当然所述计算机设备还可以包括各种网络接口,电源等组件。
说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似部分互相参见即可。对于实施例公开的装置而言,由于其与实施例公开的方法相对应,所以描述的比较简单,相关之处参见方法部分说明即可。应当指出,对于本技术领域的普通技术人员来说,在不脱离本申请原理的前提下,还可以对本申请进行若干改进和修饰,这些改进和修饰也落入本申请权利要求的保护范围内。
还需要说明的是,在本说明书中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的状况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。

Claims (10)

1.一种海量数据存储和检索方法,其特征在于,包括:
对数据的关键字段进行hash计算,并将计算得到的hash值作为第一key值;
对数据的关键字段进行截取,并将截取得到的截取值作为第二key值;
对数据的关键字段进行拼接,并将拼接得到的拼接值作为第三key值;
对数据的关键字段进行取模,并将取模得到的取模值作为第四key值;
将所述第一key值、第二key值、第三key值和第四key值中的一个作为最终key值或者将所述第一key值、第二key值、第三key值和第四key值中的至少两个进行拼接作为最终key值;
根据所述最终key值将数据存储至相应节点的服务器中;
当进行检索时,根据所述最终key值在相应的服务器中查找对应的数据。
2.根据权利要求1所述的海量数据存储和检索方法,其特征在于,所述对数据的关键字段进行hash计算,并将计算得到的hash值作为第一key值包括:
对数据的关键字段进行不同的hash计算,得到多个hash值,并将多个hash值进行组合得到第一计算结果;
对数据不同关键字段进行hash计算,得到多个hash值并进行组合得到第二计算结果;
对数据关键字段进行hash计算,得到hash值,然后利用hash值对服务器的节点数进行取模运算得到第三计算结果;
对数据的不同关键字段进行hash计算后,得到多个hash值,并截取各hash值中的一段或者多段并组合得到第四计算结果;
将所述第一计算结果、第二计算结果、第三计算结果和第四计算结果中的一种作为第一key值或将所述第一计算结果、第二计算结果、第三计算结果和第四计算结果中的至少两个进行拼接得到第一key值。
3.根据权利要求1所述的海量数据存储和检索方法,其特征在于,所述根据所述最终key值将数据存储至相应节点的服务器中包括:
获取最终key值中字符;
根据所述字符确定与之匹配的服务器;
将所述数据存储至相应节点的服务器。
4.根据权利要求1所述的海量数据存储和检索方法,其特征在于,所述当进行检索时,根据所述最终key值在相应的服务器中查找对应的数据包括:
接收指定的关键字段以及指定的目标字段范围;
根据所述指定的关键字段以及指定的目标字段范围确定最终key值范围;
根据所述最终key值范围从服务器中查找相应范围的数据。
5.根据权利要求3所述的海量数据存储和检索方法,其特征在于,所述获取最终key值中字符包括:
获取最终key值中首字符。
6.根据权利要求3所述的海量数据存储和检索方法,其特征在于,所述将所述数据存储至相应节点的服务器包括:
采用列式存储或者键值对的方式存储数据。
7.根据权利要求1所述的海量数据存储和检索方法,其特征在于,所述hash计算采用murmurhash3或MD5hash算法。
8.一种海量数据存储和检索装置,其特征在于,包括:
第一计算模块,用于对数据的关键字段进行hash计算,并将计算得到的hash值作为第一key值;
第二计算模块,用于对数据的关键字段进行截取,并将截取得到的截取值作为第二key值;
第三计算模块,用于对数据的关键字段进行拼接,并将拼接得到的拼接值作为第三key值;
第四计算模块,用于对数据的关键字段进行取模,并将取模得到的取模值作为第四key值;
综合模块,用于将所述第一key值、第二key值、第三key值和第四key值中的一个作为最终key值或者将所述第一key值、第二key值、第三key值和第四key值中的至少两个进行拼接作为最终key值;
存储模块,用于根据所述最终key值将数据存储至相应节点的服务器中;
检索模块,用于当进行检索时,根据所述最终key值在相应的服务器中查找对应的数据。
9.一种计算机设备,其特征在于,包括存储器、处理器及存储在所述存储器上并可在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现如权利要求1至7任一项所述的海量数据存储和检索方法。
10.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现如权利要求1至7任一项所述海量数据存储和检索方法。
CN201910843509.5A 2019-09-06 2019-09-06 海量数据存储和检索方法、装置、计算机设备及存储介质 Active CN110532284B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201910843509.5A CN110532284B (zh) 2019-09-06 2019-09-06 海量数据存储和检索方法、装置、计算机设备及存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201910843509.5A CN110532284B (zh) 2019-09-06 2019-09-06 海量数据存储和检索方法、装置、计算机设备及存储介质

Publications (2)

Publication Number Publication Date
CN110532284A true CN110532284A (zh) 2019-12-03
CN110532284B CN110532284B (zh) 2023-05-23

Family

ID=68667439

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201910843509.5A Active CN110532284B (zh) 2019-09-06 2019-09-06 海量数据存储和检索方法、装置、计算机设备及存储介质

Country Status (1)

Country Link
CN (1) CN110532284B (zh)

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113297192A (zh) * 2021-05-31 2021-08-24 上海艾麒信息科技股份有限公司 针对redis hash类型数据控制field过期的方法及系统
CN113342813A (zh) * 2021-06-09 2021-09-03 南京冰鉴信息科技有限公司 键值数据处理方法、装置、计算机设备及可读存储介质
CN118170758A (zh) * 2024-03-08 2024-06-11 北京泰迪未来科技股份有限公司 一种海量数据内存存储空间优化的方法及装置

Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2009046669A1 (fr) * 2007-09-30 2009-04-16 Huawei Technologies Co., Ltd. Procédé et dispositif pour stocker et rechercher un mot-clé
US20140006342A1 (en) * 2012-06-27 2014-01-02 Thomas Love Systems for the integrated design, operation and modification of databases and associated web applications
CN104298687A (zh) * 2013-07-18 2015-01-21 阿里巴巴集团控股有限公司 一种哈希分区管理方法及装置
CN106547755A (zh) * 2015-09-17 2017-03-29 北京国双科技有限公司 一种基于片键的数据处理方法及装置
US20170193041A1 (en) * 2016-01-05 2017-07-06 Sqrrl Data, Inc. Document-partitioned secondary indexes in a sorted, distributed key/value data store
CN107273482A (zh) * 2017-06-12 2017-10-20 北京市天元网络技术股份有限公司 基于HBase的告警数据存储方法及装置
CN109657108A (zh) * 2018-09-03 2019-04-19 长安通信科技有限责任公司 一种域名资产数据存储和查询方法和系统

Patent Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2009046669A1 (fr) * 2007-09-30 2009-04-16 Huawei Technologies Co., Ltd. Procédé et dispositif pour stocker et rechercher un mot-clé
US20140006342A1 (en) * 2012-06-27 2014-01-02 Thomas Love Systems for the integrated design, operation and modification of databases and associated web applications
CN104298687A (zh) * 2013-07-18 2015-01-21 阿里巴巴集团控股有限公司 一种哈希分区管理方法及装置
CN106547755A (zh) * 2015-09-17 2017-03-29 北京国双科技有限公司 一种基于片键的数据处理方法及装置
US20170193041A1 (en) * 2016-01-05 2017-07-06 Sqrrl Data, Inc. Document-partitioned secondary indexes in a sorted, distributed key/value data store
CN107273482A (zh) * 2017-06-12 2017-10-20 北京市天元网络技术股份有限公司 基于HBase的告警数据存储方法及装置
CN109657108A (zh) * 2018-09-03 2019-04-19 长安通信科技有限责任公司 一种域名资产数据存储和查询方法和系统

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
吴栋淦;: "逻辑访问计划的优化策略分析", 信息通信 *
李春强;董永强;吴国新;: "多单元散列表与TCAM结合的OpenFlow流表查找方法", 通信学报 *

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113297192A (zh) * 2021-05-31 2021-08-24 上海艾麒信息科技股份有限公司 针对redis hash类型数据控制field过期的方法及系统
CN113342813A (zh) * 2021-06-09 2021-09-03 南京冰鉴信息科技有限公司 键值数据处理方法、装置、计算机设备及可读存储介质
CN113342813B (zh) * 2021-06-09 2024-01-26 南京冰鉴信息科技有限公司 键值数据处理方法、装置、计算机设备及可读存储介质
CN118170758A (zh) * 2024-03-08 2024-06-11 北京泰迪未来科技股份有限公司 一种海量数据内存存储空间优化的方法及装置

Also Published As

Publication number Publication date
CN110532284B (zh) 2023-05-23

Similar Documents

Publication Publication Date Title
Lemire et al. Consistently faster and smaller compressed bitmaps with roaring
Sidirourgos et al. Column imprints: a secondary index structure
US9471710B2 (en) On-the-fly encoding method for efficient grouping and aggregation
CN110532284A (zh) 海量数据存储和检索方法、装置、计算机设备及存储介质
AU2015347304B2 (en) Testing insecure computing environments using random data sets generated from characterizations of real data sets
US10671586B2 (en) Optimal sort key compression and index rebuilding
CN102024046B (zh) 数据重复性校验方法和装置及系统
CN102591855A (zh) 一种数据标识方法及系统
CN102169491B (zh) 一种多数据集中重复记录动态检测方法
CN109582231B (zh) 数据存储方法、装置、电子设备及存储介质
CN109407985B (zh) 一种数据管理的方法以及相关装置
CN114064984A (zh) 一种基于稀疏数组链表的世界状态增量更新方法及装置
CN114490060A (zh) 内存分配方法、装置、计算机设备和计算机可读存储介质
CN107205024A (zh) 一种云存储系统中数据去重方法及系统
EP3683696A1 (en) System and method of bloom filter for big data
CN101639851A (zh) 一种数据存储、查询的方法和装置
CN105677645A (zh) 一种数据表比对方法和装置
CN110825747B (zh) 一种信息存取方法、装置和介质
CN108920110A (zh) 一种基于内存计算模式的并行处理大数据存储系统及方法
US11991290B2 (en) Associative hash tree
CN108647243B (zh) 基于时间序列的工业大数据存储方法
CN109241058A (zh) 一种向b+树批量插入键值对的方法和装置
CN107315806B (zh) 一种基于文件系统的嵌入式存储方法和装置
CN110008236A (zh) 一种数据分布式自增编码方法、系统、设备及介质
CN113342819B (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