CN110413611B - 数据存储、查询方法及装置 - Google Patents
数据存储、查询方法及装置 Download PDFInfo
- Publication number
- CN110413611B CN110413611B CN201910550724.6A CN201910550724A CN110413611B CN 110413611 B CN110413611 B CN 110413611B CN 201910550724 A CN201910550724 A CN 201910550724A CN 110413611 B CN110413611 B CN 110413611B
- Authority
- CN
- China
- Prior art keywords
- layer
- tag
- disk
- way tree
- nodes
- 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
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/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/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/27—Replication, distribution or synchronisation of data between databases or within a distributed database system; Distributed database system architectures therefor
-
- 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
Abstract
本申请公开了数据存储、查询方法及装置,属于计算机技术领域。方法包括:获取原始数据,基于原始数据得到弹性分布数据集;对于任一标签对,获取任一标签对的索引文件,将索引文件存储到磁盘中,得到索引文件在磁盘的偏移量和长度;获取任一标签对的标签名称的哈希值;根据任一标签对的标签名称的哈希值,按照参考规则创建多叉树;将索引文件在磁盘的偏移量和长度存储到叶子节点中;从多叉树的叶子节点开始,将每层的区块依次存储到磁盘中,每个区块在存储到磁盘中后,将每个区块在磁盘的偏移量和长度存储到上一层的节点中;将多叉树的第一层的区块存储到内存中。本申请提供的方法能够节省内存,提高数据查询的效率。
Description
技术领域
本申请实施例涉及计算机技术领域,特别涉及一种数据存储、查询方法及装置。
背景技术
在大数据时代,一般会在数据储存时创建索引,然后基于索引进行数据查询。通过创建结构简单、有效、性能优良的索引,可以快捷地获取到所需查询的数据。目前储存数据时,一般会创建倒排索引,倒排索引是一种由属性值来确定记录的位置的索引方法。
相关技术在数据存储的过程中,创建数据的索引文件,将索引文件存储在磁盘,同时创建一个存储索引文件相关信息的关联容器(map),将map存储在内存中。Map的关键字(key)为项(term),关键字的值(value)为对应的索引文件的偏移地址。数据查询时,先在内存中根据term查找对应索引文件的偏移地址,再根据偏移地址从磁盘中获取索引文件,从而得到查询到的数据。在实现本申请的过程中,发明人发现相关技术至少存在以下问题:
相关技术中,当索引文件非常大的时候,存储term和偏移地址的map可能占用大量的内存,随着map的增大,在map中的查找性能急剧下降,从而降低数据查询的效率。
发明内容
本申请实施例提供了一种数据存储、查询方法及装置,可用于解决相关技术中的问题。所述技术方案如下:
一方面,本申请实施例提供了一种数据存储方法,所述方法包括:
获取原始数据,基于所述原始数据得到弹性分布数据集,所述弹性分布数据集中包含一个或多个主键;每个主键对应有一个或多个标签对,每个标签对由标签名称和标签ID组成;
对于任一标签对,获取所述任一标签对的索引文件,将所述索引文件存储到磁盘中,得到所述索引文件在磁盘的偏移量和长度;
获取所述任一标签对的标签名称的哈希值;
根据所述任一标签对的标签名称的哈希值,按照参考规则创建多叉树,所述多叉树的层数为一层或多层,每层包含一个或者多个区块,每个区块包含一个或多个节点;同一层的不同节点用于存储位数相同数值不同的哈希值,不同层的不同节点用于存储位数不同的哈希值;所述多叉树的最后一层的节点为叶子节点;
将所述索引文件在磁盘的偏移量和长度存储到所述叶子节点中;从所述多叉树的叶子节点开始,将每层的区块依次存储到磁盘中,每个区块在存储到磁盘中后,将每个区块在磁盘的偏移量和长度存储到上一层的节点中;
将所述多叉树的第一层的区块存储到内存中。
一方面,本申请实施例提供了一种数据查询方法,所述方法包括:
获取待查询的数据和多叉树的第一层的区块,所述待查询的数据包括一个或多个标签对,每个标签对由标签名称和标签ID组成;所述多叉树按照参考规则创建得到,所述多叉树的层数为一层或多层,每层包含一个或者多个区块,每个区块包含一个或多个节点;同一层的不同节点存储位数相同数值不同的哈希值,不同层的不同节点存储位数不同的哈希值;所述多叉树的最后一层的节点为叶子节点,所述叶子节点存储索引文件在磁盘的偏移量和长度,非叶子节点存储下一层区块在磁盘的偏移量和长度;
对于任一标签对,获取所述标签对的标签名称的哈希值;
在所述多叉树的第一层的区块查找与所述标签对的标签名称的哈希值对应的节点,根据所述节点存储的下一层的区块在磁盘的偏移量和长度,在磁盘中确定所述下一层的区块,在所述下一层的区块查找与所述标签对的标签名称的哈希值对应的节点,循环此过程,直至所述节点为叶子节点;
根据所述叶子节点中存储的索引文件在磁盘的偏移量和长度,获取所述任一标签对的索引文件;
基于所述待查询数据的所有标签对的索引文件,获取查询到的数据。
另一方面,提供了一种数据存储装置,所述装置包括:
第一获取模块,用于获取原始数据,基于所述原始数据得到弹性分布数据集,所述弹性分布数据集中包含一个或多个主键;每个主键对应有一个或多个标签对,每个标签对由标签名称和标签ID组成;
第二获取模块,用于对于任一标签对,获取所述任一标签对的索引文件;
存储模块,用于将所述索引文件存储到磁盘中,得到所述索引文件在磁盘的偏移量和长度;
第三获取模块,用于获取所述任一标签对的标签名称的哈希值;
创建模块,用于根据所述任一标签对的标签名称的哈希值,按照参考规则创建多叉树,所述多叉树的层数为一层或多层,每层包含一个或者多个区块,每个区块包含一个或多个节点;同一层的不同节点用于存储位数相同数值不同的哈希值,不同层的不同节点用于存储位数不同的哈希值;所述多叉树的最后一层的节点为叶子节点;
所述存储模块,还用于将所述索引文件在磁盘的偏移量和长度存储在到所述叶子节点中;从所述多叉树的叶子节点开始,将每层的区块依次存储到磁盘中,每个区块在存储到磁盘中后,将每个区块在磁盘的偏移量和长度存储到上一层的节点中;将所述多叉树的第一层的区块存储到内存中。
另一方面,本申请实施例提供了一种数据查询装置,所述装置包括:
第一获取模块,用于获取待查询的数据和多叉树的第一层的区块,所述待查询的数据包括一个或多个标签对,每个标签对由标签名称和标签ID组成;所述多叉树按照参考规则创建得到,所述多叉树的层数为一层或多层,每层包含一个或者多个区块,每个区块包含一个或多个节点;同一层的不同节点存储位数相同数值不同的哈希值,不同层的不同节点存储位数不同的哈希值;所述多叉树的最后一层的节点为叶子节点,所述叶子节点存储索引文件在磁盘的偏移量和长度,非叶子节点存储下一层区块在磁盘的偏移量和长度;
第二获取模块,用于对于任一标签对,获取所述标签对的标签名称的哈希值;
查找模块,用于在所述多叉树的第一层的区块查找与所述标签对的标签名称的哈希值对应的节点;根据所述节点存储的下一层的区块在磁盘的偏移量和长度,在磁盘中确定所述下一层的区块,在所述下一层的区块查找与所述标签对的标签名称的哈希值对应的节点,循环此过程,直至所述节点为叶子节点;
第三获取模块,用于根据所述叶子节点中存储的索引文件在磁盘的偏移量和长度,获取所述任一标签对的索引文件;
第四获取模块,用于基于所述待查询数据的所有标签对的索引文件,获取查询到的数据。
另一方面,提供了一种计算机设备,所述计算机设备包括处理器和存储器,所述存储器中存储有至少一条指令,所述至少一条指令在被所述处理器执行时实现上述任一所述的数据存储方法,或者实现上述任一所述的数据查询方法。
另一方面,还提供了一种计算机可读存储介质,所述计算机可读存储介质中存储有至少一条指令,所述至少一条指令在被执行时实现上述任一所述的数据存储方法,或者实现上述任一所述的数据查询方法。
本申请实施例提供的技术方案至少带来如下有益效果:
在数据存储时,分为两部分存储到磁盘中,一部分是索引文件,另一部分是记录索引文件偏移量和长度的多叉树;在内存中仅需存储多叉树的第一层区块,节省内存空间;在数据查询时,只需在多叉树的第一层的区块中查找到对应节点,即可根据多叉树的分层结构得到叶子节点,然后根据叶子节点中存储的索引文件在磁盘的偏移量和长度,即可获取索引文件,提高了数据查询的效率。
附图说明
为了更清楚地说明本申请实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本申请实施例提供的一种实施环境的示意图;
图2是本申请实施例提供的一种数据存储方法的流程图;
图3是本申请实施例提供的一种索引文件存储到磁盘的示意图;
图4是本申请实施例提供的一种创建多叉树的流程图;
图5是本申请实施例提供的一种多叉树的结构示意图;
图6是本申请实施例提供的一种多叉树的结构示意图;
图7是本申请实施例提供的一种叶子节点中存储的信息的示意图;
图8是本申请实施例提供的一种数据查询方法的流程图;
图9是本申请实施例提供的一种在多叉树中查找叶子节点的流程图;
图10是本申请实施例提供的一种在多叉树中查找叶子节点的过程示意图;
图11是本申请实施例提供的一种数据存储装置示意图;
图12是本申请实施例提供的一种创建模块的结构示意图;
图13是本申请实施例提供的一种创建模块的结构示意图;
图14是本申请实施例提供的一种数据存储装置示意图;
图15是本申请实施例提供的一种数据查询装置示意图;
图16是本申请实施例提供的一种查找模块的结构示意图;
图17是本申请实施例提供的一种数据存储或者数据查询的设备结构示意图。
具体实施方式
为使本申请的目的、技术方案和优点更加清楚,下面将结合附图对本申请实施方式作进一步地详细描述。
在大数据时代,一般会在数据储存时创建索引,然后基于索引进行数据查询。通过创建结构简单、有效、性能优良的索引,可以快捷地获取到所需查询的数据。目前储存数据时,一般会创建倒排索引,倒排索引是一种由属性值来确定记录的位置的索引方法。如何进行数据存储,是影响内存大小以及数据查询效率的关键。
对此,本申请实施例提供了一种数据存储方法和数据查询方法,请参考图1,其示出了本申请实施例提供的方法实施环境的示意图。该实施环境可以包括:终端11和服务器12。
其中,终端11安装有应用程序或者网页,该应用程序或者网页在使用过程中会产生大量的数据,终端11将产生的数据发送至服务器12上进行存储,当然,终端11也可以对产生的数据进行存储。服务器12在获取到终端11发送的数据后,可应用本申请实施例提供的方法进行数据存储。当需要进行数据查询时,服务器12可应用本申请实施例提供的方法进行数据查询。
可选地,终端11可以是诸如手机、平板电脑、个人计算机等的智能设备。服务器12可以是一台服务器,也可以是由多台服务器组成的服务器集群,或者是一个云计算服务中心。终端11与服务器12通过有线或无线网络建立通信连接。
本领域技术人员应能理解上述终端11和服务器12仅为举例,其他现有的或今后可能出现的终端或服务器如可适用于本申请,也应包含在本申请保护范围以内,并在此以引用方式包含于此。
基于上述图1所示的实施环境,本申请实施例提供一种数据存储方法,以该方法应用于服务器为例。如图2所示,本申请实施例提供的方法可以包括如下几个步骤:
在步骤201中,获取原始数据,基于原始数据得到弹性分布数据集,弹性分布数据集中包含一个或多个主键;每个主键对应有一个或多个标签对,每个标签对由标签名称和标签ID组成。
终端将产生的原始数据发送至服务器上,服务器获取多个终端发送的原始数据。原始数据中包含一条或多条数据,每条数据均唯一对应一个主键(primaryKey),该主键能够标识该条数据。每条数据中包含一个或多个标签对(tagPair),每个标签对由标签名称(tagName)和标签ID(tagId)组成。例如,假设一条数为“姓名为李三,身份证件号码为111111111111111111,年龄为25岁,性别为男”,由于身份证件号码能够唯一标识该条数据,所以可以将身份证件号码111111111111111111作为该条数据的主键,在该条数据中包含三个标签对,分别为“姓名为李三”、“年龄为25岁”以及“性别为男”。其中,标签对“姓名为李三”中的标签名称为“姓名”,标签ID为“李三”;标签对“年龄为25岁”中的标签名称为“年龄”,标签ID为“25岁”;标签对“性别为男”中的标签名称为“性别”,标签ID为“男”。
可选地,基于原始数据得到弹性分布数据集包括:在获取原始数据后,将原始数据转换为primaryKey:tagName-tagId;……tagName-tagId的形式,以压缩原始数据,基于压缩后的数据得到弹性分布数据集(Resilient Distributed Dataset,RDD)。RDD是Spark中最基本的数据抽象,它代表一个不可变、可分区、里面的元素可并行计算的集合。对于RDD来说,每个分区都会被一个计算任务处理。可以在创建RDD时指定RDD的分区个数,如果没有指定,那么就会采用默认值。默认值就是程序所分配到的CPU Core的数目。
可选地,基于原始数据得到弹性分布数据集之后,还包括:基于弹性分布数据集中的主键,将弹性分布数据集进行分区。
分区的数量可以根据经验设置,也可以根据原始数据的数量自由调整。Spark根据用户指定的分区数量将RDD切分成多个区(partition)。可选地,将RDD中的主键进行哈希计算,将哈希计算后哈希值相近的主键对应的数据划分进同一个区(partitoin)。在分区时,可以尽量保证每个区中的数据量接近。将海量数据进行分区之后,不同区的数据可以并行处理,提高数量存储的效率。
可选地,基于原始数据得到弹性分布数据集之后,还包括:对弹性分布数据集中的主键进行编号,基于主键的编号,确定主键对应的一个或多个标签对。
若RDD进行了分区,即在每个分区内对主键进行编号;若RDD未进行分区,即对RDD中的所有主键进行编号。编号从0开始,生成主键和编号的映射关系,即生成主键和编号的一一对应关系。每个编号唯一对应一个主键,根据主键的编号即可确定该主键对应的一个或多个标签对。
通过对主键进行编号,可以在数据存储的过程中,用编号代替主键,从而节省存储空间。另外,在数据查找时,当查找到编号时,即可确定该编号对应的主键,从而提高数据查询效率。
需要说明的是,若RDD未进行分区,则只有一个分区,在该分区内执行接下来的步骤;若RDD进行了分区,则在各个分区内并行执行接下来的步骤。
在步骤202中,对于任一标签对,获取任一标签对的索引文件,将索引文件存储到磁盘中,得到索引文件在磁盘的偏移量和长度。
建立任一标签对的索引文件,在该索引文件由索引表和主文件组成,其中主文件是指包含该标签对的数据的文件,索引表用于指示该标签对在主文件中的位置。
将所有标签对的索引文件存储到磁盘中,可选地,索引文件可以为位图(bitmap)索引文件。例如,位图索引文件在磁盘中的存储示意图如图3所示。位图索引技术是一类特殊的数据库索引技术,其索引使用bit数组进行存储与计算操作。位图索引可以看作是存储了大量bit位的bit序列,并且通过这些bit序列上的按位操作来响应查询请求,同时每个bit序列中的位数与数据表中的行数是一致的。使用位图向量记录对应行的取值情况不仅可以带来存储空间上的节省,而且可以借助计算机位图运算的快速特性来提高索引结果利用率。
在将索引文件存储到磁盘中后,可以得到索引文件在磁盘的偏移量和长度。根据索引文件在磁盘的偏移量和长度即可确定该索引文件在磁盘中的存储位置,进而从磁盘中获取该索引文件。
在步骤203中,获取任一标签对的标签名称的哈希值。
每个标签对由标签名称和标签ID组成,对于任一标签对,将其标签名称进行哈希计算,得到该标签名称的哈希值(hashcode)。哈希计算是把任意长度的输入变换成固定长度的输出,该输出就是哈希值。这种转换是一种压缩映射,也就是,哈希值的空间通常远小于输入的空间,简单的说哈希计算就是一种将任意长度的数据压缩到某一固定长度的数据的计算方式。本申请实施例对哈希计算之后得到的哈希值的具体位数不加以限定,只要所有的标签名称的哈希值的位数相同即可,例如,所有的哈希值均为32位等。
在步骤204中,根据任一标签对的标签名称的哈希值,按照参考规则创建多叉树。
其中,待创建的多叉树的层数为一层或多层,每层包含一个或者多个区块(block),每个区块包含一个或多个节点(node);同一层的不同节点用于存储位数相同数值不同的哈希值,不同层的不同节点用于存储位数不同的哈希值;多叉树的最后一层的节点为叶子节点。创建多叉树的过程也就是将标签名称的哈希值分层存储进多叉树的过程。可以将多叉树作为记录索引文件在磁盘的位置信息的元(meta)文件。该多叉树的层数和每层节点能够存储的哈希值的位数可以根据经验设置,可以看根据数据量自由调整。在创建多叉树之前,需要先确定多叉树的参考层数H和第i层的节点能够存储的哈希值的位数Li。
可选地,根据任一标签对的标签名称的哈希值,按照参考规则创建多叉树,包括以下几个步骤:
步骤一:根据多叉树的第i层的节点能够存储的哈希值的位数Li,获取任一标签对的标签名称的哈希值的前Li位对应的目标哈希值;
步骤二:当多叉树的第i层不存在存储任一标签对的标签名称的哈希值的前Li位对应的目标哈希值的节点时,在多叉树的第i层创建一个新的节点,在新的节点中存储任一标签对的标签名称的哈希值的前Li位对应的目标哈希值,此时将新的节点作为第i-1层的子节点。例如,假设i=3,也就是在多叉树的第三层,假设该层能够存储的哈希值的位数L3=4,假设一个标签对的标签名称的哈希值为123456。获取该标签名称的哈希值的前4位对应的目标哈希值,即为1234。当第三层中不存在存储1234的节点时,创建一个存储1234的新节点,该存储1234的新节点是第二层的一个节点的子节点。
步骤三:当多叉树的第i层存在存储任一标签对的标签名称的哈希值的前Li位对应的目标哈希值的节点时,当i<H-1时,创建多叉树的下一层,此时i=i+1;循环步骤一至步骤三,直至i=H-1。
步骤四:当i=H-1时,创建多叉树的叶子节点,将任一标签对的标签名称的哈希值存储在叶子节点中。在叶子节点中,除了存储任一标签对的标签名称的完整哈希值外,还存储与该完整哈希值对应的标签对。
上述创建多叉树的过程可以如图4所示,在上述创建多叉树的过程中,从多叉树的第一层开始,直至多叉树的最后一层,将标签名称的哈希值分层进行存储。层数i越小,存储的哈希值的位数越少,在第H层存储完整的哈希值。
创建完成的多叉树的逻辑结构可如图5所示,创建完成的多叉树中包含多层,每层包含一个或者多个区块,每个区块包含一个或多个节点。例如,在图5中,多叉树的第一层包含的区块为根层区块(Root Level Block),该层的节点为第一节点(1stnode);第二层包含的区块为第一层区块(First Level Block),该层的节点为第二节点(2ndnode);第三层包含的区块为第二层区块(Second Level Block),该层的节点为第三节点(3rdnode);第H层包含的区块为第N层区块(Nth Level Block),该层的节点为叶子节点(leafnode)。
同一层的不同节点用于存储位数相同数值不同的哈希值,不同层的不同节点用于存储位数不同的哈希值。叶子节点负责存储索引文件在磁盘的偏移量和长度。非叶子节点负责存储下一级区块的在磁盘中的偏移量和长度。
接下来对创建完成的多叉树的逻辑结构进行举例说明,如图6所示。假设标签名称经过哈希运算得到哈希值为5位,假设共有8个标签对,假设多叉树的层数为4,第一层能够存储的哈希值位数为2,第二层能够存储的哈希值位数为3,第三层能够存储的哈希值位数为4。假设这8个标签对的标签名称经过哈希运算得到哈希值分别为12345、12356、12367、12456、13456、13467、13567、13678。这8个哈希值的前两位对应的目标哈希值共有两种,分别为12和13。前三位对应的目标哈希值共有5种,分别为123、124、134、135、和136。前四位对应的目标哈希值共有8种,分别为1234、1235、1236、1245、1345、1346、1356和1367。在第一层中有两个节点,这两个节点存储的哈希值分别为12和13。其中,存储的哈希值为12的节点的子节点有2个,其存储的哈希值分别为123和124,这些子节点在第二层中的一个FirstLevel Block中;存储的哈希值为13的节点的子节点有3个,其存储的哈希值分别为134、135和136,这些子节点在第二层中的另外一个First Level Block中。
存储的哈希值为123的节点的子节点有3个,其存储的哈希值分别为1234、1235和1236,这些子节点在第三层中的一个Second Level Block中;存储的哈希值为124的节点的子节点有1个,其存储的哈希值为1245,该子节点在第三层中的一个Second Level Block中;存储的哈希值为134的节点的子节点有2个,其存储的哈希值分别为1345和1346,这些子节点在第三层中的一个Second Level Block中;存储的哈希值为135的节点的子节点有1个,其存储的哈希值为1356,该子节点在第三层中的一个Second Level Block中;存储的哈希值为136的节点的子节点有1个,其存储的哈希值为1367,该子节点在第三层中的一个Second Level Block中。由于在本例子中,第三层的每个节点均只有一个子节点,即第三层的每个节点只对应一个叶子节点,在每个叶子节点中存储有每个标签名称的哈希值,共有8个叶子节点。
可选地,多叉树的第i层的节点根据存储的任一标签对的标签名称的哈希值的前Li位对应的目标哈希值的字典序从小到大进行排列。
字典序(lexicographical order)是一种对于随机变量形成序列的排序方法。其方法是,按照字母顺序,或者数字小大顺序,由小到大的形成序列。对于数字1、2、3......n的排列,不同排列的先后关系是从左到右逐个比较对应的数字的先后来决定的。例如对于5个数字的排列12354和12345,排列12345在前,排列12354在后。按照这样的规定,5个数字的所有的排列中最前面的是12345,最后面的是54321。
在步骤205中,将索引文件在磁盘的偏移量和长度存储到叶子节点中;从多叉树的叶子节点开始,将每层的区块依次存储到磁盘中,每个区块在存储到磁盘中后,将每个区块在磁盘的偏移量和长度存储到上一层的节点中;将多叉树的第一层的区块存储到内存中。
此步骤为将创建完成的多叉树写入磁盘和内存的过程,将整个多叉树逐层全部存储到磁盘中,将多叉树的第一层存储到内存中。
在叶子节点中除了存储标签对的标签名称的完整哈希值、与该完整哈希值对应的标签对之后,还存储该标签对的索引文件在磁盘的偏移量和长度。例如,叶子节点中存储的信息可如图7所示。图7中列出了6个叶子节点中存储的信息,每一行代表一个叶子节点。其中,第一列表示完整哈希值,第二列表示标签对,第三列表示索引文件在磁盘的偏移量,第四列表示索引文件在磁盘的长度。图7中的第二列中标签对的含义可以预先设置,例如“sex_0”可以表示“性别为女”这一标签对,“sex_1”可以表示“性别为男”这一标签对,“age_10”可以表示“年龄为10岁”这一标签对,“age_20”可以表示“年龄为20岁”这一标签对,“edu_1”可以表示“学历为高中”这一标签对,“edu_2”可以表示“学历为本科”这一标签对。
将整个多叉树逐层全部存储到磁盘中的过程为:从多叉树的叶子节点开始,将每层的区块依次存储到磁盘中,每个区块在存储到磁盘中后,将每个区块在磁盘的偏移量和长度存储进上一层的节点中。
也就是说,在多叉树创建完成后,将索引文件在磁盘的偏移量和长度存储到叶子节点中,然后将叶子节点所在层的各个区块存储到磁盘中;将叶子节点所在层的每个区块在磁盘的偏移量和长度写入该区块的所有节点的父节点中,然后将父节点所在层的各个区块存储到磁盘中,循环此过程,直至将多叉树的每一层均存储到磁盘中。
本申请实施例创造性的提出了分层可伸缩的多叉树结构,不仅解决了海量数据下倒排索引文件难以全部进内存的问题,而且具有高效的查询效率。同时可以方便的根据实际磁盘和内存大小调整多叉树的层数H和第i层能够存储的哈希值的位数Li。当内存较大时,可以将层数H设置的少一些,将第i层能够存储的哈希值的位数Li设置的多一些,这样能够减少多叉树在磁盘中的占用空间;当内存较小时,可以将层数H设置的多一些,将第i层能够存储的哈希值的位数Li设置的少一些,这样能够使多叉树的第一层的区块在内存中的占用空间较小。
在本申请实施例中,在数据存储时,分为两部分存储到磁盘中,一部分是索引文件,另一部分是记录索引文件偏移量和长度的多叉树;在内存中仅需存储多叉树的第一层区块,节省内存空间;在数据查询时,只需在多叉树的第一层的区块中查找到对应节点,即可根据多叉树的分层结构得到叶子节点,然后根据叶子节点中存储的索引文件在磁盘的偏移量和长度,即可获取索引文件,提高了数据查询的效率。
基于上述图1所示的实施环境,本申请实施例提供一种数据查询方法,以该方法应用于服务器为例。如图8所示,本申请实施例提供的方法可以包括如下几个步骤:
在步骤801中,获取待查询的数据和多叉树的第一层的区块。
待查询的数据包括一个或多个标签对,每个标签对由标签名称和标签ID组成;多叉树按照参考规则创建得到,多叉树的层数为一层或多层,每层包含一个或者多个区块,每个区块包含一个或多个节点;同一层的不同节点存储位数相同数值不同的哈希值,不同层的不同节点存储位数不同的哈希值;多叉树的最后一层的节点为叶子节点,叶子节点存储索引文件在磁盘的偏移量和长度,非叶子节点存储下一层区块在磁盘的偏移量和长度。对多叉树的具体介绍参见上述实施例,在此不再赘述。
在步骤802中,对于任一标签对,获取标签对的标签名称的哈希值。
待查询的数据中可能有一个或多个标签对,例如,待查询的数据可能为“性别为女”,也可能为“性别为女,年龄为25岁”。对于待查询数据中的任一标签对,对齐标签名称进行哈希计算,得到该标签对的标签名称的哈希值。
在步骤803中,在多叉树的第一层的区块查找与标签对的标签名称的哈希值对应的节点,根据节点存储的下一层的区块在磁盘的偏移量和长度,在磁盘中确定下一层的区块,在下一层的区块查找与标签对的标签名称的哈希值对应的节点,循环此过程,直至节点为叶子节点。
需要说明的是,在进行数据存储的过程中,若将基于原始数据得到弹性分布数据集(RDD)进行了分区,则在每个分区中并行进行数据查询。
可选地,在多叉树的第一层的区块查找与标签对的标签名称的哈希值对应的节点,包括:
获取多叉树的第一层的区块包含的节点能够存储的哈希值的位数L1;获取标签对的标签名称的哈希值的前L1位对应的目标哈希值,在多叉树的第一层的区块中查找存储标签对的标签名称的哈希值的前L1位对应的目标哈希值的节点。
在多叉树中查找存储待查询的标签对的叶子节点的过程可如图9所示。首先从i=1的层,也就是第一层中开始查找,若在第一层查找到存储该标签名称的哈希值的前L1位对应的目标哈希值的节点,则根据该节点存储的下一层的区块在磁盘的偏移量和长度,在磁盘中确定第二层的区块,在第二层的区块中继续根据上述过程进行查找,直至查找到i=H的层,也就是叶子节点所在的层。在查找到匹配的叶子节点后,判断叶子节点中存储的标签对是否和待查询的标签对相等,若相等,则返回叶子节点中存储的索引文件在磁盘中的偏移量和长度。若在第i层未查找到存储该标签名称的哈希值的前Li位对应的目标哈希值的节点,或者叶子节点中存储的标签对和待查询的标签对不相等,则查找失败,返回的结果为空。在多叉树中查找存储待查询的标签对的叶子节点过程中,只需将多叉树的第一层区块存储到内存中,节省内存空间。
接下来对在多叉树中查找存储待查询的标签对的叶子节点的过程进行举例说明,如图10所示。假设磁盘中存储的多叉树为图10所示的多叉树,假设待查询的标签对为“年龄为25岁”,假设该标签对的标签名称“年龄”的哈希值为12367。首先在多叉树的第一层中查找到存储的哈希值为12的节点,然后根据该节点中存储的第二层的区块在磁盘中的偏移量和长度将第二层的一个区块加载进内存;在第二层的区块中查找到存储的哈希值为123的节点,然后根据该节点中存储的第三层的区块在磁盘中的偏移量和长度将第三层的一个区块加载进内存;在第三层的区块中查找到存储的哈希值为1236的节点,然后根据该节点中存储的第四层的区块在磁盘中的偏移量和长度将第四层的一个区块加载进内存;在第四层的区块中查找到存储的哈希值为12367的节点,由于该节点为叶子节点,所以判断该叶子节点中存储的标签对是否为“年龄为25岁”,若该叶子节点中存储的标签对是“年龄为25岁”,则返回该叶子节点中存储的该标签对的索引文件在磁盘中的偏移量和长度;若该叶子节点中存储的标签对不是“年龄为25岁”,则返回的结果为空。
可选地,当多叉树多叉树的第一层的区块的节点根据存储的哈希值的字典序从小到大进行排列时,可以在多叉树的第一层的区块通过二分法查找与标签对的标签名称的哈希值对应的节点。
二分法查找,也称为折半法,是一种在有序数组中查找特定元素的搜索算法。二分法查找的思路如下:(1)首先,从数组的中间元素开始搜索,如果该元素正好是目标元素,则搜索过程结束,否则执行下一步。(2)如果目标元素大于/小于中间元素,则在数组大于/小于中间元素的那一半区域查找,然后重复步骤(1)的操作。(3)如果某一步数组为空,则表示找不到目标元素。
当为范围查找时,只需从区块中找到第一个满足要求的节点,接着向后遍历直到第一个不满足要求的节点为止。可以大大减少访问磁盘的次数,提高查询效率。
在步骤804中,根据叶子节点中存储的索引文件在磁盘的偏移量和长度,获取任一标签对的索引文件;基于待查询数据的所有标签对的索引文件,获取查询到的数据。
根据叶子节点中存储的索引文件在磁盘的偏移量和长度,即可确定待查询的标签对的索引文件在磁盘的存储位置,从而能够从磁盘中获取该标签对的索引文件。
由于待查询的数据中可能包含一个或多个标签对,所以需要获取所有标签对的索引文件。可选地,基于待查询数据的所有标签对的索引文件,获取查询到的数据的方式为:从同时包含所有标签对的索引文件作为待查询数据的索引文件,从该文件中获取查询到的数据。例如,待查询数据为“性别为女,年龄为25岁”,包含标签对“性别为女”的索引文件为文件1、文件2和文件3,包含标签对“年龄为25岁”的索引文件为文件2、文件4和文件5,则将文件2作为待查询数据“性别为女,年龄为25岁”的索引文件,基于该索引文件即可获取待查询数据的相关信息。
在本申请实施例中,在数据存储时,分为两部分存储到磁盘中,一部分是索引文件,另一部分是记录索引文件偏移量和长度的多叉树;在内存中仅需存储多叉树的第一层区块,节省内存空间;在数据查询时,只需在多叉树的第一层的区块中查找到对应节点,即可根据多叉树的分层结构得到叶子节点,然后根据叶子节点中存储的索引文件在磁盘的偏移量和长度,即可获取索引文件,提高了数据查询的效率。
基于相同技术构思,参见图11,本申请实施例提供了一种数据存储装置,该装置包括:
第一获取模块1101,用于获取原始数据,基于原始数据得到弹性分布数据集,弹性分布数据集中包含一个或多个主键;每个主键对应有一个或多个标签对,每个标签对由标签名称和标签ID组成;
第二获取模块1102,用于对于任一标签对,获取任一标签对的索引文件;
存储模块1103,用于将索引文件存储到磁盘中,得到索引文件在磁盘的偏移量和长度;
第三获取模块1104,用于获取任一标签对的标签名称的哈希值;
创建模块1105,用于根据任一标签对的标签名称的哈希值,按照参考规则创建多叉树,多叉树的层数为一层或多层,每层包含一个或者多个区块,每个区块包含一个或多个节点;同一层的不同节点用于存储位数相同数值不同的哈希值,不同层的不同节点用于存储位数不同的哈希值;多叉树的最后一层的节点为叶子节点;
存储模块1103,还用于将索引文件在磁盘的偏移量和长度存储到叶子节点中;从多叉树的叶子节点开始,将每层的区块依次存储到磁盘中,每个区块在存储到磁盘中后,将每个区块在磁盘的偏移量和长度存储到上一层的节点中;将多叉树的第一层的区块存储到内存中。
可选地,参见图12,创建模块1105,包括:
确定单元11051,用于确定多叉树的参考层数H以及第i层的节点能够存储的哈希值的位数Li;
获取单元11052,用于根据多叉树的第i层的节点能够存储的哈希值的位数Li,获取任一标签对的标签名称的哈希值的前Li位对应的目标哈希值;
创建单元11053,用于当多叉树的第i层不存在存储任一标签对的标签名称的哈希值的前Li位对应的目标哈希值的节点时,在多叉树的第i层创建一个新的节点;
存储单元11054,用于在新的节点中存储任一标签对的标签名称的哈希值的前Li位对应的目标哈希值;
创建单元11053,还用于当多叉树的第i层存在存储任一标签对的标签名称的哈希值的前Li位对应的目标哈希值的节点时,创建多叉树的下一层,此时i=i+1;
创建单元11053,还用于当i=H-1时,创建多叉树的叶子节点;
存储单元11054,还用于将任一标签对的标签名称的哈希值存储在叶子节点中。
可选地,参见图13,创建模块1105,还包括:
排序单元11055,用于将多叉树的第i层的节点根据存储的任一标签对的标签名称的哈希值的前Li位对应的目标哈希值的字典序从小到大进行排列。
可选地,参见图14,该装置还包括:
分区模块1106,用于基于弹性分布数据集中的主键,将弹性分布数据集进行分区;
第二获取模块1102,用于在每个分区内,对于任一标签对,获取任一标签对的索引文件。
可选地,参见图14,该装置还包括:
编号模块1107,用于对弹性分布数据集中的主键进行编号;基于主键的编号,确定主键对应的一个或多个标签对。
在本申请实施例中,在数据存储时,分为两部分存储到磁盘中,一部分是索引文件,另一部分是记录索引文件偏移量和长度的多叉树;在内存中仅需存储多叉树的第一层区块,节省内存空间;在数据查询时,只需在多叉树的第一层的区块中查找到对应节点,即可根据多叉树的分层结构得到叶子节点,然后根据叶子节点中存储的索引文件在磁盘的偏移量和长度,即可获取索引文件,提高了数据查询的效率。
基于相同技术构思,参见图15,本申请实施例提供了一种数据查询装置,该装置包括:
第一获取模块1501,用于获取待查询的数据和多叉树的第一层的区块,待查询的数据包括一个或多个标签对,每个标签对由标签名称和标签ID组成;多叉树按照参考规则创建得到,多叉树的层数为一层或多层,每层包含一个或者多个区块,每个区块包含一个或多个节点;同一层的不同节点存储位数相同数值不同的哈希值,不同层的不同节点存储位数不同的哈希值;多叉树的最后一层的节点为叶子节点,叶子节点存储索引文件在磁盘的偏移量和长度,非叶子节点存储下一层区块在磁盘的偏移量和长度;
第二获取模块1502,用于对于任一标签对,获取标签对的标签名称的哈希值;
查找模块1503,用于在多叉树的第一层的区块查找与标签对的标签名称的哈希值对应的节点;根据节点存储的下一层的区块在磁盘的偏移量和长度,在磁盘中确定下一层的区块,在下一层的区块查找与标签对的标签名称的哈希值对应的节点,循环此过程,直至节点为叶子节点;
第三获取模块1504,用于根据叶子节点中存储的索引文件在磁盘的偏移量和长度,获取任一标签对的索引文件;
第四获取模块1505,用于基于待查询数据的所有标签对的索引文件,获取查询到的数据。
可选地,参见图16,查找模块1503,包括:
确定单元15031,用于确定多叉树的第一层的区块包含的节点能够存储的哈希值的位数L1;
获取单元15032,用于获取标签对的标签名称的哈希值的前L1位对应的目标哈希值;
查找单元15033,用于在多叉树的第一层的区块中查找存储标签对的标签名称的哈希值的前L1位对应的目标哈希值的节点。
可选地,多叉树的第一层的区块的节点根据存储的哈希值的字典序从小到大进行排列;
查找模块1503,用于在多叉树的第一层的区块通过二分法查找与标签对的标签名称的哈希值对应的节点。
在本申请实施例中,在数据存储时,分为两部分存储到磁盘中,一部分是索引文件,另一部分是记录索引文件偏移量和长度的多叉树;在内存中仅需存储多叉树的第一层区块,节省内存空间;在数据查询时,只需在多叉树的第一层的区块中查找到对应节点,即可根据多叉树的分层结构得到叶子节点,然后根据叶子节点中存储的索引文件在磁盘的偏移量和长度,即可获取索引文件,提高了数据查询的效率。
需要说明的是,上述实施例提供的装置在实现其功能时,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将设备的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。另外,上述实施例提供的装置与方法实施例属于同一构思,其具体实现过程详见方法实施例,这里不再赘述。
图17是本申请实施例提供的一种数据存储或者数据查询的设备结构示意图,该设备可以为服务器,服务器可以是单独的服务器或集群服务器。具体来讲:
服务器包括中央处理单元(CPU)1701、随机存取存储器(RAM)1702和只读存储器(ROM)1703的系统存储器1704,以及连接系统存储器1704和中央处理单元1701的系统总线1705。服务器还包括帮助计算机内的各个器件之间传输信息的基本输入/输出系统(I/O系统)1706,和用于存储操作系统1713、应用程序1714和其他程序模块1715的大容量存储设备1707。
基本输入/输出系统1706包括有用于显示信息的显示器1708和用于用户输入信息的诸如鼠标、键盘之类的输入设备1709。其中显示器1708和输入设备1709都通过连接到系统总线1705的输入/输出控制器1710连接到中央处理单元1701。基本输入/输出系统1706还可以包括输入/输出控制器1710以用于接收和处理来自键盘、鼠标、或电子触控笔等多个其他设备的输入。类似地,输入/输出控制器1710还提供输出到显示屏、打印机或其他类型的输出设备。
大容量存储设备1707通过连接到系统总线1705的大容量存储控制器(未示出)连接到中央处理单元1701。大容量存储设备1707及其相关联的计算机可读介质为服务器提供非易失性存储。也就是说,大容量存储设备1707可以包括诸如硬盘或者CD-ROM驱动器之类的计算机可读介质(未示出)。
不失一般性,计算机可读介质可以包括计算机存储介质和通信介质。计算机存储介质包括以用于存储诸如计算机可读指令、数据结构、程序模块或其他数据等信息的任何方法或技术实现的易失性和非易失性、可移动和不可移动介质。计算机存储介质包括RAM、ROM、EPROM、EEPROM、闪存或其他固态存储其技术,CD-ROM、DVD或其他光学存储、磁带盒、磁带、磁盘存储或其他磁性存储设备。当然,本领域技术人员可知计算机存储介质不局限于上述几种。上述的系统存储器1704和大容量存储设备1707可以统称为存储器。
根据本申请的各种实施例,服务器还可以通过诸如因特网等网络连接到网络上的远程计算机运行。也即服务器可以通过连接在系统总线1705上的网络接口单元1711连接到网络1712,或者说,也可以使用网络接口单元1711来连接到其他类型的网络或远程计算机系统(未示出)。
上述存储器还包括一个或者一个以上的程序,一个或者一个以上程序存储于存储器中,被配置由CPU执行。所述一个或者一个以上程序包含用于进行本申请实施例提供的数据存储方法的指令或者数据查询方法的指令。
在示例性实施例中,还提供了一种计算机设备,所述计算机设备包括处理器和存储器,所述存储器中存储有至少一条指令、至少一段程序、代码集或指令集。所述至少一条指令、至少一段程序、代码集或指令集经配置以由一个或者一个以上处理器执行,以实现上述任一种数据存储方法,或者以实现上述任一种数据查询方法。
在示例性实施例中,还提供了一种计算机可读存储介质,所述存储介质中存储有至少一条指令、至少一段程序、代码集或指令集,所述至少一条指令、所述至少一段程序、所述代码集或所述指令集在被计算机设备的处理器执行时实现上述任一种数据存储方法,或者以实现上述任一种数据查询方法。
可选地,上述计算机可读存储介质可以是ROM、随机存取存储器(RAM)、CD-ROM、磁带、软盘和光数据存储设备等。
应当理解的是,在本文中提及的“多个”是指两个或两个以上。“和/或”,描述关联对象的关联关系,表示可以存在三种关系,例如,A和/或B,可以表示:单独存在A,同时存在A和B,单独存在B这三种情况。字符“/”一般表示前后关联对象是一种“或”的关系。
上述本申请实施例序号仅仅为了描述,不代表实施例的优劣。
以上所述仅为本申请的示例性实施例,并不用以限制本申请,凡在本申请的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本申请的保护范围之内。
Claims (10)
1.一种数据存储方法,其特征在于,所述方法包括:
获取原始数据,基于所述原始数据得到弹性分布数据集,所述弹性分布数据集中包含一个或多个主键;每个主键对应有一个或多个标签对,每个标签对由标签名称和标签ID组成;
对于任一标签对,获取所述任一标签对的索引文件,将所述索引文件存储到磁盘中,得到所述索引文件在磁盘的偏移量和长度;
获取所述任一标签对的标签名称的哈希值;
根据所述任一标签对的标签名称的哈希值,按照参考规则创建多叉树,所述多叉树的层数为一层或多层,每层包含一个或者多个区块,每个区块包含一个或多个节点;同一层的不同节点用于存储位数相同数值不同的哈希值,不同层的不同节点用于存储位数不同的哈希值;所述多叉树的最后一层的节点为叶子节点;
将所述索引文件在磁盘的偏移量和长度存储到所述叶子节点中;从所述多叉树的叶子节点开始,将每层的区块依次存储到磁盘中,每个区块在存储到磁盘中后,将每个区块在磁盘的偏移量和长度存储到上一层的节点中;
将所述多叉树的第一层的区块存储到内存中。
2.根据权利要求1所述的方法,其特征在于,所述根据所述任一标签对的标签名称的哈希值,按照参考规则创建多叉树,包括:
确定所述多叉树的参考层数H以及第i层的节点能够存储的哈希值的位数Li;
根据所述多叉树的第i层的节点能够存储的哈希值的位数Li,获取所述任一标签对的标签名称的哈希值的前Li位对应的目标哈希值;
当所述多叉树的第i层不存在存储所述任一标签对的标签名称的哈希值的前Li位对应的目标哈希值的节点时,在所述多叉树的第i层创建一个新的节点,在所述新的节点中存储所述任一标签对的标签名称的哈希值的前Li位对应的目标哈希值;
当所述多叉树的第i层存在存储所述任一标签对的标签名称的哈希值的前Li位对应的目标哈希值的节点时,创建所述多叉树的下一层,此时i=i+1;
当i=H-1时,创建所述多叉树的叶子节点,将所述任一标签对的标签名称的哈希值存储在所述叶子节点中。
3.根据权利要求2所述的方法,其特征在于,所述多叉树的第i层的节点根据存储的所述任一标签对的标签名称的哈希值的前Li位对应的目标哈希值的字典序从小到大进行排列。
4.根据权利要求1-3任一所述的方法,其特征在于,所述基于所述原始数据得到弹性分布数据集之后,还包括:
基于所述弹性分布数据集中的主键,将所述弹性分布数据集进行分区;
所述对于任一标签对,获取所述任一标签对的索引文件,包括:
在每个分区内,对于任一标签对,获取所述任一标签对的索引文件。
5.根据权利要求1-4任一所述的方法,其特征在于,所述基于所述原始数据得到弹性分布数据集之后,还包括:
对所述弹性分布数据集中的主键进行编号;
基于所述主键的编号,确定所述主键对应的一个或多个标签对。
6.一种数据查询方法,其特征在于,所述方法包括:
获取待查询的数据和多叉树的第一层的区块,所述待查询的数据包括一个或多个标签对,每个标签对由标签名称和标签ID组成;所述多叉树按照参考规则创建得到,所述多叉树的层数为一层或多层,每层包含一个或者多个区块,每个区块包含一个或多个节点;同一层的不同节点存储位数相同数值不同的哈希值,不同层的不同节点存储位数不同的哈希值;所述多叉树的最后一层的节点为叶子节点,所述叶子节点存储索引文件在磁盘的偏移量和长度,非叶子节点存储下一层区块在磁盘的偏移量和长度;
对于任一标签对,获取所述标签对的标签名称的哈希值;
在所述多叉树的第一层的区块查找与所述标签对的标签名称的哈希值对应的节点,根据所述节点存储的下一层的区块在磁盘的偏移量和长度,在磁盘中确定所述下一层的区块,在所述下一层的区块查找与所述标签对的标签名称的哈希值对应的节点,循环此过程,直至所述节点为叶子节点;
根据所述叶子节点中存储的索引文件在磁盘的偏移量和长度,获取所述任一标签对的索引文件;
基于所述待查询数据的所有标签对的索引文件,获取查询到的数据。
7.根据权利要求6所述的方法,其特征在于,所述在所述多叉树的第一层的区块查找与所述标签对的标签名称的哈希值对应的节点,包括:
确定所述多叉树的第一层的区块包含的节点能够存储的哈希值的位数L1;
获取所述标签对的标签名称的哈希值的前L1位对应的目标哈希值,在所述多叉树的第一层的区块中查找存储所述标签对的标签名称的哈希值的前L1位对应的目标哈希值的节点。
8.根据权利要求6或7所述的方法,其特征在于,所述在所述多叉树的第一层的区块查找与所述标签对的标签名称的哈希值对应的节点,包括:
所述多叉树的第一层的区块的节点根据存储的哈希值的字典序从小到大进行排列;
在所述多叉树的第一层的区块通过二分法查找与所述标签对的标签名称的哈希值对应的节点。
9.一种数据存储装置,其特征在于,所述装置包括:
第一获取模块,用于获取原始数据,基于所述原始数据得到弹性分布数据集,所述弹性分布数据集中包含一个或多个主键;每个主键对应有一个或多个标签对,每个标签对由标签名称和标签ID组成;
第二获取模块,用于对于任一标签对,获取所述任一标签对的索引文件;
存储模块,用于将所述索引文件存储到磁盘中,得到所述索引文件在磁盘的偏移量和长度;
第三获取模块,用于获取所述任一标签对的标签名称的哈希值;
创建模块,用于根据所述任一标签对的标签名称的哈希值,按照参考规则创建多叉树,所述多叉树的层数为一层或多层,每层包含一个或者多个区块,每个区块包含一个或多个节点;同一层的不同节点用于存储位数相同数值不同的哈希值,不同层的不同节点用于存储位数不同的哈希值;所述多叉树的最后一层的节点为叶子节点;
所述存储模块,还用于将所述索引文件在磁盘的偏移量和长度存储到所述叶子节点中;从所述多叉树的叶子节点开始,将每层的区块依次存储到磁盘中,每个区块在存储到磁盘中后,将每个区块在磁盘的偏移量和长度存储到上一层的节点中;将所述多叉树的第一层的区块存储到内存中。
10.一种数据查询装置,其特征在于,所述装置包括:
第一获取模块,用于获取待查询的数据和多叉树的第一层的区块,所述待查询的数据包括一个或多个标签对,每个标签对由标签名称和标签ID组成;所述多叉树按照参考规则创建得到,所述多叉树的层数为一层或多层,每层包含一个或者多个区块,每个区块包含一个或多个节点;同一层的不同节点存储位数相同数值不同的哈希值,不同层的不同节点存储位数不同的哈希值;所述多叉树的最后一层的节点为叶子节点,所述叶子节点存储索引文件在磁盘的偏移量和长度,非叶子节点存储下一层区块在磁盘的偏移量和长度;
第二获取模块,用于对于任一标签对,获取所述标签对的标签名称的哈希值;
查找模块,用于在所述多叉树的第一层的区块查找与所述标签对的标签名称的哈希值对应的节点;根据所述节点存储的下一层的区块在磁盘的偏移量和长度,在磁盘中确定所述下一层的区块,在所述下一层的区块查找与所述标签对的标签名称的哈希值对应的节点,循环此过程,直至所述节点为叶子节点;
第三获取模块,用于根据所述叶子节点中存储的索引文件在磁盘的偏移量和长度,获取所述任一标签对的索引文件;
第四获取模块,用于基于所述待查询数据的所有标签对的索引文件,获取查询到的数据。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910550724.6A CN110413611B (zh) | 2019-06-24 | 2019-06-24 | 数据存储、查询方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910550724.6A CN110413611B (zh) | 2019-06-24 | 2019-06-24 | 数据存储、查询方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110413611A CN110413611A (zh) | 2019-11-05 |
CN110413611B true CN110413611B (zh) | 2023-05-12 |
Family
ID=68359680
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910550724.6A Active CN110413611B (zh) | 2019-06-24 | 2019-06-24 | 数据存储、查询方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110413611B (zh) |
Families Citing this family (13)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111198879A (zh) * | 2019-11-12 | 2020-05-26 | 恒大智慧科技有限公司 | 基于智慧社区的业务数据存储方法及系统 |
CN110968605A (zh) * | 2019-12-16 | 2020-04-07 | 成都长城开发科技有限公司 | 电表曲线数据的查找方法、装置 |
CN111241108B (zh) * | 2020-01-16 | 2023-12-26 | 北京百度网讯科技有限公司 | 基于键值对kv系统的索引方法、装置、电子设备和介质 |
CN111340623B (zh) * | 2020-02-21 | 2023-10-24 | 度小满科技(北京)有限公司 | 一种数据存储方法及装置 |
CN111414527B (zh) * | 2020-03-16 | 2023-10-10 | 腾讯音乐娱乐科技(深圳)有限公司 | 相似项目的查询方法、装置及存储介质 |
CN113448920A (zh) * | 2020-03-27 | 2021-09-28 | 伊姆西Ip控股有限责任公司 | 管理存储系统中的索引的方法、设备和计算机程序产品 |
CN111581215B (zh) * | 2020-05-07 | 2020-12-15 | 钟士平 | 数组树数据储存方法、快速查找方法及可读储存介质 |
CN112214803B (zh) * | 2020-10-21 | 2023-12-01 | 北京八分量信息科技有限公司 | 在可信计算中查询数据的方法、装置及相关产品 |
CN113722314B (zh) * | 2020-12-31 | 2024-04-16 | 京东城市(北京)数字科技有限公司 | 一种空间连接查询方法、装置、电子设备及存储介质 |
CN112783896B (zh) * | 2021-01-12 | 2023-05-23 | 湖北宸威玺链信息技术有限公司 | 一种用于加载文件减少内存使用率的方法 |
CN112817538B (zh) * | 2021-02-22 | 2022-08-30 | 腾讯科技(深圳)有限公司 | 数据处理的方法、装置、设备和存储介质 |
CN113177075B (zh) * | 2021-04-08 | 2023-10-03 | 中电鹰硕(深圳)智慧互联有限公司 | 一种基于大数据平台的笔迹数据存储方法及系统 |
CN113448512B (zh) * | 2021-05-23 | 2022-06-17 | 山东英信计算机技术有限公司 | 一种缓存分区恢复的接管方法、装置、设备及可读介质 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6990493B1 (en) * | 2000-12-22 | 2006-01-24 | Emc Corporation | File access system |
CN103345472A (zh) * | 2013-06-04 | 2013-10-09 | 北京航空航天大学 | 基于有限二叉树布隆过滤器的去冗文件系统及其构建方法 |
CN103714134A (zh) * | 2013-12-18 | 2014-04-09 | 中国科学院计算技术研究所 | 一种网络流量数据索引方法及系统 |
CN104899297A (zh) * | 2015-06-08 | 2015-09-09 | 南京航空航天大学 | 具有存储感知的混合索引结构 |
CN105488172A (zh) * | 2015-11-30 | 2016-04-13 | 北京奇艺世纪科技有限公司 | 一种基于位置的数据查询方法及装置 |
CN109033340A (zh) * | 2018-07-23 | 2018-12-18 | 武汉大学 | 一种基于Spark平台的点云K邻域的搜索方法及装置 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10496283B2 (en) * | 2016-01-22 | 2019-12-03 | Suraj Prabhakar WAGHULDE | Adaptive prefix tree based order partitioned data storage system |
-
2019
- 2019-06-24 CN CN201910550724.6A patent/CN110413611B/zh active Active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6990493B1 (en) * | 2000-12-22 | 2006-01-24 | Emc Corporation | File access system |
CN103345472A (zh) * | 2013-06-04 | 2013-10-09 | 北京航空航天大学 | 基于有限二叉树布隆过滤器的去冗文件系统及其构建方法 |
CN103714134A (zh) * | 2013-12-18 | 2014-04-09 | 中国科学院计算技术研究所 | 一种网络流量数据索引方法及系统 |
CN104899297A (zh) * | 2015-06-08 | 2015-09-09 | 南京航空航天大学 | 具有存储感知的混合索引结构 |
CN105488172A (zh) * | 2015-11-30 | 2016-04-13 | 北京奇艺世纪科技有限公司 | 一种基于位置的数据查询方法及装置 |
CN109033340A (zh) * | 2018-07-23 | 2018-12-18 | 武汉大学 | 一种基于Spark平台的点云K邻域的搜索方法及装置 |
Also Published As
Publication number | Publication date |
---|---|
CN110413611A (zh) | 2019-11-05 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110413611B (zh) | 数据存储、查询方法及装置 | |
CN110321344B (zh) | 关联数据的信息查询方法、装置、计算机设备及存储介质 | |
EP2924594A1 (en) | Data encoding and corresponding data structure in a column-store database | |
US11604834B2 (en) | Technologies for performing stochastic similarity searches in an online clustering space | |
US20100106713A1 (en) | Method for performing efficient similarity search | |
US9535939B2 (en) | Intra-block partitioning for database management | |
RU2005105582A (ru) | База данных и система управления знаниями | |
CN1152365A (zh) | 一种存储和检索数据的方法和一种存储器配置 | |
CN112287182A (zh) | 图数据存储、处理方法、装置及计算机存储介质 | |
US10191998B1 (en) | Methods of data reduction for parallel breadth-first search over graphs of connected data elements | |
US20150058352A1 (en) | Thin database indexing | |
CN108009265B (zh) | 一种云计算环境下的空间数据索引方法 | |
CN104636349A (zh) | 一种索引数据压缩以及索引数据搜索的方法和设备 | |
CN114610708A (zh) | 一种向量数据处理方法及装置、电子设备及存储介质 | |
CN114691721A (zh) | 图数据的查询方法、装置、电子设备及存储介质 | |
CN108549696B (zh) | 一种基于内存计算的时间序列数据相似性查询方法 | |
CN110020001A (zh) | 字符串数据的存储、查询方法以及相应的设备 | |
CN110389953B (zh) | 基于压缩图的数据存储方法、存储介质、存储装置和服务器 | |
CN108647243B (zh) | 基于时间序列的工业大数据存储方法 | |
CN116126864A (zh) | 索引构建方法、数据查询方法及相关设备 | |
US9292553B2 (en) | Queries for thin database indexing | |
CN114398373A (zh) | 应用于数据库存储的文件数据存储读取方法及装置 | |
CN117131012B (zh) | 一种可持久化和可扩展的轻量级多版本有序键值存储系统 | |
CN114741413A (zh) | 数据表关联处理方法、装置、计算机设备、存储介质 | |
CN117478149B (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 |