CN110879854A - 使用超集树数据结构搜索数据 - Google Patents
使用超集树数据结构搜索数据 Download PDFInfo
- Publication number
- CN110879854A CN110879854A CN201910700302.2A CN201910700302A CN110879854A CN 110879854 A CN110879854 A CN 110879854A CN 201910700302 A CN201910700302 A CN 201910700302A CN 110879854 A CN110879854 A CN 110879854A
- Authority
- CN
- China
- Prior art keywords
- values
- query
- data
- record
- leaf node
- 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
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/90—Details of database functions independent of the retrieved data types
- G06F16/901—Indexing; Data structures therefor; Storage structures
- G06F16/9027—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/24—Querying
- G06F16/245—Query processing
- G06F16/2453—Query optimisation
- G06F16/24534—Query rewriting; Transformation
- G06F16/24542—Plan 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/10—File systems; File servers
- G06F16/13—File access structures, e.g. distributed indices
- G06F16/137—Hash-based
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/10—File systems; File servers
- G06F16/14—Details of searching files based on file metadata
- G06F16/148—File search 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/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/2282—Tablespace storage structures; Management thereof
-
- 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/2462—Approximate or statistical queries
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/90—Details of database functions independent of the retrieved data types
- G06F16/903—Querying
- G06F16/9035—Filtering based on additional data, e.g. user or group profiles
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Databases & Information Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- Data Mining & Analysis (AREA)
- General Physics & Mathematics (AREA)
- Software Systems (AREA)
- Computational Linguistics (AREA)
- Probability & Statistics with Applications (AREA)
- Operations Research (AREA)
- Fuzzy Systems (AREA)
- Mathematical Physics (AREA)
- Library & Information Science (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
一些实施例提供了一种接收对表中在表的列中具有被包括在值的集合中的值的记录的查询的程序。该程序进一步遍历分层树结构,以便基于值的集合识别分层树结构的叶节点的集合。分层树结构中的每个叶节点包括描述与叶节点相关联的记录块的列中的值的超集的数据。每个非叶节点包括描述由非叶节点的子节点中的数据描述的值的超集的数据。该程序还处理对表中与叶节点的集合相关联的记录块的集合的查询。该程序进一步基于该处理来生成查询的结果。
Description
背景技术
数据库系统可以存储大量数据。不同的数据库系统可以使用不同的数据存储方法。例如,一些数据库系统将数据存储在表中,而其他数据库系统可以将数据存储在诸如电子表格、文档、媒体等的文件中。存储的数据的类型跨不同的数据库系统而变化。例如,一些数据库系统可以存储结构化数据。另一方面,一些数据库系统可以存储非结构化数据。许多技术可以用来在数据库系统中搜索特定数据。例如,一些数据库系统遍历(iteratethrough)数据库系统中的所有数据,以便识别与查询匹配的数据。其他数据库系统可以使用索引以用于更快搜索。
发明内容
在一些实施例中,一种存储程序的非暂时性机器可读介质。该程序接收对表中在表的列中具有被包括在值的集合中的值的记录的查询。该程序进一步遍历包括以多个级别排列的多个节点的分层树结构,以便基于值的集合识别分层树结构的叶节点的集合。分层树结构中的每个叶节点与表中的记录块相关联。分层树结构中的每个叶节点包括描述与叶节点相关联的记录块的列中的值的超集的数据。每个非叶节点包括描述由非叶节点的子节点中的数据描述的值的超集的数据。该程序还处理对表中与叶节点的集合相关联的记录块的集合的查询。该程序进一步基于该处理来生成查询的结果。
在一些实施例中,表的列中的值可以是整数值。分层树结构中的每个叶节点的数据可以根据整数值范围来描述与叶节点相关联的记录块的列中的值。分层树结构中的每个非叶节点的数据可以根据整数值范围来描述超集。在查询中指定的值的集合可以形成整数值范围。处理对记录块的集合的查询可以包括,对于记录块的集合中的每个记录块,确定记录块与其相关联的叶节点的整数值范围是否是查询的整数值范围的子集;如果记录块与其相关联的叶节点的整数值范围是查询的整数值范围的子集,则将记录块包括在查询的结果中;以及如果记录块与其相关联的叶节点的整数值范围不是查询的整数值范围的子集,则将记录块中在表的列中具有在查询的整数值范围内的值的记录包括在查询的结果中。
在一些实施例中,表的列中的值可以是字符串值。分层树结构中的每个叶节点的数据可以根据从与叶节点相关联的记录块的列中的字符串值和散列函数的集合生成的布隆过滤器来描述与叶节点相关联的记录块的列中的值。分层树结构中的每个非叶节点的数据可以根据从非叶节点的子节点的布隆过滤器和散列函数的集合生成的布隆过滤器来描述超集。处理对记录块的集合的查询可以包括,对于记录块的集合中的每个记录块,遍历记录块中的记录;以及将记录块中在表的列中具有与值的集合中的值匹配的值的记录包括在查询的结果中。
在一些实施例中,处理对记录块的集合的查询可以包括处理对记录块的集合中的每个记录块的查询。生成查询的结果可以包括聚合来自对记录块的集合中的每个记录块的查询的结果,以形成查询的结果。值的集合中的至少一个值可以被包括在由叶节点的集合中的每个叶节点的数据描述的值的超集中。
在一些实施例中,一种接收对表中在表的列中具有被包括在值的集合中的值的记录的查询的方法。该方法进一步遍历包括以多个级别排列的多个节点的分层树结构,以便基于值的集合识别分层树结构的叶节点的集合。分层树结构中的每个叶节点与表中的记录块相关联。分层树结构中的每个叶节点包括描述与叶节点相关联的记录块的列中的值的超集的数据。每个非叶节点包括描述由非叶节点的子节点中的数据描述的值的超集的数据。该方法还处理对表中与叶节点的集合相关联的记录块的集合的查询。该方法进一步基于该处理来生成查询的结果。
在一些实施例中,表的列中的值可以是整数值。分层树结构中的每个叶节点的数据可以根据整数值范围来描述与叶节点相关联的记录块的列中的值。分层树结构中的每个非叶节点的数据可以根据整数值范围来描述超集。在查询中指定的值的集合可以形成整数值范围。处理对记录块的集合的查询可以包括,对于记录块的集合中的每个记录块,确定记录块与其相关联的叶节点的整数值范围是否是查询的整数值范围的子集;如果记录块与其相关联的叶节点的整数值范围是查询的整数值范围的子集,则将记录块包括在查询的结果中;以及如果记录块与其相关联的叶节点的整数值范围不是查询的整数值范围的子集,则将记录块中在表的列中具有在查询的整数值范围内的值的记录包括在查询的结果中。
在一些实施例中,表的列中的值可以是字符串值。分层树结构中的每个叶节点的数据可以根据从与叶节点相关联的记录块的列中的字符串值和散列函数的集合生成的布隆过滤器来描述与叶节点相关联的记录块的列中的值。分层树结构中的每个非叶节点的数据可以根据从非叶节点的子节点的布隆过滤器和散列函数的集合生成的布隆过滤器来描述超集。处理对记录块的集合的查询可以包括,对于记录块的集合中的每个记录块,遍历记录块中的记录;以及将记录块中在表的列中具有与值的集合中的值匹配的值的记录包括在查询的结果中。
在一些实施例中,处理对记录块的集合的查询可以包括处理对记录块的集合中的每个记录块的查询。生成查询的结果可以包括聚合来自对记录块的集合中的每个记录块的查询的结果,以形成查询的结果。值的集合中的至少一个值可以被包括在由叶节点的集合中的每个叶节点的数据描述的值的超集中。
在一些实施例中,一种包括处理单元的集合和存储指令的非暂时性机器可读介质的系统。该指令使得至少一个处理单元接收对表中在表的列中具有被包括在值的集合中的值的记录的查询。该指令进一步使得至少一个处理单元遍历包括以多个级别排列的多个节点的分层树结构,以便基于值的集合识别分层树结构的叶节点的集合。分层树结构中的每个叶节点与表中的记录块相关联。分层树结构中的每个叶节点包括描述与叶节点相关联的记录块的列中的值的超集的数据。每个非叶节点包括描述由非叶节点的子节点中的数据描述的值的超集的数据。该指令还使得至少一个处理单元处理对表中与叶节点的集合相关联的记录块的集合的查询。该指令进一步使得至少一个处理单元基于该处理来生成查询的结果。
在一些实施例中,表的列中的值可以是整数值。分层树结构中的每个叶节点的数据可以根据整数值范围来描述与叶节点相关联的记录块的列中的值。分层树结构中的每个非叶节点的数据可以根据整数值范围来描述超集。在查询中指定的值的集合可以形成整数值范围。处理对记录块的集合的查询可以包括,对于记录块的集合中的每个记录块,确定记录块与其相关联的叶节点的整数值范围是否是查询的整数值范围的子集;如果记录块与其相关联的叶节点的整数值范围是查询的整数值范围的子集,则将记录块包括在查询的结果中;以及如果记录块与其相关联的叶节点的整数值范围不是查询的整数值范围的子集,则将记录块中在表的列中具有在查询的整数值范围内的值的记录包括在查询的结果中。
在一些实施例中,表的列中的值可以是字符串值。分层树结构中的每个叶节点的数据可以根据从与叶节点相关联的记录块的列中的字符串值和散列函数的集合生成的布隆过滤器来描述与叶节点相关联的记录块的列中的值。分层树结构中的每个非叶节点的数据可以根据从非叶节点的子节点的布隆过滤器和散列函数的集合生成的布隆过滤器来描述超集。处理对记录块的集合的查询可以包括,对于记录块的集合中的每个记录块,遍历记录块中的记录,以及将记录块中在表的列中具有与值的集合中的值匹配的值的记录包括在查询的结果中。
在一些实施例中,处理对记录块的集合的查询可以包括处理对记录块的集合中的每个记录块的查询。生成查询的结果可以包括聚合来自对记录块的集合中的每个记录块的查询的结果,以形成查询的结果。
以下详细描述和附图提供了对本发明的本质和优点的更好理解。
附图说明
图1示出了根据一些实施例的系统。
图2示出了根据一些实施例的文件格式的布局。
图3示出了根据一些实施例的数据页的布局。
图4示出了根据一些实施例的数据的示例表。
图5示出了根据一些实施例的被划分为行块的、图4所示的表。
图6示出了根据一些实施例的与图4所示的表的列相关联的数据元数据。
图7示出了根据一些实施例的从图4所示的表中的数据创建的文件的布局。
图8示出了根据一些实施例的图3所示的数据页的布局中的数据的自描述格式。
图9示出了根据一些实施例的用于创建被格式化用于快速且高效地访问数据的文件的过程。
图10示出了根据一些实施例的被划分为行块的、图4所示的表。
图11示出了根据一些实施例的图10所示的列的超集树。
图12示出了根据一些实施例的表的示例列。
图13示出了根据一些实施例的图12所示的列的超集树。
图14示出了根据一些实施例的用于使用超集树处理查询的过程。
图15示出了根据一些实施例的浮点值的示例表。
图16示出了根据一些实施例的图15所示的浮点值的十六进制表示。
图17示出了根据一些实施例的图15所示的浮点值的缩放整数表示。
图18示出了根据一些实施例的用于压缩浮点值的过程。
图19示出了其中可以实现各种实施例的示例性计算机系统。
图20示出了其中可以实现各种实施例的示例性计算设备。
图21示出了其中可以实现各种实施例的示例性系统。
具体实施方式
在以下描述中,出于解释的目的,阐述了许多示例和具体细节,以便提供对本发明的透彻理解。然而,对本领域技术人员显而易见的是,由权利要求限定的本发明可以单独包括这些示例中的一些或所有特征,或者结合下面描述的其他特征,并且可以进一步包括本文描述的特征和概念的修改和等同物。
在本申请的章节I中描述的是用于基于允许对文件中的数据的高效且快速访问的文件格式(称为格式2(format2)文件)来创建数据文件的技术。在一些实施例中,系统可以从数据库中的数据的表周期性地创建这样的文件。当从表创建文件时,系统使用不同的编码和/或压缩方案对表中的不同类型的数据进行编码和/或压缩。系统还可以生成与表、列和/或列中的数据相关联的元数据。一旦文件被创建,系统就可以将它们存储在文件存储装置(例如,本地文件存储装置、远程文件存储装置等)中。当系统接收到对存储在文件中的一个中的数据的查询时,系统从文件存储装置检索对应文件,将文件的可能具有期望数据的部分加载到数据库中,处理对文件的所加载的部分的查询,并且返回查询的结果。
本申请的章节I中描述的技术提供了超过传统数据文件的许多益处和优点。首先,由于以文件格式组织数据的方式,系统通过将文件的可能具有期望数据的部分加载到数据库中来减少读取的数据量(例如,减少使用的带宽量),同时避免将文件的绝对不具有期望数据的部分加载到数据库中。其次,通过使用不同的编码和/或压缩方案对表中的不同类型的数据进行编码和/或压缩,当从表中的数据创建文件时,系统减小数据的存储大小。反过来,这减少了检索或访问这样的文件时的时延。例如,当远程存储文件时,从远程文件读取的时间是读取的数据量和恒定开销的函数。从远程文件读取的时间量可以表达如下:time_to_read(num_bytes)=roundtrip_overhead+num_bytes*read_overhead_per_byte。在一些实例中,roundtrip_overhead足够大,对1字节直到1000字节的读取花费大约相同的时间量。本申请的第一部分中描述的文件格式以通过例如将对100字节的10次读取减少到对1000字节的1次读取来减少读取的数量的方式被结构化。
此外,在本申请的章节II中描述的是用于提高大数据文件中的搜索速度的技术。如上所述,系统可以从数据库中的数据的表创建数据文件。当创建这样的文件时,系统可以创建存储与表的列中的数据的值相关联的信息的数据结构。系统可以为表中的每列创建这些数据结构,并且将它们存储在文件中。如果系统接收到对表的列的查询,则系统可以利用对应数据结构中的信息来识别文件的可能具有期望数据的部分,并且识别文件的绝对不具有期望数据的部分。然后,系统仅将文件的可能具有期望数据的部分加载到数据库中,并且处理对文件的所加载的部分的查询,以便生成查询的结果。
本申请的章节II中描述的技术提供了超过对文件中的数据执行搜索的传统方法的益处和优点。例如,通过创建用于存储与表的列中的数据的值相关联的信息的数据结构,系统可以稍后在处理对文件中的数据的查询时通过确定文件的可能具有期望数据的部分并且确定文件的绝对不具有期望数据的部分来利用该信息。系统仅访问文件的可能具有期望数据的部分,并且避免访问文件的绝对不具有期望数据的部分,从而以更快和更高效的方式处理查询。这些技术在快速处理对大的数据的集合的小部分的查询时特别有效。
此外,在本申请的章节III中描述的是用于压缩浮点数据的技术。在一些实施例中,系统通过分析浮点值的集合来压缩浮点值的集合,以确定缩放(scale)值。系统然后基于缩放值来缩放浮点值,并且将它们转换为经缩放的浮点值的整数表示。接下来,系统使用任何数量的不同整数编码方案来对经转换和经缩放的浮点值的整数表示进行编码。
本申请的章节III中描述的技术提供了超过存储浮点数据的传统方法的许多益处和优点。例如,缩放浮点值并且将它们转换为整数值允许系统对浮点数据采用更有利的编码和压缩方案。它还减少了用于存储浮点数据的存储空间量。
I.格式2文件格式
图1示出了根据一些实施例的系统100。如图所示,系统100包括计算系统105和文件存储装置135。文件存储装置135被配置为存储格式2文件。在一些实施例中,文件存储装置135在另一系统(未示出)上实现,作为存储区域网络(Storage Area Network,SAN)、集群存储系统、云存储系统等的一部分。虽然图1将文件存储装置135示出为在计算系统105外部,但是本领域普通技术人员将理解,文件存储装置135在一些实施例中可以是计算系统105的一部分。另外,本领域普通技术人员将理解,在一些实施例中,可以使用多个文件存储装置。在一些这样的实施例中,多个文件存储装置可以跨计算系统105和/或任何数量的不同系统而分布。
在一些实施例中,系统100负责管理(例如,创建、存储、访问等)被格式化为格式2文件的数据文件。图2示出了根据一些实施例的文件格式的布局200。具体地,布局200是如本申请所述的允许对文件中的数据的高效访问的文件格式的高级描述。如图所示,布局200包括文件格式标识符(identifier,ID)205、数据页210a-210k、标头页215、标头大小220和文件格式ID 225。在一些实施例中,多字节数字被存储为小端。文件格式ID 205和文件格式ID225各个被配置为存储用于识别文件格式的唯一值。在一些实施例中,文件格式ID 205和文件格式ID 225各个是具有值“FMT2”的32位有符号整数。在一些这样的实施例中,32位有符号整数值“FMT2”是美国信息交换标准码(American Standard Code for InformationInterchange,ASCII)编码中的每个字符的十六进制表示的串联。也就是说,32位有符号整数值是464D5432(46代表“F”,4D代表“T”,54代表“M”,并且32代表“2”)。
数据页210a-210k各个是被配置为存储由标头页215定义的各种数据的单独、连续的字节序列。例如,数据页210a-210k可以存储表或超集树结构的列的一部分的值(下面进行了详细描述)。数据页210a-210k的大小可以是不同大小,这由存储在数据页210a-210k中的数据决定。标头页215是被配置为存储文件格式的版本(例如,主要版本号、次要版本号等)、被存储的数据集中的总行的数量、被包括在每个行块中的行的数量、对数据集中的列的列元数据的引用和对超集树的引用的单独、连续的字节序列。标头大小220被配置为根据字节的数量存储标头页215的大小。在一些实施例中,标头大小220是64位有符号整数。如上所述,文件格式ID 225在一些实施例中是32位有符号整数。因此,在标头大小220是64位有符号整数并且文件格式ID225是32位有符号整数的一些实施例中,可以通过从文件的大小减去12字节(即,64位有符号整数和32位有符号整数的大小)和标头大小220的值(即,标头偏移=文件的大小–12字节–标头的大小)来计算标头页的偏移。
图3示出了根据一些实施例的数据页的布局300。具体地,布局300示出了数据页210a-210k和标头页215中的每一个的布局。如图所示,布局300包括数据305、压缩方案310和未压缩大小315。数据305被配置为存储实际数据。在一些实施例中,数据305是8位整数数组。压缩方案310存储表示用来压缩数据305的压缩方案的值或者表示数据305未压缩的值。在一些情况下,使用通用无损压缩方案。例如,值“0”可以用来表示数据305未压缩,值“1”可以用来表示数据305使用zlib压缩方案而压缩,值“2”可以用来表示数据305使用lz4压缩方案而压缩,值“3”可以用来表示数据305使用snappy压缩方案而压缩等。在一些实施例中,压缩方案310是8位有符号整数。未压缩大小315被配置为当数据305未压缩时根据字节的数量存储数据305的大小。在一些实施例中,未压缩大小315是64位有符号整数。
返回到图1,计算系统105包括文件生成器110、执行管理器、执行引擎120、数据导入管理器125、文件读取器130和数据库130。在一些实施例中,数据库管理系统(DataBaseManagement System,DBMS)提供对数据库130的访问并与之交互。数据库130存储可以用于生成格式2文件的数据。在一些实施例中,数据库135中的数据被存储在一个或多个表中。每个表可以包括字段的集合。每个表可以具有在表的每个字段中存储值的一个或多个记录。在一些实施例中,数据库135在单个物理存储装置中实现,而在其他实施例中,数据库135可以跨几个物理存储装置而实现。虽然图1将数据库135示出为计算系统105的一部分,但是本领域普通技术人员将认识到,数据库135在一些实施例中可以在计算系统105外部。
文件生成器110负责从存储在数据库130中的数据创建格式2文件。在一些实施例中,文件生成器110以定义的间隔(例如,一天一次、一周一次、一月一次等)生成格式2文件。在定义的间隔期间,文件生成器110可以访问数据库130,并且识别比阈值年龄(例如,两周、一个月、六个月、一年等)更老的数据或在阈值时间量(例如,一周、两周、一个月等)内未被访问的数据的表。文件生成器110然后从所识别的表中的数据生成格式2文件。
现在将参考图4-图7描述从表创建格式2文件的示例操作。图4示出了根据一些实施例的数据的示例表400。对于该示例,表400被存储在数据库130中,并且将用来创建格式2文件。如图所示,表400包括两列405和410以及二十四行数据。列405被配置为存储表示对其记录了温度的日、月和年的日期值。列410被配置为存储表示温度(华氏温度)的整数值。
操作由文件生成器110访问数据库130中的表400开始。接下来,文件生成器110将表400划分为行块。在该示例中,文件生成器110将表400划分为每个包括八行数据的三个行块。文件生成器110还将行块分割为单独的列分块(chunk)(也称为片段)。图5示出了根据一些实施例的被划分为行块的、图4所示的表400。如图所示,表400被划分为三个行块。每个行块包括来自表400的八行。此外,图5示出了被分离为片段505-515的列405和分离为片段520-530的列410。片段505包括第一行块中列405的数据,片段510包括第二行块中列405的数据,并且片段515包括第三行块中列405的数据。类似地,片段520包括第一行块中列410的数据,片段525包括第二行块中列410的数据,并且片段530包括第三行块中列410的数据。
继续该示例,在将表400划分为行块之后,文件生成器110生成描述每列405和410中的值的数据元数据。对于该示例,文件生成器110为每个行块确定每列中的最小值和最大值。图6示出了根据一些实施例的与图4所示的表的列相关联的数据元数据。具体地,图6示出了数据元数据600和数据元数据620。数据元数据600包括字段605-615。字段605包括片段的标识符,其是行块中的列分块。字段610包括片段中的最小值,并且字段615包括片段中的最大值。数据元数据620包括字段625-635。字段625包括片段的标识符,字段630包括片段中的最小值,并且字段635包括片段中的最大值。
回到该示例,文件生成器110然后开始基于片段和所生成的数据元数据构建文件。图7示出了根据一些实施例的从图4所示的表400中的数据创建的文件700的布局。如图所示,文件700包括文件格式ID 705、数据页710a-710j、标头页715、标头大小720和文件格式ID 725。在该示例中,文件生成器110通过从文件700的前面(即,以文件格式ID 705开始的左侧)向文件700的后面(即,以文件格式ID 725结束的右侧)将数据写入文件中来构建文件700。
文件生成器110通过将文件格式ID 705作为具有整数值“FMT2”的32位有符号整数写入文件700中而开始。接下来,文件生成器710使用无损压缩方案(例如,zlib压缩方案、lz4压缩方案、snappy压缩方案等)来压缩数据元数据600和数据元数据620。如果经压缩的数据小于数据的原始大小的阈值比率值(例如,85%、90%、95%等),文件生成器110使用经压缩的数据来存储在文件700中。否则,文件生成器110使用原始未压缩数据来存储在文件700中。文件生成器110然后根据字节的数量确定数据元数据600和数据元数据620中的每一个的未压缩大小。接下来,文件生成器110根据布局300使用所确定的未压缩大小来格式化数据元数据600和数据元数据620,并且将它们分别作为数据页710a和数据页710b写入文件700中。
在将数据元数据600和数据元数据620写入到文件700之后,文件生成器110处理列405的片段505-515和列410的片段520-530用于存储在文件700中。在该示例中,日期值是根据从1/1/1970开始的十分之一秒来存储日期的64位整数。对于片段505-515中的每一个,文件生成器110使用整数编码方案对数据值进行编码。对于片段520-530中的每一个,文件生成器110使用整数编码方案对整数值进行编码。
文件生成器110可以使用任何数量的不同整数编码方案。例如,第一编码方案是游长编码(runlength encoding)方案,其中使用与用于负值的zigzag编码耦合的可变长度量(Variable-Length Quantity,VLQ)编码来存储值出现的次数和实际值。第二编码方案是确定表示整数值序列中的值范围所需的最小位数的逐位编码(bitwise encoding)方案。逐位编码方案存储用来存储值的数组的大小、用来表示值的位数、和使用最小位数表示的值的数组。可以使用两个经VLQ编码的值存储用来存储值的数组的大小和用来表示值的位数。第三整数编码方案是增量游长编码方案,其中使用VLQ编码方案存储整数值序列中的第一值,并且基于整数值序列中的值与前一值之间的差(即,增量)而存储整数值序列中的每个后续值。使用游长编码方案(例如,第一编码方案)对增量进行编码。第四整数编码方案是增量逐位编码方案,其中使用VLQ编码方案存储整数值序列中的第一值,并且基于整数值序列中的值与前一值之间的差(即,增量)而存储整数值序列中的每个后续值。使用逐位编码方案(例如,第二编码方案)对增量进行编码。
在一些实施例中,文件生成器110从几个不同的整数编码方案自动选择整数编码方案,以用来对整数值序列进行编码。对于该示例,文件生成器110从上述四个整数编码方案自动选择整数编码方案,以用于对片段520-530中的每一个进行编码。为了确定使用四个整数编码方案中的哪一个,文件生成器110估计将由每个整数编码方案使用的字节的数量,并且选择具有将被使用的字节的最低估计数量的整数编码方案。
对于第一整数编码方案,文件生成器110使用以下等式(1)估计将与游长编码方案使用的字节的数量:
runlength_encoding_bytes=(N-num_repeats)*(vlq_size(max_v)+(vlq_size(N)))
其中,N是整数值序列中的值的数量;num_repeats是整数值序列中的重复值的数量,定义为集合{i|valuei=valuei+1}的大小,其中valuei是整数值序列中的第i个整数值;vlqsize()取值作为输入,并且返回使用VLQ编码方案存储数据所需的字节的数量;并且max_v是整数值序列中的最大值。
对于第二整数编码方案,文件生成器110使用以下等式(2)估计将与逐位编码方案使用的字节的数量:
bit_encoding_bytes=to_bytes(N*max(bits_needed(max_v),bits_needed(min_v)))
其中,N是整数值序列中的值的数量;to_bytes()取位数作为输入,并且返回存储位数所需的字节的数量;max()取几个值作为输入,并且返回几个值中的更大值;bits_needed()取值作为输入,并且返回表示值所需的最小位数;max_v是整数值序列中的最大值;并且min_v是整数值序列中的最小值。
对于第三整数编码方案,文件生成器110使用以下等式(3)估计将与增量游长编码方案使用的字节的数量:
delta_runlength_encoding_bytes=vlq_size(value1)+(N-1-num_repeats_delta)*(vlq_size(max_delta)+vlq_size(N-1))
其中,N是整数值序列中的值的数量,value1是整数值序列中的第一值;vlq_size()取值作为输入,并且返回使用VLQ编码方案存储数据所需的字节的数量;num_repeats_delta是整数值序列中的顺序整数值之间的重复增量的数量,定义为集合{i|valuei+1-valuei=valuei+2-valuei+1}的大小;并且max_delta是整数值序列中的顺序整数值之间的最大增量,定义为max(abs(value2-valuel),abs(value3-value2),abs(value4-value3),...,abs(valueN-valueN-1))。
对于第四整数编码方案,文件生成器110使用以下等式(4)估计将与增量逐位编码方案使用的字节的数量:
delta_bit_encoding_bytes=vlq_size(value1)+vlq_size(N)+vlq_size(bitwidth_delta)+to_byte(bitwidth_delta*N)
其中,N是整数值序列中的值的数量,value1是整数值序列中的第一值;vlq_size()取值作为输入,并且返回使用VLQ编码方案存储数据所需的字节的数量;bitwidth_delta定义为max(bits_needed(max_delta),bits_needed(min_delta)),其中max_delta是整数值序列中的顺序整数值之间的最大增量,定义为最大值max(abs(value2-value1),abs(value3-value2),abs(value4-value3),...,abs(valueN-valueN-1)),并且min_delta是整数值序列中的顺序整数值之间的最小增量,定义为min(abs(value2-value1),abs(value3-value2),abs(value4-value3),...,abs(valueN-valueN-1));并且to_bytes()取位数作为输入,并且返回存储位数所需的字节的数量。
如上所述,文件生成器110从上述四个整数编码方案自动选择整数编码方案,以用于对片段520-530中的每一个进行编码。具体地,文件生成器110通过基于等式(1)-(4)计算将由四个整数编码方案中的每一个使用的字节的估计数量,自动选择整数编码方案以用于编码片段520。然后,文件生成器110选择具有将被使用的字节的最低估计数量的整数编码方案,并且使用它对片段520中的整数值进行编码。文件生成器110自动选择整数编码方案,以用于以类似的方式编码片段525和530。文件生成器110通过将与所选整数编码方案相关联的值(例如,值0与游长编码方案相关联,值1与逐位编码方案相关联,值2与增量游长编码方案相关联,并且值3与增量逐位编码方案相关联)作为其后是经编码的值的经VLQ编码的值写入片段中来存储用于特定片段的整数编码方案。
在对片段505-530中的一个进行编码之后,文件生成器110以与上面在对数据元数据600和数据元数据620的讨论中描述的相同方式压缩与所选整数编码方案和经编码的数据相关联的值。也就是说,文件生成器110使用无损压缩方案来压缩数据,确定经压缩的数据是否小于数据的原始大小的阈值比率值,并且相应地使用经压缩的数据或原始未压缩数据来存储在文件700中。文件生成器110然后根据字节的数量确定片段的未压缩大小,使用所确定的未压缩大小来根据布局300格式化片段,并且将它们写入文件700中。如图7所示,文件生成器110将片段505作为数据页710c写入,将片段510作为数据页710d写入,将片段515作为数据页710e写入,将片段520作为数据页710f写入,将片段525作为数据页710g写入,并且将片段530作为数据页710h写入。
接下来,文件生成器110为表400中的列405和410中的每一个生成列元数据。对于该示例,列的列元数据包括存储在列中的数据的类型、从文件的开头到列数据的每个片段的开始的偏移、用来对列中的值进行编码的一个或多个编码方案、列的名称、SQL类型、和列中的空值的数量。在一些实施例中,可以使用不同的编码方案来编码列的不同片段。在一些这样的实施例中,用于列的每个片段的编码方案存储在列元数据中。SQL类型存储结构化查询语言(Structured Query Language,SQL)数据类型。
在生成列405的列元数据之后,文件生成器110使用无损压缩方案来压缩列元数据,确定经压缩的列元数据是否小于数据的原始大小的阈值比率值,并且相应地使用经压缩的列元数据或原始未压缩的列元数据来存储在文件700中。接下来,文件生成器110根据字节的数量确定列元数据的未压缩大小,使用所确定的未压缩大小来根据布局300格式化列元数据,并且将它们写入文件700中。文件生成器110为列410的列元数据执行类似的操作。在该示例中,文件生成器110将列405的列元数据作为数据页710i写入文件700中,并且将列410的列元数据作为数据页710j写入文件700中。
一旦文件生成器110将数据页710a-710j写入到文件700,文件生成器110然后就生成标头页。对于该示例,文件生成器110在标头页中包括存储表示主要版本号的数字的16位整数;存储表示次要版本号的数字的16位整数;存储表示存储在文件700中的数据的总行数的数字24的64位整数;存储分别表示第一行块(即,块1)中的行的数量、第二行块(即,块2)中的行的数量和第三行块(即,块3)中的行的数量的数字8、8和8的三个无符号64位整数的数组;从文件700的开头到每个列元数据的开始的偏移;根据字节的数量的每个列元数据的大小;从文件700的开头到每个数据元数据的开始的偏移;以及根据字节的数量的每个数据元数据的大小。在一些实施例中,文件生成器110使用上述的自动整数编码方案选择技术来对存储行块中的行的数量、列元数据的偏移、列元数据的大小、数据元数据的偏移和数据元数据的大小的三个8位整数的数组进行编码。
一旦生成了标头页,文件生成器110就使用无损压缩方案来压缩标头页,确定经压缩的数据是否小于数据的原始大小的阈值比率值,并且相应地使用经压缩的标头页或原始未压缩标头页来存储在文件700中。文件生成器110然后根据字节的数量确定标头页的未压缩大小,使用所确定的未压缩大小来根据布局300格式化标头页,并且将它们写入文件700中。在该示例中,文件生成器110将标头页作为标头页715写入文件700中。文件生成器110还根据字节的数量确定标头页715的大小,并且将值作为标头大小720存储在文件700中。在一些实施例中,文件生成器110使用64位整数存储标头大小720。文件生成器110然后使用具有整数值“FMT2”的32位有符号整数将文件格式ID 725写入文件700中。最后,文件生成器110将文件700存储在文件存储装置135中。
上述示例操作讨论了用于编码整数值的各种技术。本领域普通技术人员将理解,也可以对其他类型的数据进行编码。例如,文件生成器110可以将字符串值序列存储为空字符结尾(null-terminated)字符串的连续数组,使用VLQ编码方案对序列中的字符串值的数量进行编码,然后使用无损压缩方案(例如,zlib压缩方案、lz4压缩方案、snappy压缩方案等)来压缩字符串值和字符串值的数量。可以使用本申请章节III中描述的技术对浮点值进行编码。
上述数据编码方案中的许多数据编码方案将实际值分割为使用专门编码的多个部分。该部分中的每一个可以被单独解码,然后接合在一起以重建原始值。因此,在一些实施例中,文件生成器110使用自描述格式用于将数据305存储在数据页(例如,数据页210a-210k和数据页710a-710j)的布局300中。与存储数据的传统方法相比,数据格式的自描述方面减少了访问数据所需的开销量和涉及的时延。
图8示出了根据一些实施例的图3所示的数据页的布局中的数据的自描述格式。具体地,图8示出了根据一些实施例的这样的格式的布局800。如图所示,布局800包括数据块805a-805n、偏移810a-810n、偏移815和偏移的数量820。数据块805a-805n各个是单独、连续的字节序列。偏移810a-810n各个被配置为存储从布局800的开头到对应数据块805的开始的偏移。所以,偏移810a存储从布局800的开头到数据块805a的开始的偏移,偏移810b存储从布局800的开头到数据块805b的开始的偏移,等等。偏移815存储从布局800的开头到第一偏移(即,偏移810a)的开始的偏移。每个数据块805a-805n的大小可以从偏移810a-810n而计算。例如,通过从偏移810a的值减去偏移810b的值来计算块805a的大小,通过从偏移810b的值减去偏移810c的值来计算块805b的大小,等等。可以通过从偏移815的值减去偏移810n的值来计算块805n的大小。偏移的数量820被配置为存储偏移的总数,其包括偏移810a-810n和偏移815。在一些实施例中,使用64位整数存储偏移810a-810n、偏移815和偏移的数量820。
如上所述,文件生成器110可以将(例如,来自列的片段的)字符串值序列存储为空字符结尾字符串的连续数组,并且使用VLQ编码方案对序列中的字符串值的数量进行编码。在布局800用来存储字符串值的一些实施例中,文件生成器110将字符串值的经VLQ编码的数量存储在第一数据块(例如,数据块805a)的开头处,随后是空字符结尾字符串的数组(也在第一数据块中)。文件生成器110还存储偏移数组,其中该偏移数组存储空字符结尾字符串的数组中的每个字符串的偏移。偏移数组允许对空字符结尾字符串的数组中的特定字符串的快速访问,而不必顺序遍历空字符结尾字符串的数组。在列具有NULL字符串值的一些实例中,文件生成器110存储单独的数据块以编码NULL值。
在一些实例中,表的列的片段中的值可以包含空值。在布局800用于数据值序列的一些实施例中,文件生成器110将与空值相关联的信息存储在布局800的最后数据块(例如,数据块805n)中。如果列的片段不包括任何非空值,则文件生成器110将最后数据块存储为具有零字节的大小。如果列的片段包括空值,则文件生成器110将布尔数组作为8位整数数组存储在最后数据块中,并且使用上述自动整数编码方案选择技术对数组进行编码。对于不存储NULL值的列的片段中的每一行,文件生成器110将对应FALSE值存储在布尔数组中。对于存储NULL值的列的片段中的每一行,文件生成器110将对应TRUE值存储在布尔数组中。
上述示例和实施例描述了从数据库中的数据创建格式2文件。然而,本领域普通技术人员将理解,在一些实施例中,可以从其他数据源或数据流创建格式2文件。例如,可以从存储在电子表格、文本文件等中的数据创建格式2文件。
返回图1,计算系统105可以处理对存储在格式2文件中的数据的查询。现在将参考图1和图5-图7描述处理查询的示例操作。操作通过执行管理器115接收对存储在文件700中的数据的查询而开始。可以从能够向执行管理器115发送查询的客户端设备(未示出)、在计算系统(未示出)上操作的应用、在计算系统105上执行的服务或过程(未示出)、或者任何其他设备、系统、组件、元件等接收查询。在该示例中,查询针对表400中列410中的值大于47且小于60的行。
当执行管理器115接收到查询时,执行管理器115基于查询生成执行计划。在一些实施例中,执行计划是用于执行查询的操作的有序集合。在生成执行计划之后,执行管理器115向执行引擎120发送执行计划。一旦接收到执行计划,执行引擎120就执行该执行计划。为了在该示例中执行查询的执行计划,执行引擎120指示数据导入管理器125针对表400中列410中的值大于47且小于60的行对列410应用过滤器。
一旦数据导入管理器125从执行引擎120接收到指令,数据导入管理器125就指示文件读取器130访问文件存储装置135中的文件700。接下来,数据导入管理器125指示文件读取器130从文件700检索标头页715、存储列405的列元数据的数据页(即,数据页710i)、存储列410的列元数据的数据页(即,数据页710j)、和存储列410的数据元数据的数据页620(即,数据页710b)。不需要读取存储列405的数据元数据600的数据页(即,数据页710a),因为过滤器被应用于列410而不是列405。
然后,数据导入管理器125基于数据元数据620来确定对哪些行块感兴趣。由于由行块520的最小值和最大值定义的值范围完全在由查询定义的值范围外,数据导入管理器125确定可以跳过行块520。接下来,数据导入管理器125确定将行块525中的所有行包括在查询的结果中,因为由行块525的最小值和最大值定义的值范围完全在由查询定义的值范围内。数据导入管理器125然后确定片段530中的行中的一些可以被包括在查询的结果中,因为由片段530的最小值和最大值定义的值范围与由查询定义的值范围重叠,但不完全在该范围内。
数据导入管理器125向文件读取器130发送数据导入管理器125从列410的列元数据检索的数据页710g和数据页710h的偏移和大小,并且指示文件读取器130从数据页710g和数据页710h检索片段525和片段530。一旦接收到片段525和片段530,数据导入管理器125就识别片段530中满足查询的行(片段530中的第一行、第二行和第五行)。数据导入管理器125然后向文件读取器130发送数据导入管理器125从列405的列元数据检索的数据页710d和数据页710e的偏移和大小,并且指示文件读取器130从数据页710d和数据页710e检索片段510和片段515。数据导入管理器125识别片段515中与片段530中满足查询的行相对应的行。数据导入管理器125然后将片段515中的所识别的行、片段530中的所识别的行、片段510中的所有行、和片段525中的所有行包括在查询的结果中,并且向执行引擎120发送查询的结果,执行引擎120将其转发给执行管理器115。最后,执行管理器115向执行管理器115从其接收到查询的元件发送查询的结果。
图9示出了根据一些实施例的用于创建被格式化用于快速且高效地访问数据的文件的过程900。在一些实施例中,文件生成器110执行过程900。过程900通过在910处接收创建用于存储来自包括多行的表的数据的文件的请求。多行中的每行被划分为列的集合。列的集合中的每列被配置为存储数据的类型。参考作为示例的图1和图4,文件生成器110可以接收创建用于存储表400中的数据的文件的请求。
接下来,过程900在920处将多行划分为多个行块。多个行块中的每个行块包括多行的一部分。参考作为示例的图1和图5,文件生成器110可以将表400中的行划分为三个行块505-515。对于多个行块中的每个行块的列的集合中的每列,过程900然后在930处基于存储在列中的数据的类型对行块的列中的数据进行编码,并且将经编码的数据作为单独的数据页存储在文件中。过程900可以使用上述自动整数编码方案选择技术对列410中的值进行编码。
接下来,过程900在940处针对列的集合生成列元数据的集合。每个列元数据包括存储在列的集合中的对应列中的数据的类型、用来对对应列中的数据进行编码的编码方案、和对对应列的多个行块的引用。然后,过程900在950处将每个列元数据作为单独的数据页存储在文件中。参考作为示例的图1、图4和图7,文件生成器110可以将列405的列元数据作为数据页710i存储在文件700中,并且将列410的列元数据作为数据页710j存储在文件700中。
过程900然后在960处生成标头页,其中该标头页包括多行中的行的总数、多个行块中的每个行块中的行的数量、和对列元数据的集合的引用。最后,过程900在970处将标头页作为单独的数据页存储在文件中。参考作为示例的图1、图4和图7,文件生成器110将标头页作为标头页715存储在文件700中。
II.超集树数据结构
在章节I中,处理对格式2文件的查询的示例操作描述了使用文件中的数据元数据来处理查询。计算系统105可以使用超集树数据结构来实现数据元数据。在一些实施例中,超集树数据结构是有根的(rooted)、完全的且完整的二叉树。在一些这样的实施例中,超集树数据结构的根存储值(即,有根的超集树数据结构),超集树数据结构中的每个节点具有零个或两个子节点(即,完全的超集树数据结构),并且超集树数据结构中的每个级别是完全的,可能除了最低级别(即,完整的超集树数据结构)。
在一些实施例中,为列生成的超集树数据结构具有与列的片段的数量相同的叶节点的数量。文件生成器110可以基于使用以下等式(5)基于列中的片段的数量来计算超集树数据结构的高度(例如,具有三个级别的超集数据结构的高度为二,具有五个级别的超集数据结构的高度为四,等等):
height=ceil(log2(fragments))
其中,ceil()取值作为输入,并且返回大于该值的最小整数值,并且fragments是列中的片段的数量。文件生成器110然后可以使用以下等式(6)计算倒数第二级别(即,第二最低级别)中的叶节点的数量:
leaf_nodes_penultimate=height2-fragments
其中,height是超集树数据结构的高度,并且fragments是列中的片段的数量。接下来,文件生成器110可以使用以下等式(7)计算倒数第二级别(即,第二最低级别)中具有两个子节点的节点的数量:
其中,fragments是列中的片段的数量,并且leaf_nodes_penultimate是超集树数据结构的倒数第二级别中的叶节点的数量。文件生成器110然后可以使用以下等式(8)计算超集树数据结构中的节点的总数:
total_nodes=2height-1+2*nodes_penultimate_with_children
其中,height是超集树数据结构的高度,并且nodes_penultimate_with_children是倒数第二级别(即,第二最低级别)中具有两个子节点的节点的数量。基于叶节点的总数、高度、倒数第二级别中的叶节点的数量、倒数第二级别中具有两个子节点的节点的数量、和节点的总数,文件生成器110可以生成列的超集树数据结构。
现在将参考图1、图4、图10和图11描述使用超集树数据结构来处理查询的示例操作。对于该示例,文件生成器110将表400划分为四个行块(而不是图5所示的三个行块),并且将行块分割为片段。图10示出了根据一些实施例的被划分为行块的、图4所示的表400。如图所示,图10中的表400被划分为四个行块。每个行块包括来自表400的六行。图10还示出了分离为片段1005-1020的列405和分离为片段1025-1040的列410。片段1005包括第一行块中列405的数据,片段1010包括第二行块中列405的数据,片段1015包括第三行块中列405的数据,片段1020包括第四行块中列405的数据。类似地,片段1025包括第一行块中列410的数据,片段1030包括第二行块中列410的数据,片段1035包括第三行块中列410的数据,片段1040包括第四行块中列410的数据。
为了生成列410的超集树,文件生成器110使用上面提供的等式(5)-(8)。由于列410具有四个片段,文件生成器110确定列410的超集树将具有四个叶节点。使用等式(5),文件生成器110计算列410的超集树的高度为二。使用等式(6),文件生成器110计算列410的超集树的倒数第二级别中的叶节点的数量为零。使用等式(7),文件生成器110计算超集树的倒数第二级别中具有两个子节点的节点的数量为二。使用等式(8),文件生成器110计算列410的超集树中的节点的总数为七。
图11示出了根据一些实施例的图10所示的列的超集树1100。在该示例中,文件生成器110生成列410的超集树1100。如图所示,超集树1100具有四个叶节点,高度为二,倒数第二级别中的零个叶节点,倒数第二级别中具有两个子节点的两个节点,以及总共七个节点。在生成超集树1100之后,文件生成器110以广度优先的次序串行化超集树1100的节点,并且以与上面在章节I中描述的相同方式(例如,使用图8所示的格式、和布局300)将其作为数据页710b存储在文件700中。
如图11所示,超集树1100是有根的、完全的且完整的分层树数据结构。超集树1100包括节点1105-1135。节点1105-1135中的每一个存储最小值和最大值。节点1105是根节点,并且存储其子节点(即,节点1110和节点1115)的最小值和最大值。节点1110存储其子节点(即,节点1120和节点1125)的最小值和最大值。类似地,节点1115存储其子节点(即,节点1130和节点1135)的最小值和最大值。这样,节点1105、节点1110和节点1115各个存储其各自子节点的超集。节点1120是存储片段1025中的值的最小值和最大值的叶节点。节点1125是存储片段1030中的值的最小值和最大值的叶节点。节点1130是存储片段1035中的值的最小值和最大值的叶节点。节点1135是存储片段1040中的值的最小值和最大值的叶节点。
使用超集树1100处理查询的示例操作通过执行管理器115接收对存储在文件700中的数据的查询而开始。可以从能够向执行管理器115发送查询的客户端设备(未示出)、在计算系统(未示出)上操作的应用、在计算系统105上执行的服务或过程(未示出)、或者任何其他设备、系统、组件、元件等接收查询。对于该示例,查询针对表400中列410中的值大于34且小于49的行。
一旦接收到查询,执行管理器115就基于查询生成执行计划。接下来,执行管理器115向执行引擎120发送执行计划。当执行引擎120接收到执行计划时,执行引擎120执行该执行计划。执行引擎120通过指示数据导入管理器125针对表400中列410中的值大于34且小于49的行对列410应用过滤器来在该示例中执行查询的执行计划。
当数据导入管理器125从执行引擎120接收指令时,数据导入管理器125指示文件读取器130访问文件存储装置135中的文件700。数据导入管理器125然后指示文件读取器130从文件700检索标头页715、存储列405的列元数据的数据页(即,数据页710i)、存储列410的列元数据的数据页(即,数据页710j)、存储列405的数据元数据600的数据页(即,数据页710a)、和存储列410的数据元数据620的数据页(即,数据页710b)。
数据导入管理器125然后基于数据元数据620生成超集树1100,并且以广度优先的方式遍历超集树1100以确定对哪些行块感兴趣。这样,数据导入管理器125在根节点1105处开始。因为由存储在节点1105中的最小值和最大值定义的值的范围与由查询定义的值的范围重叠,但不完全在该范围内,所以数据导入管理器125确定它需要遍历节点1105的子节点。因此,数据导入管理器125迭代到节点1110,并且确定它需要遍历节点1110的子节点,因为由存储在节点1110中的最小值和最大值定义的值的范围与由查询定义的值的范围重叠,但是不完全在该范围内。当数据导入管理器125迭代到节点1115时,数据导入管理器125确定它可以跳过节点1130和节点1135,因为由存储在节点1115中的最小值和最大值定义的值的范围完全在由查询定义的值的范围外。接下来,数据导入管理器125迭代到节点1120。数据导入管理器125确定将片段1025中的所有行包括在查询的结果中,因为由存储在节点1120中的最小值和最大值定义的值的范围完全在由查询定义的值的范围内。最后,数据导入管理器125迭代到节点1125,并且确定片段1030中的行中的一些可以被包括在查询的结果中,因为由节点1125的最小值和最大值定义的值的范围与由查询定义的值的范围重叠,但不完全在该范围内。
数据导入管理器125向文件读取器130发送数据导入管理器125从列410的列元数据检索的包含片段1025和片段1030的数据页的偏移和大小,并且指示文件读取器130从相应的数据页检索片段1025和片段1030。当数据导入管理器125接收到片段1025和片段1030时,数据导入管理器125识别片段1030中满足查询的行(片段1030中的第一行和第二行)。数据导入管理器125然后向文件读取器130发送数据导入管理器125从列405的列元数据检索的包含片段1005和片段1010的数据页的偏移和大小,并且指示文件读取器130从相应的数据页检索片段1005和片段1010。接下来,数据导入管理器125识别片段1010中与片段1030中满足查询的行相对应的行。数据导入管理器125然后在查询的结果中包括片段1010中的所识别的行、片段1030中的所识别的行、片段1005中的所有行、和片段1025中的所有行,并且向执行引擎120发送查询的结果。作为响应,执行引擎120将查询的结果转发给执行管理器115,执行管理器115将其转发给执行管理器115从其接收到查询的元件。
上述使用超集树数据结构来处理对存储在格式2文件中的数据的查询的示例操作展示了数据导入管理器125如何能够基于存储在超集树数据结构中的数据一次消除/跳过多个片段。此外,上述示例操作中的超集树数据结构基于底层片段中的整数值来存储整数值范围(即,间隔)。在一些实施例中,超集树数据结构可以存储基于存储在列中的字符串值而生成的布隆过滤器。
现在将参考图1、图12和图13描述使用超集树数据结构处理查询的另一示例操作。图12示出了根据一些实施例的表1200的示例列1205。出于简单和解释的目的,图12仅示出了表1200的列1205。本领域普通技术人员将理解,任何数量的不同列可以被包括在表1200中。在该示例中,文件生成器110将表1200划分为四个行块,并且将行块分割为片段1210-1225。每个片段在其中具有一个字符串值。
文件生成器110使用等式(5)-(8)来生成列1205的超集树。由于列410具有四个片段,所以文件生成器110确定列410的超集树将具有四个叶节点。基于等式(5),文件生成器110计算列1205的超集树的高度为二。基于等式(6),文件生成器110计算列1205的超集树的倒数第二级别中的叶节点的数量为零。基于等式(7),文件生成器110计算列1205的超集树的倒数第二级别中具有两个子节点的节点的数量为二。基于等式(8),文件生成器110计算列1205的超集树中的节点的总数为七。
图13示出了根据一些实施例的图12所示的列1205的超集树1300。对于该示例,文件生成器110生成列1205的超集树1300。如图所示,超集树1300具有四个叶节点,高度为二,倒数第二级别中的零个叶节点,倒数第二级别中具有两个子节点的两个节点,以及总共七个节点。一旦生成超集树1300,文件生成器110就以广度优先的次序串行化超集树1300的节点,并且以与上面在章节I中描述的相同方式(例如,使用图8所示的格式、和布局300)将其作为数据页存储在格式2文件中。
如图13所示,超集树3100是有根的、完全的和完整的分层树数据结构。超集树1300包括节点1305-1335。节点1305-1335中的每一个存储布隆过滤器。节点1305是根节点,并且存储作为其子节点(即,节点1310和节点1315)的布隆过滤器的组合的布隆过滤器。文件生成器110通过对节点1305的子节点的布隆过滤器执行逐位OR操作来生成节点1305的布隆过滤器。节点1310存储作为其子节点(即,节点1320和节点1325)的布隆过滤器的组合的布隆过滤器。文件生成器110通过对节点1315的子节点的布隆过滤器执行逐位OR操作来生成节点1310的布隆过滤器。类似地,节点1315存储作为其子节点(即,节点1330和节点1335)的布隆过滤器的组合的布隆过滤器。文件生成器110通过对节点1315的子节点的布隆过滤器执行逐位OR操作来生成节点1315的布隆过滤器。这样,节点1305、节点1310和节点1315各个存储其各自子节点的超集。
节点1320是基于片段1210中的值存储布隆过滤器的叶节点。在该示例中,布隆过滤器是被配置为存储来自两个散列函数的散列值的8位数组。可以使用任何数量的不同散列函数。散列函数的示例包括Fowler-Noll-Vo(FNV)散列函数、Murmur散列函数、Jenkins散列函数等。该两个散列函数从字符串“United States”生成值“1”和“6”。这样,节点1320的布隆过滤器中的第一位和第六位被设置为“1”。接下来,该两个散列函数从字符串“Canada”生成值“1”和“2”。因此,节点1325的布隆过滤器中的第一位和第二位被设置为“1”。该两个散列函数从字符串“Mexico”生成值“1”和“3”。因此,节点1330的布隆过滤器中的第一位和第三位被设置为“1”。该两个散列函数从字符串“Japan”生成值“2”和“5”。所以,节点1335的布隆过滤器中的第二位和第五位被设置为“1”。
使用超集树1300处理查询的示例操作通过执行管理器115接收对存储在包含列1205的数据的格式2文件中的数据的查询而开始。可以从能够向执行管理器115发送查询的客户端设备(未示出)、在计算系统(未示出)上操作的应用、在计算系统105上执行的服务或过程(未示出)、或者任何其他设备、系统、组件、元件等接收查询。在该示例中,查询是针对具有列1205的表1200中列1205中的值等于字符串“United States”的行。
在接收到查询后,执行管理器115基于查询生成执行计划。执行管理器115然后将执行计划发送给执行引擎120。一旦接收到执行计划,执行引擎120就执行该执行计划。为了在该示例中执行查询的执行计划,执行引擎120指示数据导入管理器125针对表1200中值具有等于“United States”的字符串值的行对列1205应用过滤器。响应于指令,数据导入管理器125指示文件读取器130访问存储在存储表1200的文件存储装置135中的格式2文件。接下来,数据导入管理器125指示文件读取器130从文件检索标头页、存储列1205的列元数据的数据页、和存储列1205的数据元数据的数据页。
然后,数据导入管理器125基于列1205的数据元数据生成超集树1300。此外,数据导入管理器125使用用于生成超集树1300的布隆过滤器的相同的两个散列函数来基于查询中的字符串生成布隆过滤器(也称为查询布隆过滤器)。该两个散列函数从在查询中指定的字符串“United States”生成值“1”和“6”。因此,查询布隆过滤器中的第一位和第六位被设置为“1”(即,10000100)。
接下来,数据导入管理器125开始以广度优先的方式遍历超集树1300,以确定对哪些行块感兴趣。数据导入管理器125在根节点1305处开始。数据导入管理器125将查询布隆过滤器与存储在节点1305中的布隆过滤器进行比较。由于在查询布隆过滤器中设置为“1”的所有位在存储在节点1305中的布隆过滤器中也被设置为“1”,数据导入管理器确定它需要遍历节点1305的子节点。数据导入管理器125迭代到节点1310,并且将查询布隆过滤器与存储在节点1310中的布隆过滤器进行比较。存储在节点1310中的布隆过滤器的第一和第六位也被设置为“1”。因此,数据导入管理器125确定它需要遍历节点1310的子节点。在迭代到节点1315之后,数据导入管理器125将查询布隆过滤器与存储在节点1315中的布隆过滤器进行比较。由于存储在节点1315中的布隆过滤器中的第六位没有被设置为“1”,数据导入管理器125确定它可以跳过节点1330和节点1335。数据导入管理器125然后迭代到节点1320,并且将查询布隆过滤器与存储在节点1320中的布隆过滤器进行比较。因为布隆过滤器中的第一和第六位存储在节点1320中,所以数据导入管理器125确定片段1210可能具有与查询匹配的行。接下来,数据导入管理器125迭代到节点1325,并且将查询布隆过滤器与存储在节点1325中的布隆过滤器进行比较。由于存储在节点1325中的布隆过滤器中的第六位没有被设置为“1”,数据导入管理器125确定它可以跳过节点1325。
数据导入管理器125向文件读取器130发送数据导入管理器125从列1205的列元数据检索的包含片段1210的数据页的偏移和大小,并且指示文件读取器130从相应的数据页检索片段1210。一旦接收到片段1210,数据导入管理器125识别片段1210中满足查询的行(片段1210中的第一且唯一行)。数据导入管理器125将片段1210中的所识别的行包括在查询的结果中,并且向执行引擎120发送查询的结果,执行引擎120将其转发给执行管理器115。作为响应,执行管理器115将查询的结果转发给执行管理器115从其接收到查询的元件。
图14示出了根据一些实施例的使用超集树处理查询的过程1400。在一些实施例中,计算系统105执行过程1400。过程1400通过在1410处接收对表中在表的列中具有被包括在值的集合中的值的记录的查询。参考作为示例的图1和图10以及上述操作,执行管理器115可以接收对图10的表400中在列410中具有大于34且小于49的值的记录的查询。
接下来,过程1400在1420处遍历包括以多个级别排列的多个节点的分层树结构,以便基于值的集合识别分层树结构的叶节点的集合。分层树结构中的每个叶节点可以与表中的记录块相关联。分层树结构中的每个叶节点可以包括描述与叶节点相关联的记录块的列中的值的超集的数据。每个非叶节点可以包括描述由非叶节点的子节点中的数据描述的值的超集的数据。参考作为示例的图1和图11以及上述操作,数据导入管理器125可以遍历超集树1100,以识别可以包括满足查询的记录的叶节点(例如,节点1120、节点1125、节点1130和/或节点1135)。
过程1400然后在1430处处理对表中与叶节点的集合相关联的记录块的集合的查询。参考作为示例的图1和图10以及上述操作,数据导入管理器125确定以包括片段1025中的所有行,并且片段1030中的行中的一些可以被包括在查询的结果中。具体地,数据导入管理器125识别片段1030中满足查询的行(片段1030中的第一行和第二行)。最后,过程1400在1440处基于该处理来生成查询的结果。参考作为示例的图1和上述操作,数据导入管理器125将片段1025中的所有行和片段1030中的所识别的行(以及列405中的对应行)包括在查询结果中。
III.浮点数据压缩方案
章节I讨论了用于对整数值序列、字符串值等进行编码的不同方法。在一些实例中,表中的列存储浮点值。计算系统105使用新颖的技术用于对浮点值序列进行编码。现在将参考图1、图15和图16描述对浮点值序列进行编码的示例操作。图15示出了根据一些实施例的浮点值的示例表1500。如图所示,表1500包括一列1505和五行数据。出于简单和解释的目的,图15仅示出了表1500的列1505。本领域普通技术人员将理解,任何数量的不同列可以被包括在表1500中。列1505被配置为存储代表温度(华氏温度)的浮点值。在一些实施例中,要被编码的浮点值以64位浮点值(例如,电气和电子工程师协会(Institute ofElectrical and Electronics Engineers,IEEE)64位浮点值)而存储。图16示出了根据一些实施例的图15所示的浮点值的十六进制表示。具体地,图16示出了包括与表1500中的浮点值相对应的IEEE 64位浮点值(例如,双精度)的十六进制值的表1600。
示例操作通过文件生成器110接收将表1500存储在格式2文件中的请求而开始。文件生成器110以与上面在章节I中描述的类似方式生成表1500的格式2文件。为了对列1505中的浮点值进行编码,文件生成器110确定用于将浮点值缩放到整数值的最小范围的缩放值。在一些实施例中,缩放值是10的幂。在该示例中,文件生成器110通过将列1505中的值中的每一个乘以10的一次幂并检查是否所有相乘后的值都是整数来确定缩放值。如果不是,文件生成器110继续将列1505中的值中的每一个乘以10的升幂(increasing power),直到列1505中的相乘后的值是整数。也就是说,文件生成器110将列1505中的值中的每一个乘以10的二次幂并检查是否所有相乘后的值都是整数,将列1505中的值中的每一个乘以10的三次幂并检查是否所有相乘后的值都是整数,等等。对于该示例,文件生成器110将缩放值确定为100,因为将列1505中的每个值乘以100产生所有整数值。一旦文件生成器110确定了缩放值,文件生成器110就将列1505中的每个浮点值乘以缩放值,并且将经缩放的浮点值转换为经缩放的浮点值的整数表示。图17示出了根据一些实施例的图15所示的浮点值的缩放整数表示。具体地,图17示出了在文件生成器110缩放浮点值并将它们转换为整数值之后的包括表1500中的对应浮点值的整数值的表1700。
在该示例中,需要9位来对表1700中的所有整数值进行编码。在一些实施例中,负值可以通过使用一位用于符号位而说明。在其他实施例中,负值可以通过使用也使用附加位的zigzag编码而说明。然而,文件生成器110确定需要一个附加位来说明负值,以将整数值存储在表1700中。因此,文件生成器110确定需要十位来将每个整数值存储在表1700中。文件生成器110还将缩放值存储在格式2文件中。
如上所提到的,缩放值在一些实施例中是10的幂。因此,在一些这样的实施例中,文件生成器110使用8位整数来存储当值10自乘到指数整数时产生缩放值的指数整数。以这样的方式存储缩放值允许范围从10-127到10127的缩放值。指数整数值-128是为在范围-127到127中找不到有效缩放的情况或压缩无效的情况保留的。当经压缩的数据小于原始的数据大小的阈值比率值(例如,85%、90%、95%等)时,压缩被确定为无效。在该示例中,用来存储浮点值的总位数是8位+(N*9位),其中N是表1700中的行的数量。因此,需要53位来将浮点值存储在表1700中。与将浮点值存储为64位浮点值所需的位数相比,这产生约6.037(5*64位:53位)的压缩比。比较存储经压缩的浮点值和未压缩浮点值所需的字节的数量,产生大约5.714(40字节:7字节)的压缩比。
在一些实施例中,文件生成器110使用整数编码方案对表1700中的整数值进行编码。在一些这样的实施例中,文件生成器110使用上面在章节I中解释的自动整数编码方案选择技术来编码整数值。最后,文件生成器110以与上面在章节I中描述的类似方式(例如,使用图8所示的格式、和布局300)将经编码的整数值存储在格式2文件的数据页中。
在一些实例中,计算系统105可以接收对表1500的查询和对访问列1505中的数据的需要。在这样的实例中,数据导入管理器125指示文件读取器130从文件存储装置135检索包含表1500的文件。如果整数编码方案被用来编码整数值,则数据导入管理器125使用它来解码整数值。然后,数据导入管理器125将整数值转换为整数值的浮点表示。接下来,数据导入管理器125通过提取整数指数并将值10自乘到整数指数的幂来计算缩放值。数据导入管理器125使用计算出的缩放值,以通过将每个浮点值乘以计算出的缩放值来对浮点值进行去缩放(unscale)。产生的浮点值是表1500中的原始值。最后,数据导入管理器125处理对产生的浮点值的查询。
图18示出了根据一些实施例的用于压缩浮点值的过程1800。在一些实施例中,文件生成器110执行过程1800。过程1800通过在1810处基于多个浮点值来确定缩放值而开始。接下来,过程1800在1820处基于缩放值来缩放多个浮点值。过程1800可以通过将每个浮点值乘以缩放值来缩放多个浮点值。
过程1800然后在1830处将多个浮点值转换为多个整数值。也就是说,过程1800将每个浮点值转换为经缩放的浮点值的整数表示。接下来,过程1800在1840处从多个整数编码方案确定整数编码方案。在一些实施例中,过程1800使用章节I中描述的自动整数编码方案选择技术来确定整数编码方案。最后,过程1800在1850处基于所确定的整数编码算法对多个整数值进行编码。
图19示出了用于实现上述各种实施例的示例性计算机系统1900。例如,计算机系统1900可以用来实现计算系统105。计算机系统1900可以是台式计算机、膝上型计算机、服务器计算机、或任何其他类型的计算机系统、或其组合。文件生成器110、执行管理器115、执行引擎120、数据导入管理器125、文件读取器130或其组合的一些或所有元件可以被包括或实现在计算机系统1900中。此外,计算机系统1900可以实现上述许多操作、方法和/或过程(例如,过程900、过程1400和过程1800)。如图19所示,计算机系统1900包括经由总线子系统1926与输入/输出(Input/Output,I/O)子系统1908、存储子系统1910和通信子系统1924通信的处理子系统1902。
总线子系统1926被配置为促进计算机系统1900的各种组件和子系统当中的通信。虽然总线子系统1926在图19中被示出为单个总线,但是本领域普通技术人员将理解,总线子系统1926可以被实现为多个总线。总线子系统1926可以是使用各种总线架构中的任何一种的几种类型的总线结构(例如,存储器总线或存储器控制器、外围总线、本地总线等)中的任何一种。总线架构的示例可以包括工业标准架构(Industry Standard Architecture,ISA)总线、微通道架构(Micro Channel Architecture,MCA)总线、增强型ISA(EnhancedISA,EISA)总线、视频电子标准协会(Video Electronics Standards Association,VESA)本地总线、外围组件互连(Peripheral Component Interconnect,PCI)总线、通用串行总线(Universal Serial Bus,USB)等。
可以被实现为一个或多个集成电路(例如,传统微处理器或微控制器)的处理子系统1902控制计算机系统1900的操作。处理子系统1902可以包括一个或多个处理器1904。每个处理器1904可以包括一个处理单元1906(例如,诸如处理器1904-1的单核处理器)或几个处理单元1906(例如,诸如处理器1904-2的多核处理器)。在一些实施例中,处理子系统1902的处理器1904可以被实现为独立处理器,而在其他实施例中,处理子系统1902的处理器1904可以被实现为集成到单个芯片或多个芯片中的多个处理器。不过,在一些实施例中,处理子系统1902的处理器1904可以被实现为独立处理器和集成到单个芯片或多个芯片中的多个处理器的组合。
在一些实施例中,处理子系统1902可以响应于程序代码而执行各种程序或进程,并且可以维护多个同时执行的程序或进程。在任何给定时间,要执行的程序代码中的一些或所有可以驻留在处理子系统1902和/或存储子系统1910中。通过合适的编程,处理子系统1902可以提供各种功能,诸如上面参考过程900、过程1400、过程1800等描述的功能。
I/O子系统1908可以包括任何数量的用户接口输入设备和/或用户接口输出设备。用户接口输入设备可以包括键盘、定点设备(例如,鼠标、轨迹球等)、触摸板、合并到显示器中的触摸屏、滚轮、点击轮、拨号盘、按钮、开关、小键盘、具有语音识别系统的音频输入设备、麦克风、图像/视频捕获设备(例如,网络摄像头、图像扫描仪、条形码阅读器等)、运动感测设备、手势识别设备、眼睛姿态(例如,眨眼)识别设备、生物统计输入设备、和/或任何其他类型的输入设备。
用户接口输出设备可以包括视觉输出设备(例如,显示子系统、指示灯等)、音频输出设备(例如,扬声器、耳机等)等。显示子系统的示例可以包括阴极射线管(Cathode RayTube,CRT)、平板设备(例如,液晶显示器(Liquid Crystal Display,LCD)、等离子显示器等)、投影设备、触摸屏和/或用于从计算机系统1900向用户或另一设备(例如,打印机)输出信息的任何其他类型的设备和机构。
如图19所示,存储子系统1910包括系统存储器1912、计算机可读存储介质1920和计算机可读存储介质读取器1922。系统存储器1912可以被配置为存储以可由处理子系统1902加载和执行的程序指令的形式的软件以及在程序指令的执行期间生成的数据。在一些实施例中,系统存储器1912可以包括易失性存储器(例如,随机存取存储器(Random AccessMemory,RAM))和/或非易失性存储器(例如,只读存储器(Read-Only Memory,ROM)、可编程只读存储器(Programmable Read-Only Memory,PROM)、可擦除可编程只读存储器(Erasable Programmable Read-Only Memory,EPROM)、闪存等)。系统存储器1912可以包括不同类型的存储器,诸如静态随机存取存储器(Static Random Access Memory,SRAM)和/或动态随机存取存储器(Dynamic Random Access Memory,DRAM)。系统存储器1912可以在一些实施例中包括被配置为存储基本例程以促进(例如,在启动期间)在计算机系统1900内的元件之间传输信息的基本输入/输出系统(Basic Input/Output System,BIOS)。这样的BIOS可以被存储在ROM(例如,ROM芯片)、闪存或可以被配置为存储BIOS的任何其他类型的存储器中。
如图19所示,系统存储器1912包括应用程序1914、程序数据1916和操作系统(Operating System,OS)1918。OS 1918可以是各种版本的Microsoft Windows、Apple MacOS、Apple OS X、Apple macOS和/或Linux操作系统、各种商业可用的UNIX或类UNIX操作系统(包括但不限于各种GNU/Linux操作系统、GoogleOS等)和/或移动操作系统(诸如Apple iOS、Windows Phone、Windows Mobile、Android、BlackBerry OS、Blackberry10、和Palm OS、WebOS操作系统)中的一种。
计算机可读存储介质1920可以是被配置为存储软件(例如,程序、代码模块、数据结构、指令等)的非暂时性计算机可读介质。上述许多组件(例如,文件生成器110、执行管理器115、执行引擎120、数据导入管理器125和文件读取器130)和/或过程(例如,过程900、过程1400和过程1800)可以被实现为在由处理器或处理单元(例如,处理子系统1902的处理器或处理单元)执行时执行这样的组件的操作和/或过程的软件。存储子系统1910还可以存储用于软件的执行或在软件的执行期间生成的数据。
存储子系统1910还可以包括被配置为与计算机可读存储介质1920通信的计算机可读存储介质读取器1922。与系统存储器1912一起并且可选地与系统存储器1912组合,计算机可读存储介质1920可以全面表示用于暂时和/或更永久地包含、存储、发送和检索计算机可读信息的远程、本地、固定和/或可移动存储设备加上存储介质。
计算机可读存储介质1920可以是本领域已知或使用的任何适当的介质,包括诸如以用于信息的存储和/或发送的任何方法或技术实现的易失性、非易失性、可移动、不可移动介质的存储介质。这样的存储介质的示例包括RAM、ROM、EEPROM、闪存或其他存储技术、光盘只读存储器(Compact Disc Read-Only Memory,CD-ROM)、数字多功能盘(DigitalVersatile Disk,DVD)、蓝光盘(Blu-ray Disc,BD)、磁带盒、磁带、磁盘存储器(例如,硬盘驱动器)、Zip驱动器、固态驱动器(Solid-State Drive,SSD)、闪存卡(例如,安全数字(Secure Digital,SD)卡、压缩闪存卡等)、USB快闪驱动器、或任何其他类型的计算机可读存储介质或设备。
通信子系统1924用作用于从其他设备、计算机系统和网络接收数据和向其发送数据的接口。例如,通信子系统1924可以允许计算机系统1900经由网络(例如,个人区域网(Personal Area Network,PAN)、局域网(Local Area Network,LAN)、存储区域网(StorageArea Network,SAN)、校园区域网(Campus Area Network,CAN)、城域网(MetropolitanArea Network,MAN)、广域网(Wide Area Network,WAN)、全球区域网(Global AreaNetwork,GAN)、内部网、互联网、任何数量的不同类型网络的网络等)连接到一个或多个设备。通信子系统1924可以包括任何数量的不同通信组件。这样的组件的示例可以包括用于(例如,使用诸如2G、3G、4G、5G等的蜂窝技术、诸如Wi-Fi、蓝牙、ZigBee等的无线数据技术、或其任何组合)接入无线语音和/或数据网络的射频(Radio Frequency,RF)收发器组件、全球定位系统(Global Positioning System,GPS)接收器组件和/或其他组件。在一些实施例中,除了或代替配置用于无线通信的组件,通信子系统1924可以提供配置用于有线通信(例如,以太网)的组件。
本领域普通技术人员将认识到,图19所示的架构仅仅是计算机系统1900的示例架构,并且计算机系统1900可以具有比所示更多或更少的组件,或者不同的组件配置。图19所示的各种组件可以以硬件、软件、固件、或其任何组合而实现,包括一个或多个信号处理和/或专用集成电路。
图20示出了用于实现上述各种实施例的示例性计算设备2000。例如,计算设备2000可以用来实现计算系统105。计算设备2000可以是手机、智能手机、可穿戴设备、活动跟踪器或管理器、平板电脑、个人数字助理(personal digital assistant,PDA)、媒体播放器、或任何其他类型的移动计算设备、或其组合。文件生成器110、执行管理器115、执行引擎120、数据导入管理器125、文件读取器130、或其组合的一些或所有元件可以被包括或实现在计算设备2000中。此外,计算设备2000可以实现上述许多操作、方法和/或过程(例如,过程900、过程1400和过程1800)。如图20所示,计算设备2000包括处理系统2002、输入/输出(I/O)系统2008、通信系统2018和存储系统2020。这些组件可以通过一个或多个通信总线或信号线耦合。
可以被实现为一个或多个集成电路(例如,传统微处理器或微控制器)的处理系统2002控制计算设备2000的操作。如图所示,处理系统2002包括一个或多个处理器2004和存储器2006。处理器2004被配置为运行或执行存储在存储器2006中的各种软件和/或指令的集合,以执行计算设备2000的各种功能并且以处理数据。
处理器2004中的每个处理器可以包括一个处理单元(例如,单核处理器)或几个处理单元(例如,多核处理器)。在一些实施例中,处理系统2002的处理器2004可以被实现为独立处理器,而在其他实施例中,处理系统2002的处理器2004可以被实现为集成到单个芯片中的多个处理器。不过,在一些实施例中,处理系统2002的处理器2004可以被实现为独立处理器和集成到单个芯片中的多个处理器的组合。
存储器2006可以被配置为接收和存储以可由处理器2004加载和执行的程序指令的形式的软件(例如,来自存储系统2020的操作系统2022、应用2024、I/O模块2026、通信模块2028等)以及在程序指令的执行期间生成的数据。在一些实施例中,存储器2006可以包括易失性存储器(例如,随机存取存储器(RAM))、非易失性存储器(例如,只读存储器(ROM)、可编程只读存储器(PROM)、可擦除可编程只读存储器(EPROM)、闪存等)、或其组合。
I/O系统2008负责通过各种组件接收输入并且通过各种组件提供输出。如针对该示例所示,I/O系统2008包括显示器2010、一个或多个传感器2012、扬声器2014和麦克风2016。显示器2010被配置为输出视觉信息(例如,由处理器2004生成和/或渲染的图形用户接口(Graphical User Interface,GUI)。在一些实施例中,显示器2010是被配置为也接收基于触摸的输入的触摸屏。显示器2010可以使用液晶显示器(LCD)技术、发光二极管(Light-Emitting Diode,LED)技术、有机发光二极管(Organic LED,OLED)技术、有机电致发光(Organic Electro Luminescence,OEL)技术、或任何其他类型的显示技术而实现。传感器2012可以包括用于测量物理量(例如,温度、力、压力、加速度、方向、光、辐射等)的任何数量的不同类型的传感器。扬声器2014被配置为输出音频信息,并且麦克风2016被配置为接收音频输入。本领域普通技术人员将理解,I/O系统2008可以包括任何数量的附加、更少和/或不同的组件。例如,I/O系统2008可以包括用于接收输入的小键盘或键盘,用于发送数据、接收数据和/或电力、和/或与另一设备或组件通信的端口,用于捕获照片和/或视频的图像捕获组件等。
通信系统2018用作用于从其他设备、计算机系统和网络接收数据和向其发送数据的接口。例如,通信系统2018可以允许计算设备2000经由网络(例如,个人区域网(PAN)、局域网(LAN)、存储区域网(SAN)、校园区域网(CAN)、城域网(MAN)、广域网(WAN)、全球区域网(GAN)、内部网、互联网、任何数量的不同类型网络的网络等)连接到一个或多个设备。通信系统2018可以包括任何数量的不同通信组件。这样的组件的示例可以包括用于(例如,使用诸如2G、3G、4G、5G等的蜂窝技术、诸如Wi-Fi、蓝牙、ZigBee等的无线数据技术、或其任何组合)接入无线语音和/或数据网络的射频(RF)收发器组件、全球定位系统(GPS)接收器组件和/或其他组件。在一些实施例中,除了或代替配置用于无线通信的组件,通信系统2018可以提供配置用于有线通信(例如,以太网)的组件。
存储系统2020处理计算设备2000的数据的存储和管理。存储系统2020可以由被配置为存储软件(例如,程序、代码模块、数据结构、指令等)并且存储用于软件的执行或在软件的执行期间生成的数据的一个或多个非暂时性机器可读介质实现。上述许多组件(例如,文件生成器110、执行管理器115、执行引擎120、数据导入管理器125和文件读取器130)和/或过程(例如,过程900、过程1400和过程1800)可以被实现为在由处理器或处理单元(例如,处理系统2002的处理器2004)执行时执行这样的组件和/或过程的操作的软件。
在该示例中,存储系统2020包括操作系统2022、一个或多个应用2024、I/O模块2026和通信模块2028。操作系统2022包括用于控制和管理一般系统任务(例如,存储器管理、存储设备控制、电源管理等)的各种过程、指令的集合、软件组件和/或驱动程序,并且促进各种硬件和软件组件之间的通信。操作系统2022可以是各种版本的Microsoft Windows、Apple Mac OS、Apple OS X、Apple macOS和/或Linux操作系统、各种商业可用的UNIX或类UNIX操作系统(包括但不限于各种GNU/Linux操作系统、GoogleOS等)和/或移动操作系统(诸如Apple iOS、Windows Phone、Windows Mobile、Android、BlackBerry OS、Blackberry 10、和Palm OS、WebOS操作系统)中的一种。
应用2024可以包括安装在计算设备2000上的任何数量的不同应用。这样的应用的示例可以包括浏览器应用、地址簿应用、联系人列表应用、电子邮件应用、即时消息应用、文字处理应用、支持JAVA的应用、加密应用、数字权限管理应用、语音识别应用、位置确定应用、地图应用、音乐播放器应用等。
I/O模块2026管理经由输入组件(例如,显示器2010、传感器2012和麦克风2016)接收的信息和经由输出组件(例如,显示器2010和扬声器2014)输出的信息。通信模块2028促进经由通信系统2018与其他设备的通信,并且包括用于处理从通信系统2018接收到的数据的各种软件组件。
本领域普通技术人员将认识到,图20所示的架构仅仅是计算设备2000的示例架构,并且计算设备2000可以具有比所示更多或更少的组件,或者不同的组件配置。图20所示的各种组件可以以硬件、软件、固件、或其任何组合而实现,包括一个或多个信号处理和/或专用集成电路。
图21示出了用于实现上述各种实施例的示例性系统2100。例如,系统2100的云计算系统2112可以用来实现计算系统105。如图所示,系统2100包括客户端设备2102-2108、一个或多个网络2110和云计算系统2112。云计算系统2112被配置为经由网络2110向客户端设备2102-2108提供资源和数据。在一些实施例中,云计算系统2100向任何数量的不同用户(例如,客户、租户、组织等)提供资源。云计算系统2112可以由一个或多个计算机系统(例如,服务器)、在计算机系统上操作的虚拟机、或其组合实现。
如图所示,云计算系统2112包括一个或多个应用2114、一个或多个服务2116和一个或多个数据库2118。云计算系统2100可以以自助服务、基于订阅、弹性可扩展、可靠、高度可用和安全的方式向任何数量的不同客户提供应用2114、服务2116和数据库2118。
在一些实施例中,云计算系统2100可以适于自动提供、管理和跟踪客户对由云计算系统2100提供的服务的订阅。云计算系统2100可以经由不同的部署模型提供云服务。例如,云服务可以在其中云计算系统2100由销售云服务的组织拥有并且云服务对一般公众或不同的行业企业可用的公共云模型下而提供。作为另一示例,云服务可以在其中云计算系统2100仅针对单个组织操作并且可以为组织内的一个或多个实体提供云服务的私有云模型下而提供。云服务也可以在其中云计算系统2100和由云计算系统2100提供的云服务由相关社区中的几个组织共享的社区云模型下而提供。云服务也可以在作为前述不同模型中的两个或多个的组合的混合云模型下而提供。
在一些实例中,经由网络2110从云计算系统2100对客户端设备2102-2108可用的应用2114、服务2116和数据库2118中的任何一个被称为“云服务”。通常,组成云计算系统2100的服务器和系统不同于客户的自有(on-premises)服务器和系统。例如,云计算系统2100可以托管应用,并且客户端设备2102-2108中的一个的用户可以经由网络2110订购和使用应用。
应用程序2114可以包括被配置为在云计算系统2112(例如,计算机系统或在计算机系统上操作的虚拟机)上执行并经由客户端设备2102-2108而访问、控制、管理等的软件应用。在一些实施例中,应用2114可以包括服务器应用和/或中间层应用(例如,HTTP(hypertext transport protocol,超文本传输协议)服务器应用、FTP(file transferprotocol,文件传输协议)服务器应用、CGI(common gateway interface,通用网关接口)服务器应用、JAVA服务器应用等)。服务2116是被配置为在云计算系统2112上执行并经由网络2110向客户端设备2102-2108提供功能的软件组件、模块、应用等。服务2116可以是基于网络的服务或按需云服务。
数据库2118被配置为存储和/或管理由应用2114、服务2116和/或客户端设备2102-2108访问的数据。例如,数据库135可以存储在数据库2118中。数据库2118可以驻留在云计算系统2112本地(和/或驻留在云计算系统2112中)的非暂时性存储介质上、在存储区域网络(SAN)中、位于远离云计算系统2112的本地的非暂时性存储介质上。在一些实施例中,数据库2118可以包括由关系数据库管理系统(Relational DataBase ManagementSystem,RDBMS)管理的关系数据库。数据库2118可以是面向列的数据库、面向行的数据库、或其组合。在一些实施例中,数据库2118中的一些或所有是内存数据库。也就是说,在一些这样的实施例中,数据库2118的数据被存储和管理在存储器(例如,随机存取存储器(RAM))中。
客户端设备2102-2108被配置为执行和操作经由网络2110与应用2114、服务2116和/或数据库2118通信的客户端应用(例如,网络浏览器、专属客户端应用等)。这样,当应用2114、服务2116和数据库2118在云计算系统2100上操作(例如,托管)时,客户端设备2102-2108可以访问由应用2114、服务2116和数据库2118提供的各种功能。客户端设备2102-2108可以是如上面分别参考图19和图20描述的计算机系统1900或计算设备2000。尽管系统2100被示出为具有四个客户端设备,但是可以支持任何数量的客户端设备。
网络2110可以是被配置为使用各种网络协议中的任何一种来促进客户端设备2102-2108和云计算系统2112当中的数据通信的任何类型的网络。网络2110可以是个人区域网(PAN)、局域网(LAN)、存储区域网(SAN)、校园区域网(CAN)、城域网(MAN)、广域网(WAN)、全球区域网(GAN)、内部网、互联网、任何数量的不同类型网络的网络等。
以上描述示出了本发明的各种实施例以及如何可以实现本发明的方面的示例。以上示例和实施例不应被认为是唯一的实施例,并且被呈现以示出由所附权利要求限定的本发明的灵活性和优点。基于以上公开和所附权利要求,其他排列、实施例、实现方式和等同物对于本领域技术人员来说将是显而易见的,并且可以在不脱离由权利要求限定的本发明的精神和范围的情况下使用。
Claims (20)
1.一种存储由设备的至少一个处理单元可执行的程序的非暂时性机器可读介质,所述程序包括用于以下步骤的指令的集合:
接收对表中在表的列中具有被包括在值的集合中的值的记录的查询;
遍历包括以多个级别排列的多个节点的分层树结构,以便基于值的集合识别分层树结构的叶节点的集合,分层树结构中的每个叶节点与表中的记录块相关联,分层树结构中的每个叶节点包括描述与叶节点相关联的记录块的列中的值的超集的数据,每个非叶节点包括描述由非叶节点的子节点中的数据描述的值的超集的数据;
处理对表中与叶节点的集合相关联的记录块的集合的查询;以及
基于所述处理来生成查询的结果。
2.根据权利要求1所述的非暂时性机器可读介质,其中表的列中的值是整数值,其中分层树结构中的每个叶节点的数据根据整数值范围来描述与叶节点相关联的记录块的列中的值,其中分层树结构中的每个非叶节点的数据根据整数值范围来描述超集。
3.根据权利要求2所述的非暂时性机器可读介质,其中在查询中指定的值的集合形成整数值范围,其中处理对记录块的集合的查询包括,对于记录块的集合中的每个记录块:
确定记录块与其相关联的叶节点的整数值范围是否是查询的整数值范围的子集;
如果记录块与其相关联的叶节点的整数值范围是查询的整数值范围的子集,则将记录块包括在查询的结果中;以及
如果记录块与其相关联的叶节点的整数值范围不是查询的整数值范围的子集,则将记录块中在表的列中具有在查询的整数值范围内的值的记录包括在查询的结果中。
4.根据权利要求1所述的非暂时性机器可读介质,其中表的列中的值是字符串值,其中分层树结构中的每个叶节点的数据根据从与叶节点相关联的记录块的列中的字符串值和散列函数的集合生成的布隆过滤器来描述与叶节点相关联的记录块的列中的值,其中分层树结构中的每个非叶节点的数据根据从非叶节点的子节点的布隆过滤器和散列函数的集合生成的布隆过滤器来描述超集。
5.根据权利要求4所述的非暂时性机器可读介质,其中处理对记录块的集合的查询包括,对于记录块的集合中的每个记录块:
遍历记录块中的记录;以及
将记录块中在表的列中具有与值的集合中的值匹配的值的记录包括在查询的结果中。
6.根据权利要求1所述的非暂时性机器可读介质,其中处理对记录块的集合的查询包括处理对记录块的集合中的每个记录块的查询,其中生成查询的结果包括聚合来自对记录块的集合中的每个记录块的查询的结果,以形成查询的结果。
7.根据权利要求1所述的非暂时性机器可读介质,其中值的集合中的至少一个值被包括在由叶节点的集合中的每个叶节点的数据描述的值的超集中。
8.一种方法,包括:
接收对表中在表的列中具有被包括在值的集合中的值的记录的查询;
遍历包括以多个级别排列的多个节点的分层树结构,以便基于值的集合识别分层树结构的叶节点的集合,分层树结构中的每个叶节点与表中的记录块相关联,分层树结构中的每个叶节点包括描述与叶节点相关联的记录块的列中的值的超集的数据,每个非叶节点包括描述由非叶节点的子节点中的数据描述的值的超集的数据;
处理对表中与叶节点的集合相关联的记录块的集合的查询;以及
基于所述处理来生成查询的结果。
9.根据权利要求8所述的方法,其中表的列中的值是整数值,其中分层树结构中的每个叶节点的数据根据整数值范围来描述与叶节点相关联的记录块的列中的值,其中分层树结构中的每个非叶节点的数据根据整数值范围来描述超集。
10.根据权利要求9所述的方法,其中在查询中指定的值的集合形成整数值范围,其中处理对记录块的集合的查询包括,对于记录块的集合中的每个记录块:
确定记录块与其相关联的叶节点的整数值范围是否是查询的整数值范围的子集;
如果记录块与其相关联的叶节点的整数值范围是查询的整数值范围的子集,则将记录块包括在查询的结果中;以及
如果记录块与其相关联的叶节点的整数值范围不是查询的整数值范围的子集,则将记录块中在表的列中具有在查询的整数值范围内的值的记录包括在查询的结果中。
11.根据权利要求8所述的方法,其中表的列中的值是字符串值,其中分层树结构中的每个叶节点的数据根据从与叶节点相关联的记录块的列中的字符串值和散列函数的集合生成的布隆过滤器来描述与叶节点相关联的记录块的列中的值,其中分层树结构中的每个非叶节点的数据根据从非叶节点的子节点的布隆过滤器和散列函数的集合生成的布隆过滤器来描述超集。
12.根据权利要求11所述的方法,其中处理对记录块的集合的查询包括,对于记录块的集合中的每个记录块:
遍历记录块中的记录;以及
将记录块中在表的列中具有与值的集合中的值匹配的值的记录包括在查询的结果中。
13.根据权利要求8所述的方法,其中处理对记录块的集合的查询包括处理对记录块的集合中的每个记录块的查询,其中生成查询的结果包括聚合来自对记录块的集合中的每个记录块的查询的结果,以形成查询的结果。
14.根据权利要求8所述的方法,其中值的集合中的至少一个值被包括在由叶节点的集合中的每个叶节点的数据描述的值的超集中。
15.一种系统,包括:
处理单元的集合;以及
存储指令的非暂时性机器可读介质,所述指令在由处理单元的集合中的至少一个处理单元执行时使得至少一个处理单元:
接收对表中在表的列中具有被包括在值的集合中的值的记录的查询;
遍历包括以多个级别排列的多个节点的分层树结构,以便基于值的集合识别分层树结构的叶节点的集合,分层树结构中的每个叶节点与表中的记录块相关联,分层树结构中的每个叶节点包括描述与叶节点相关联的记录块的列中的值的超集的数据,每个非叶节点包括描述由非叶节点的子节点中的数据描述的值的超集的数据;
处理对表中与叶节点的集合相关联的记录块的集合的查询;以及
基于所述处理来生成查询的结果。
16.根据权利要求15所述的系统,其中表的列中的值是整数值,其中分层树结构中的每个叶节点的数据根据整数值范围来描述与叶节点相关联的记录块的列中的值,其中分层树结构中的每个非叶节点的数据根据整数值范围来描述超集。
17.根据权利要求16所述的系统,其中在查询中指定的值的集合形成整数值范围,其中处理对记录块的集合的查询包括,对于记录块的集合中的每个记录块:
确定记录块与其相关联的叶节点的整数值范围是否是查询的整数值范围的子集;
如果记录块与其相关联的叶节点的整数值范围是查询的整数值范围的子集,则将记录块包括在查询的结果中;以及
如果记录块与其相关联的叶节点的整数值范围不是查询的整数值范围的子集,则将记录块中在表的列中具有在查询的整数值范围内的值的记录包括在查询的结果中。
18.根据权利要求15所述的系统,其中表的列中的值是字符串值,其中分层树结构中的每个叶节点的数据根据从与叶节点相关联的记录块的列中的字符串值和散列函数的集合生成的布隆过滤器来描述与叶节点相关联的记录块的列中的值,其中分层树结构中的每个非叶节点的数据根据从非叶节点的子节点的布隆过滤器和散列函数的集合生成的布隆过滤器来描述超集。
19.根据权利要求18所述的系统,其中处理对记录块的集合的查询包括,对于记录块的集合中的每个记录块:
遍历记录块中的记录;以及
将记录块中在表的列中具有与值的集合中的值匹配的值的记录包括在查询的结果中。
20.根据权利要求15所述的系统,其中处理对记录块的集合的查询包括处理对记录块的集合中的每个记录块的查询,其中生成查询的结果包括聚合来自对记录块的集合中的每个记录块的查询的结果,以形成查询的结果。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US16/124,163 US10970281B2 (en) | 2018-09-06 | 2018-09-06 | Searching for data using superset tree data structures |
US16/124,163 | 2018-09-06 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110879854A true CN110879854A (zh) | 2020-03-13 |
CN110879854B CN110879854B (zh) | 2023-06-30 |
Family
ID=67513341
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910700302.2A Active CN110879854B (zh) | 2018-09-06 | 2019-07-31 | 使用超集树数据结构搜索数据 |
Country Status (3)
Country | Link |
---|---|
US (1) | US10970281B2 (zh) |
EP (1) | EP3620931B1 (zh) |
CN (1) | CN110879854B (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113282627A (zh) * | 2021-06-08 | 2021-08-20 | 河南华正通信息技术有限公司 | 情报大数据智能分析方法 |
Families Citing this family (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111902804B (zh) | 2018-06-25 | 2024-03-01 | 阿里巴巴集团控股有限公司 | 用于管理存储设备的资源并量化i/o请求成本的系统和方法 |
US11061735B2 (en) | 2019-01-02 | 2021-07-13 | Alibaba Group Holding Limited | System and method for offloading computation to storage nodes in distributed system |
US11055290B2 (en) * | 2019-09-25 | 2021-07-06 | Atlassian Pty Ltd. | Systems and methods for performing tree-structured dataset operations |
US11617282B2 (en) | 2019-10-01 | 2023-03-28 | Alibaba Group Holding Limited | System and method for reshaping power budget of cabinet to facilitate improved deployment density of servers |
US11556277B2 (en) | 2020-05-19 | 2023-01-17 | Alibaba Group Holding Limited | System and method for facilitating improved performance in ordering key-value storage with input/output stack simplification |
US11507499B2 (en) | 2020-05-19 | 2022-11-22 | Alibaba Group Holding Limited | System and method for facilitating mitigation of read/write amplification in data compression |
US11422931B2 (en) * | 2020-06-17 | 2022-08-23 | Alibaba Group Holding Limited | Method and system for facilitating a physically isolated storage unit for multi-tenancy virtualization |
US11487465B2 (en) | 2020-12-11 | 2022-11-01 | Alibaba Group Holding Limited | Method and system for a local storage engine collaborating with a solid state drive controller |
US11734115B2 (en) | 2020-12-28 | 2023-08-22 | Alibaba Group Holding Limited | Method and system for facilitating write latency reduction in a queue depth of one scenario |
US11726699B2 (en) | 2021-03-30 | 2023-08-15 | Alibaba Singapore Holding Private Limited | Method and system for facilitating multi-stream sequential read performance improvement with reduced read amplification |
CN115062065A (zh) * | 2022-05-26 | 2022-09-16 | 北京快乐茄信息技术有限公司 | 一种订单信息的查询方法、装置、设备及存储介质 |
Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5875445A (en) * | 1997-05-29 | 1999-02-23 | Oracle Corporation | Performance-related estimation using pseudo-ranked trees |
CN101490653A (zh) * | 2006-07-26 | 2009-07-22 | 国际商业机器公司 | 用于在分布式应用中最佳地权衡复制开销和一致性级别的系统和装置 |
US20130018849A1 (en) * | 2010-06-29 | 2013-01-17 | Asserted Versioning, Llc | Management of temporal data by means of a canonical schema |
CN104756101A (zh) * | 2012-10-31 | 2015-07-01 | 惠普发展公司,有限责任合伙企业 | 执行具有多个集合操作符的查询 |
CN105518658A (zh) * | 2013-03-15 | 2016-04-20 | 美国结构数据有限公司 | 用于将数据记录分组的设备、系统以及方法 |
US20160188623A1 (en) * | 2014-12-29 | 2016-06-30 | International Business Machines Corporation | Scan optimization using bloom filter synopsis |
CN108369598A (zh) * | 2015-10-23 | 2018-08-03 | 甲骨文国际公司 | 对于半结构化数据的列状数据布置 |
Family Cites Families (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6980976B2 (en) * | 2001-08-13 | 2005-12-27 | Oracle International Corp. | Combined database index of unstructured and structured columns |
US8346778B2 (en) * | 2008-05-21 | 2013-01-01 | Oracle International Corporation | Organizing portions of a cascading index on disk |
US20120117067A1 (en) * | 2010-10-29 | 2012-05-10 | Navteq North America, Llc | Method and apparatus for providing a range ordered tree structure |
US11789923B2 (en) * | 2015-10-23 | 2023-10-17 | Oracle International Corporation | Compression units in an index block |
US11138151B2 (en) * | 2018-08-30 | 2021-10-05 | Sap Se | Compression scheme for floating point values |
-
2018
- 2018-09-06 US US16/124,163 patent/US10970281B2/en active Active
-
2019
- 2019-07-30 EP EP19189015.1A patent/EP3620931B1/en active Active
- 2019-07-31 CN CN201910700302.2A patent/CN110879854B/zh active Active
Patent Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5875445A (en) * | 1997-05-29 | 1999-02-23 | Oracle Corporation | Performance-related estimation using pseudo-ranked trees |
CN101490653A (zh) * | 2006-07-26 | 2009-07-22 | 国际商业机器公司 | 用于在分布式应用中最佳地权衡复制开销和一致性级别的系统和装置 |
US20130018849A1 (en) * | 2010-06-29 | 2013-01-17 | Asserted Versioning, Llc | Management of temporal data by means of a canonical schema |
CN104756101A (zh) * | 2012-10-31 | 2015-07-01 | 惠普发展公司,有限责任合伙企业 | 执行具有多个集合操作符的查询 |
CN105518658A (zh) * | 2013-03-15 | 2016-04-20 | 美国结构数据有限公司 | 用于将数据记录分组的设备、系统以及方法 |
US20160188623A1 (en) * | 2014-12-29 | 2016-06-30 | International Business Machines Corporation | Scan optimization using bloom filter synopsis |
CN108369598A (zh) * | 2015-10-23 | 2018-08-03 | 甲骨文国际公司 | 对于半结构化数据的列状数据布置 |
Non-Patent Citations (2)
Title |
---|
MD. REZAUL KARIM ET AL.: "Mining maximal frequent patterns in transactional databases and dynamic data streams: A spark-based approach" * |
马亚明: "嵌入式空间数据库理论与技术研究" * |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113282627A (zh) * | 2021-06-08 | 2021-08-20 | 河南华正通信息技术有限公司 | 情报大数据智能分析方法 |
Also Published As
Publication number | Publication date |
---|---|
CN110879854B (zh) | 2023-06-30 |
EP3620931A1 (en) | 2020-03-11 |
US10970281B2 (en) | 2021-04-06 |
EP3620931B1 (en) | 2023-08-30 |
US20200082006A1 (en) | 2020-03-12 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110879854B (zh) | 使用超集树数据结构搜索数据 | |
CN110879807B (zh) | 用于快速地并且有效地访问数据的文件格式 | |
US9025892B1 (en) | Data record compression with progressive and/or selective decomposition | |
US9805079B2 (en) | Executing constant time relational queries against structured and semi-structured data | |
CN111247518B (zh) | 用于数据库分片的方法和系统 | |
US20150161211A1 (en) | Predictive query result computation | |
CN110874346B (zh) | 浮点值的压缩方案 | |
US10678779B2 (en) | Generating sub-indexes from an index to compress the index | |
CN110704194B (zh) | 管理内存数据及在内存中维护数据的方法和系统 | |
US10540355B1 (en) | ACID database | |
US9633073B1 (en) | Distributed data store for hierarchical data | |
US9904705B2 (en) | Data table performance optimization | |
US20130019029A1 (en) | Lossless compression of a predictive data stream having mixed data types | |
US9916320B2 (en) | Compression-based filtering for deduplication | |
US11880368B2 (en) | Compressing data sets for storage in a database system | |
TW201735009A (zh) | 儲存在區塊處理儲存系統上的音頻資料和資料的縮減 | |
US10303672B2 (en) | System and method for search indexing | |
US9219497B2 (en) | Compression device, compression method, and recording medium | |
US8935310B2 (en) | Parallel computation of a remainder by division of a sequence of bytes | |
JP7529673B2 (ja) | コンテンツ不可知ファイルインデキシングの方法及びシステム | |
US20240012851A1 (en) | Generating and compressing data blocks for efficient browse structures | |
CA3235115A1 (en) | High-compression, high-volume deduplication cache | |
Arkatkar et al. | Analytics-driven Lossless Data Compression for Rapid In-situ Indexing, Storing, and Querying |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
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 |