CN110879807A - 用于快速地并且有效地访问数据的文件格式 - Google Patents
用于快速地并且有效地访问数据的文件格式 Download PDFInfo
- Publication number
- CN110879807A CN110879807A CN201910700762.5A CN201910700762A CN110879807A CN 110879807 A CN110879807 A CN 110879807A CN 201910700762 A CN201910700762 A CN 201910700762A CN 110879807 A CN110879807 A CN 110879807A
- Authority
- CN
- China
- Prior art keywords
- data
- column
- file
- columns
- row
- 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/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/221—Column-oriented storage; 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/10—File systems; File servers
- G06F16/11—File system administration, e.g. details of archiving or snapshots
- G06F16/116—Details of conversion of file system types or formats
-
- 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
-
- 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/17—Details of further file system functions
- G06F16/174—Redundancy elimination performed by the file system
- G06F16/1744—Redundancy elimination performed by the file system using compression, e.g. sparse files
-
- 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/242—Query formulation
- G06F16/2433—Query languages
-
- 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/25—Integrating or interfacing systems involving database management systems
- G06F16/258—Data format conversion from or to a database
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Databases & Information Systems (AREA)
- Physics & Mathematics (AREA)
- Data Mining & Analysis (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Software Systems (AREA)
- Mathematical Physics (AREA)
- Computational Linguistics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
用于快速地并且有效地访问数据的文件格式。一些实施例提供了一种存储程序的非暂时性机器可读介质。程序接收从包括多个行的表创建用于存储数据的文件的请求。程序进一步将多个行划分为多个行块。对于每个行块的每个列,程序还基于存储在列中的数据类型对行块的列中的数据进行编码,并且将编码数据作为单独的数据页存储在文件中。程序还生成列集合的列元数据集合。程序还将每个列元数据作为单独的数据页存储在文件中。程序还生成报头页。程序还将报头页作为单独的数据页存储在文件中。
Description
背景技术
数据库系统可以存储大量数据。不同数据库系统可以使用不同的存储数据的方法。例如,一些数据库系统将数据存储在表中,而其他数据库系统可以将数据存储在诸如电子表格(spreadsheet)、文档、媒体等文件中。存储的数据类型在不同的数据库系统中变化。例如,一些数据库系统可以存储结构化数据。另一方面,一些数据库系统可以存储非结构化数据。可以使用许多技术来搜索数据库系统中的特定数据。例如,一些数据库系统对数据库系统中的所有数据进行迭代,以便识别与查询匹配的数据。其他数据库系统可以使用索引来进行更快的搜索。
发明内容
在一些实施例中,非暂时性机器可读介质存储程序。程序接收从包括多个行的表创建用于存储数据的文件的请求。多个行中的每个行被划分为列集合。列集合中的每个列被配置为存储一类型的数据。程序还将多个行划分为多个行块。多个行块中的每个行块包括多个行的一部分。对于多个行块中的每个行块的列集合中的每个列,程序还基于存储在列中的数据类型对行块的列中的数据进行编码,以及将编码数据作为单独的数据页存储在文件中。程序还生成列集合的列元数据集合。每个列元数据包括:存储在列集合中的相对应的列中的数据类型、用于对相对应的列中的数据进行编码的编码方案以及对用于相对应的列的多个行块的引用。程序还将每个列元数据作为单独的数据页存储在文件中。程序还生成报头页,该报头页包括:多个行中的总行数,多个行块中的每个行块中的行数以及对列元数据集合的引用。程序还将报头页作为单独的数据页存储在文件中。
在一些实施例中,程序还可以生成列集合的数据元数据集合,其中,每个数据元数据包括描述存储在列集合中的相对应的列中的值的数据;以及将数据元数据集合中的每个数据元数据作为单独的数据页存储在文件中。对于多个行块中的每个行块的列集合中的每个列,程序还可以压缩编码数据以及作为单独的数据页存储编码和压缩数据。
在一些实施例中,列集合中的列可以被配置为存储整数值作为数据类型。对于多个行块中的每个行块的列,程序还可以基于存储在行块的列中的数据,从多个整数编码方案中自动选择整数编码方案,以及使用选择的整数编码方案对行块的列中的数据进行编码。可以使用多个整数编码方案中的不同整数编码方案对不同行块的列中的数据进行编码。
在一些实施例中,列集合中的列可以被配置为存储串值(string value)作为数据类型。对于多个行块中的每个行块的列,程序还可以使用串编码方案对行块的列中的数据进行编码。程序还可以包括在文件的每端(end)处存储文件格式标识符。
在一些实施例中,方法接收从包括多个行的表创建用于存储数据的文件的请求。多个行中的每个行被划分为列集合。列集合中的每个列被配置为存储一类型的数据。方法还将多个行划分为多个行块。多个行块中的每个行块包括多个行的一部分。对于多个行块中的每个行块的列集合中的每个列,方法还基于存储在列中的数据类型对行块的列中的数据进行编码,以及将编码数据作为单独的数据页存储在文件中。方法还生成列集合的列元数据集合。每个列元数据包括:存储在列集合中的相对应的列中的数据类型、用于对相对应的列中的数据进行编码的编码方案以及对用于相对应的列的多个行块的引用。方法还将每个列元数据作为单独的数据页存储在文件中。方法还生成报头页,该报头页包括:多个行中的总行数,多个行块中的每个行块中的行数以及对列元数据集合的引用。方法还将报头页作为单独的数据页存储在文件中。
在一些实施例中,方法还可以生成列集合的数据元数据集合,其中,每个数据元数据包括描述存储在列集合中的相对应的列中的值的数据,以及将数据元数据集合中的每个数据元数据作为单独的数据页存储在文件中。对于多个行块中的每个行块的列集合中的每个列,方法还可以压缩编码数据以及作为单独的数据页存储编码和压缩数据。
在一些实施例中,列集合中的列可以被配置为存储整数值作为数据类型。可以对于多个行块中的每个行块的列,方法还基于存储在行块的列中的数据,从多个整数编码方案自动选择整数编码方案,以及使用选择的整数编码方案对行块的列中的数据进行编码。可以使用多个整数编码方案中的不同整数编码方案对不同行块的列中的数据进行编码。
在一些实施例中,列集合中的列可以被配置为存储串值作为数据类型。对于多个行块中的每个行块的列,方法还可以使用串编码方案对行块的列中的数据进行编码。方法还可以包括在文件的每端处存储文件格式标识符。
在一些实施例中,系统包括处理单元集以及存储指令的非暂时性机器可读介质。指令使至少一个处理单元接收从包括多个行的表创建用于存储数据的文件的请求。多个行中的每个行被划分为列集合。列集合中的每个列被配置为存储一类型的数据。指令还使至少一个处理单元将多个行划分为多个行块。多个行块中的每个行块包括多个行的一部分。对于多个行块中的每个行块的列集合中的每个列,指令还使至少一个处理单元基于存储在列中的数据类型对行块的列中的数据进行编码,以及将编码数据作为单独的数据页存储在文件中。指令还使至少一个处理单元生成列集合的列元数据集合。每个列元数据包括:存储在列集合中的相对应的列中的数据类型、用于对相对应的列中的数据进行编码的编码方案以及对用于相对应的列的多个行块的引用。指令还使至少一个处理单元将每个列元数据作为单独的数据页存储在文件中。指令还使至少一个处理单元还生成报头页,该报头页包括多个行中的总行数,多个行块中的每个行块中的行数以及对列元数据集合的引用。指令还使至少一个处理单元还将报头页作为单独的数据页存储在文件中。
在一些实施例中,指令还可以使至少一个处理单元生成列集合的数据元数据集合,其中,每个数据元数据包括描述存储在列集合中的相对应的列中的值的数据,以及将数据元数据集合中的每个数据元数据作为单独的数据页存储在文件中。对于多个行块中的每个行块的列集合中的每个列,指令还可以使至少一个处理单元压缩编码数据以及作为单独的数据页存储编码和压缩数据。
在一些实施例中,列集合中的列可以被配置为存储整数值作为数据类型。对于多个行块中的每个行块的列,指令还可以使至少一个处理单元基于存储在行块的列中的数据,从多个整数编码方案中自动选择整数编码方案,以及使用选择的整数编码方案对行块的列中的数据进行编码。可以使用多个整数编码方案中的不同整数编码方案对不同行块的列中的数据进行编码。
在一些实施例中,列集合中的列可以被配置为存储串值作为数据类型。对于多个行块中的每个行块的列,指令还可以使至少一个处理单元使用串编码方案对行块的列中的数据进行编码。
以下详细描述和附图提供了对本发明的本质和优点的更好理解。
附图说明
图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中描述了用于基于允许有效地并且快速地访问文件中的数据的文件格式(称为format2文件)创建数据文件的技术。在一些实施例中,系统可以周期性地从数据库中的数据表创建这样的文件。当从表创建文件时,系统使用不同的编码和/或压缩方案对表中的不同类型的数据进行编码和/或压缩。系统还可以生成与表、列和/或列中的数据相关联的元数据。一旦创建了文件,系统就可以将它们存储在文件存储器(例如,本地文件存储器、远程文件存储器等)中。当系统接收到对存储在其中文件之一中的数据的查询时,系统从文件存储器中检索(retrieve)相对应的文件,将可能具有期望的数据的文件的部分加载到数据库中,处理对所加载文件部分的查询,以及返回查询结果。
本申请的第I部分中描述的技术提供了优于传统数据文件的许多益处和优点。第一,由于以文件格式组织数据的方式,系统通过将可能具有期望的数据的文件部分加载到数据库中来减少读取的数据量(例如,减少使用的带宽量),同时避免将明确不具有期望的数据的文件部分加载到数据库中。第二,通过使用不同的编码和/或压缩方案来编码和/或压缩表中的不同类型的数据,当从表中的数据创建文件时,系统减小数据的存储大小。反过来,这减少了检索或访问这种文件的延迟。例如,当远程地存储文件时,从远程文件进行读取的时间是读取的数据量和恒定开销的函数。从远程文件进行读取的时间量可以如下表示:time_to_read(num_bytes)=roundtrip_overhead+num_bytes*read_overhead_per_byte。在一些情况下,roundtrip_overhead足够大,读取1字节到1000字节需要大约相同的时间。在本申请的部分I中描述的文件格式以减少读取数量的方式构造,例如,通过将10个100字节的读取减少到1个1000字节的读取。
此外,在本申请的部分II中描述了用于提高大数据文件中的搜索速度的技术。如上所述,系统可以从数据库中的数据表创建数据文件。在创建这样的文件时,系统可以创建存储与表的列中的数据值相关联的信息的数据结构。系统可以为表中的每个列创建这些数据结构,并且将它们存储在文件中。如果系统接收对表的列的查询,则系统可以利用相对应的数据结构中的信息来识别可能具有期望的数据的文件部分,并且识别明确不具有期望的数据的文件部分。然后,系统仅将可能具有期望的数据的文件部分加载到数据库中,并且处理对所加载文件部分的查询,以便生成查询结果。
与对文件中的数据执行搜索的传统方法相比,本申请的部分II中描述的技术提供了许多益处和优点。例如,通过创建用于存储与表的列中的数据值相关联的信息的数据结构,系统稍后可以通过确定可能具有期望的数据的文件部分和确定明确不具有期望的数据的文件部分,在处理对文件中的数据的查询时利用该信息。系统仅访问可能具有期望的数据的文件部分,并且避免访问明确不具有期望的数据的文件部分,从而以更快地并且更有效的方式处理查询。这些技术在快速处理对大数据集的一小部分的查询时特别有效。
另外,在本申请的部分III中描述了用于压缩浮点数据的技术。在一些实施例中,系统通过分析浮点值集合来压缩浮点值集合以确定缩放值。然后,系统基于缩放值来缩放浮点值,并且将它们转换为缩放浮点值的整数表示。接下来,系统使用任意数量的不同整数编码方案来编码转换和缩放的浮点值的整数表示。
与存储浮点数据的传统方法相比,本申请的部分III中描述的技术提供了许多益处和优点。例如,缩放浮点值并将它们转换为整数值允许系统对浮点数据采用更有利的编码和压缩方案。它还减少了用于存储浮点数据的存储空间量。
I.format2文件格式
图1示出根据一些实施例的系统100。如所示地,系统100包括计算系统105和文件存储器135。文件存储器135被配置为存储format2文件。在一些实施例中,文件存储器135实施在另一系统(未示出)上,作为存储区域网络(SAN)、集群存储系统、云存储系统等的一部分。虽然图1将文件存储器135示出为计算系统105的外部,但是本领域普通技术人员将理解,在一些实施例中,文件存储器135可以是计算系统105的一部分。另外,本领域普通技术人员将理解,在一些实施例中,可以使用多个文件存储器。在一些这样的实施例中,多个文件存储器可以分布在计算系统105和/或任何数量的不同系统上。
在一些实施例中,系统100负责管理(例如,创建、存储、访问等)格式化为format2文件的数据文件。图2示出根据一些实施例的文件格式的布局200。具体地,布局200是如本申请中所描述的、允许有效访问文件中的数据的文件格式的高级描述。如所示地,布局200包括文件格式标识符(ID)205、数据页210a-210k、报头页215、报头大小220和文件格式ID225。在一些实施例中,多字节数(multi-byte number)被存储为小端(little-endian)。文件格式ID 205和文件格式ID 225均被配置为存储用于识别文件格式的唯一值。在一些实施例中,文件格式ID 205和文件格式ID 225各自是具有值“FMT2”的32位带符号整数。在一些这样的实施例中,32位带符号整数值“FMT2”是美国信息交换标准码(ASCII)编码中每个字符的十六进制表示的串联。也就是说,32位带符号整数值是464D5432(“F”为46,“T”为4D,“M”为54以及“2”为32)。
数据页210a-210k每个都是单独的、连续的字节序列,被配置为存储由报头页215定义的各种数据。例如,数据页210a-210k可以存储表或超集树结构(详见下文)的一部分列的值。数据页210a-210k的大小可以是不同的大小,由存储在数据页210a-210k中的数据决定。报头页215是单独的、连续的字节序列,被配置为存储文件格式的版本(例如,主版本号、次版本号等)、存储的数据集中的总行数、每个行块中包含的行数,对数据集中列的列元数据的引用以及对超集树的引用。报头大小220被配置为根据字节数存储报头页215的大小。在一些实施例中,报头大小220是64位带符号整数。如上所述,在一些实施例中,文件格式ID225是32位带符号整数。因此,在报头大小220是64位带符号整数并且文件格式ID 225是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”可以用于表示使用zlib压缩方案压缩数据305,值“2”可以用于表示使用lz4压缩方案压缩数据305,值“3”可以用于表示使用snappy压缩方案压缩数据305,等等。在一些实施例中,压缩方案310是8位带符号整数。未压缩大小315被配置为根据字节数存储未压缩的数据305的大小。在一些实施例中,未压缩大小315是64位带符号整数。
返回到图1,计算系统105包括文件生成器110、执行管理器、执行引擎120、数据导入管理器125、文件读取器130和数据库130。在一些实施例中,数据库管理系统(DBMS)提供对数据库130的访问并且与数据库130交互。数据库130存储可以用于生成format2文件的数据。在一些实施例中,数据库135中的数据存储在一个或多个表中。每个表都可以包括字段集。每个表可以具有用于在表的每个字段中存储值的一个或多个记录。在一些实施例中,数据库135实施在单个物理存储器中,而在其他实施例中,数据库135可以实施在若干物理存储器中。虽然图1将数据库135示出为计算系统105的一部分,但是本领域普通技术人员将认识到,在一些实施例中,数据库135可以在计算系统105的外部。
文件生成器110负责从存储在数据库130中的数据创建format2文件。在一些实施例中,文件生成器110以定义的间隔(例如,每天一次、每周一次、每月一次等)生成format2文件。在定义的间隔期间,文件生成器110可以访问数据库130并且识别超过阈值年龄(age)(例如,两周、一个月、六个月、一年等)的数据的表或者在阈值时间量(例如,一周、两周、一个月等)内未被访问的数据的表。然后,文件生成器110从所识别的表中的数据生成format2文件。
现在将参考图4至图7描述从表创建format2文件的示例操作。图4示出根据一些实施例的数据的示例表400。对于该示例,表400存储在数据库130中并且将被用于创建format2文件。如所示地,表400包括两列405和410以及二十四行数据。列405被配置为存储表示记录温度的日、月和年的日期值。列410被配置为存储表示温度(华氏度)的整数值。
操作开始于文件生成器110访问数据库130中的表400。接下来,文件生成器110将表400划分为行块。在该示例中,文件生成器110将表400划分为三个行块,每个行块包括八行数据。文件生成器110还将行块分成单独的列块(column chunk)(也称为片段)。图5示出根据一些实施例的图4中所示的表400被划分为行块。如所示地,表400被划分为三个行块。每个行块包括来自表400的八行。另外,图5示出列405分离到片段505-515并且列410分离到片段520-530。片段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通过在文件700中将文件格式ID 705写入为具有整数值“FMT2”的32位带符号整数而开始。接下来,文件生成器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中。在该示例中,日期值是64位整数,从1970年1月1日起以十分之一秒存储日期。对于片段505-515中的每个,文件生成器110使用整数编码方案对数据值进行编码。对于片段520-530中的每个,文件生成器110使用整数编码方案对整数值进行编码。
文件生成器110可以使用任何数量的不同整数编码方案。例如,第一编码方案是游程长度(runlength)编码方案,其中,使用与负值的Z字形(zigzag)编码耦合的可变长度量(VLQ)编码来存储值的出现次数和实际值。第二编码方案是按位编码方案,确定表示整数值序列中的值范围所需的最小位数。按位编码方案存储:用于存储值的数组的大小,用于表示值的位数以及使用最小位数表示的值的数组。可以使用两个VLQ编码值来存储用于存储值的数组的大小和用于表示值的位数。第三整数编码方案是delta游程长度编码方案,其中,使用VLQ编码方案存储整数值序列中的第一值,并且基于整数值序列中的该值与先前值之间的差(即,delta)来存储整数值序列中的每个后续值。使用游程长度编码方案(例如,第一编码方案)对delta进行编码。第四整数编码方案是delta按位编码方案,其中,使用VLQ编码方案存储整数值序列中的第一值,并且基于整数值序列中的该值和先前值之间的差(即,delta)存储整数值序列中的每个后续值。使用按位编码方案(例如,第二编码方案)对delta进行编码。
在一些实施例中,文件生成器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个整数值;vlq_size()接受值作为输入并且返回使用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游程长度编码方案将使用的字节数:
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是整数值序列中连续整数值之间的重复delta数,定义为集合{i|valuei+1–valuei=valuei+2–valuei+1}的大小;以及max_delta是整数值序列中连续整数值之间的最大delta,定义为max(abs(value2-value1),abs(value3-value2),abs(value3-value2),...,abs(valueN-valueN-1))。
对于第四整数编码方案,文件生成器110使用下面的等式(4)估计通过delta按位编码方案将使用的字节数:
delta_bit_encoding_bytes
=vlq_size(value1)+vlq_size(N)
+vlq_size(bitwidth_delta)+to_byte(bitwidthdelta*N)
其中,N是整数值序列中的值的数量,value1是整数值序列中的第一个值;vlq_size()接受值作为输入并且返回使用VLQ编码方案存储数据所需的字节数;bitwidth_delta定义为max(bits_needed(max_delta),bits_needed(min_delta)),其中,max_delta是整数值序列中连续整数值之间的最大delta,定义为max(abs(value2-value1),abs(value3-value2),abs(value4-value3),...,abs(valueN-valueN-1)),而min_delta是整数值序列中连续整数值之间的最小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通过写入与选择的整数编码方案相关联的值作为后续是片段中的编码值的VLQ编码值来存储用于特定片段的整数编码方案(例如,值0与游程长度编码方案相关联,值1与按位编码方案相关联,值为2与delta游程长度编码方案相关联,以及值3与delta按位编码方案相关联)。
在对片段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类型存储结构化查询语言(SQL)数据类型。
在为列405生成列元数据之后,文件生成器110使用无损压缩方案压缩列元数据,确定压缩列元数据是否小于数据的原始大小的阈值比值,以及相应地使用压缩列元数据或者原始未压缩列元数据存储在文件700中。接下来,文件生成器110根据字节数确定列元数据的未压缩大小,使用确定的未压缩大小来根据布局300格式化列元数据以及将它们写入文件700中。针对用于列410的列元数据,文件生成器110执行类似的操作。在该示例中,文件生成器110将列405的列元数据写入为文件700中的数据页710i,并且将列410的列元数据写入为文件700中的数据页710j。
一旦文件生成器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写入报头页作为文件700中的报头页715。文件生成器110还根据字节数确定报头页715的大小,并且将该值作为报头大小720存储在文件700中。在一些实施例中,文件生成器110使用64位整数存储报头大小720。然后,文件生成器110使用具有整数值“FMT2”的32位带符号整数将文件格式ID 725写入文件700中。最后,文件生成器110将文件700存储在文件存储器135中。
上述示例操作讨论了用于编码整数值的各种技术。本领域普通技术人员将理解,也可以编码其他类型的数据。例如,文件生成器110可以将一系列串值存储为以空值终止的串的连续数组,使用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)。可以从偏移810a-810n计算每个数据块805a-805n的大小。例如,通过从偏移810a的值减去偏移810b的值来计算块805a的大小,通过从偏移810b的值减去偏移810c的值来计算块805b的大小等。可以通过从偏移815的值减去偏移810n的值来计算块805n的大小。偏移820的数量被配置为存储偏移的总数,其包括偏移810a-810n和偏移815。在一些实施例中,使用64位整数存储偏移810a-810n、偏移815、偏移的数量820。
如上所述,文件生成器110可以存储串值序列(例如,来自列的片段)作为以空值终止的串的连续数组,并且使用VLQ编码方案对序列中的串值的数量进行编码。在布局800用于存储串值的一些实施例中,文件生成器110在第一数据块(例如,数据块805a)的开头处存储VLQ编码的串值的数量,随后是以空值终止的串的数组(也在第一数据块中)。文件生成器110还存储偏移数组,其在以空值终止的串的数组中存储每个串的偏移。偏移数组允许快速访问以空值终止的串的数组中的特定串,而无需按顺序迭代通过以空值终止的串的数组。在列具有空(NULL)的串值的一些情况下,文件生成器110存储单独的数据块以对空值进行编码。
在一些情况下,表的列的片段中的值可以包含空值。在布局800用于数据值序列的一些实施例中,文件生成器110将与空值相关联的信息存储在布局800的最后一个数据块(例如,数据块805n)中。如果列的片段不包括任何非空值,则文件生成器110将最后一个数据块存储为具有零字节的大小。如果列的片段确实包括空值,则文件生成器110将最后一个数据块中的布尔数组存储为8位整数数组,并且使用上述自动整数编码方案选择技术对数组进行编码。对于不存储空值的列片段中的每个行,文件生成器110将相对应的FALSE值存储在布尔数组中。对于存储空值的列的片段中的每个行,文件生成器110将相对应的TRUE值存储在布尔数组中。
上面解释的示例和实施例描述了从数据库中的数据创建format2文件。然而,本领域普通技术人员将理解,在一些实施例中,可以从其他数据源或数据流创建format2文件。例如,format2文件可以从存储在电子表格、文本文件等中的数据创建。
返回到图1,计算系统105可以处理对format2文件中存储的数据的查询。现在将参考图1和图5至图7描述处理查询的示例操作。该操作通过执行管理器115接收对存储在文件700中的数据的查询开始。可以从客户端设备(未示出)、在计算系统上操作的应用(未示出)、在计算系统105上执行的服务或处理(未示出)或能够向执行管理器115发送查询的任何其他设备、系统、组件、元件等接收查询。在该示例中,查询用于表400中的行,其中,列410中的值大于47且小于60。
当执行管理器115接收到查询时,执行管理器115基于查询生成执行计划。在一些实施例中,执行计划是用于执行查询的有序操作集。在生成执行计划之后,执行管理器115将执行计划发送到执行引擎120。在接收到执行计划时,执行引擎120执行该执行计划。为了在该示例中执行用于查询的执行计划,执行引擎120指示数据导入管理器125对用于表400中的行的列410应用过滤器,其中,列410中的值大于47且小于60。
一旦数据导入管理器125从执行引擎120接收到指令,数据导入管理器125就指示文件读取器130访问文件存储器135中的文件700。接下来,数据导入管理器125指示文件读取器130从文件700检索报头页715,存储列405的列元数据的数据页(即,数据页710i),存储列410的列元数据的数据页(即,数据页710j),以及存储列410的数据元数据620的数据页(即,数据页710b)。由于过滤器应用于列410而不是列405,因此不需要读取存储列405的数据元数据600的数据页(即,数据页710a)。
然后,数据导入管理器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的列元数据存储为文件700中的数据页710i,并且将列410的列元数据存储为文件700中的数据页710j。
然后,处理900在960生成报头页,该报头页包括:多个行中的总行数、多个行块中的每个行块中的行数以及对列元数据集合的引用。最后,处理900在970将文件中的报头页存储为单独的数据页。参考图1、图4和图7作为示例,文件生成器110将报头页作为报头页715存储在文件700中。
II.超集树数据结构
在部分I中,处理对format2文件的查询的示例操作描述了使用文件中的数据元数据来处理查询。计算系统105可以使用超集树数据结构来实施数据元数据。在一些实施例中,超集树数据结构是有根、完全和完整的二叉树。在一些这样的实施例中,超集树数据结构的根存储值(即,有根超集树数据结构),超集树数据结构中的每个节点具有零个或两个子节点(即,完全的超集树数据结构),以及超集树数据结构中的每个层级都是完全的,除了可能的最低层级(即,完整的超集树数据结构)。
在一些实施例中,为列生成的超集树数据结构具有与列的片段数相同数量的叶节点。文件生成器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还示出列405分离成片段1005-1020以及列410分离成片段1025-1040。片段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的超集树的高度为2。使用等式(6),文件生成器110计算列410的超集树的倒数第二层级中的叶节点的数量为0。使用等式(7),文件生成器110计算具有两个子节点的超集树的倒数第二层级中的节点的数量为2。使用等式(8),文件生成器110计算列410的超集树中的节点总数为7。
图11示出根据一些实施例的图10中所示的列的超集树1100。在该示例中,文件生成器110为列410生成超集树1100。如所示地,超集树1100具有:四个叶节点、高度为2、倒数第二层级中的零个叶节点、在具有两个子节点的倒数第二层级中的两个节点以及共有七个节点。在生成超集树1100之后,文件生成器110以宽度优先(breadth-first)顺序串行化超集树1100的节点,并且以与上面在部分I中描述的相同方式将其作为数据页710b存储在文件700中(例如,使用图8中所示的格式和布局300)。
如图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中的数据的查询。可以从客户端设备(未示出)、在计算系统上操作的应用(未示出),在计算系统105上执行的服务或处理(未示出),或能够向执行管理器115发送查询的任何其他设备、系统、组件、元件等接收查询。对于该示例,对表400中的行查询,其中,列410中的值大于34且小于49。
在接收到查询时,执行管理器115基于该查询生成执行计划。接下来,执行管理器115将执行计划发送到执行引擎120。当执行引擎120接收到执行计划时,执行引擎120执行该执行计划。在该示例中,执行引擎120通过指示数据导入管理器125对用于表400中的行的列410应用过滤器来执行查询的执行计划,其中,列410中的值大于34且小于49。
当数据导入管理器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识别对应于片段1030中满足查询的行的片段1010中的行。然后,数据导入管理器125在查询结果中包括片段1010中的识别的行、片段1030中的识别的行、片段1005中的所有行以及片段1025中的所有行,并且将查询结果发送到执行引擎。作为响应,执行引擎120将查询结果转发给执行管理器115,执行管理器115将其转发到执行管理器115从其接收查询的元件。
上述使用超集树数据结构处理对format2文件中存储的数据的查询的示例操作展示了数据导入管理器125如何能够基于存储在超集树数据结构中的数据一次消除/跳过多个片段。此外,上述示例操作中的超集树数据结构基于底层片段中的整数值存储整数值的范围(即,间隔)。在一些实施例中,超集树数据结构可以存储基于存储在列中的串值生成的布隆(bloom)过滤器。
现在将参考图1、图12和图13描述使用超集树数据结构处理查询的另一示例操作。图12示出根据一些实施例的表1200的示例列1205。出于简化和解释的目的,图12仅示出了表1200的列1205。本领域普通技术人员将理解,表1200中可以包括任意数量的不同列。在该示例中,文件生成器110将表1200划分为四个行块,并且将行块分成片段1210-1225。每个片段中都具有一个串值。
文件生成器110使用等式(5)-(8)来生成列1205的超集树。由于列410具有四个片段,因此文件生成器110确定列410的超集树将具有四个叶节点。基于等式(5),文件生成器110计算列1205的超集树的高度为2。基于等式(6),文件生成器110计算列1205的超集树的倒数第二层级中的叶节点的数量为零。基于等式(7),文件生成器110计算具有两个子节点的列1205的超集树的倒数第二层级中的节点的数量为2。基于等式(8),文件生成器110计算列1205的超集树中的节点总数为7。
图13示出根据一些实施例的图12中所示的列1205的超集树1300。对于该示例,文件生成器110为列1205生成超集树1300。如图所示,超集树1300具有:四个叶节点、高度为2、倒数第二层级中的零个叶节点、在具有两个子节点的倒数第二层级中的两个节点以及共有七个节点。一旦生成超集树1300,文件生成器110以宽度优先顺序串行化超集树1300的节点,并以与上面在部分I中描述的相同方式将其作为数据页存储在format2文件中(例如,使用图8所示的格式和布局300)。
如图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位的位数组,被配置为存储来自两个散列(hash)函数的散列值。可以使用任何数量的不同散列函数。散列函数的示例包括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的数据的format2文件中存储的数据的查询。可以从客户端设备(未示出),计算系统上操作的应用(未示出),计算系统105上执行的服务或处理(未示出),或能够向执行管理器115发送查询的任何其他设备、系统、组件、元件等接收查询。在该示例中,对具有列1205的表1200中的行进行查询,其中,列1205中的值等于串“United States”。
在接收到查询之后,执行管理器115基于该查询生成执行计划。然后,执行管理器115将执行计划发送到执行引擎120。在接收到执行计划时,执行引擎120执行该执行计划。在该示例中,为了执行查询的执行计划,执行引擎120指示数据导入管理器125对用于表1200中的行的列1205应用过滤器,其中,值具有等于“United States”的串值。响应于该指令,数据导入管理器125指示文件读取器130访问在存储表1200的文件存储器135中存储的format2文件。接下来,数据导入管理器125指示文件读取器130从文件检索:报头页、存储列1205的列元数据的数据页以及存储列1205的数据元数据的数据页。
然后,数据导入管理器125基于列1205的数据元数据生成超集树1300。此外,数据导入管理器125使用与用于生成超集树1300的布隆过滤器相同的两个散列函数,来基于查询中的串生成布隆过滤器(也称为查询布隆过滤器)。两个散列函数从查询中指定的串“United States”生成值“1”和“6”。因此,查询布隆过滤器中的第一位和第六位被设置为“1”(即,1000 0100)。
接下来,数据导入管理器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可以接收对列410中的值大于34且小于49的图10的表400中的记录的查询。
接下来,处理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位浮点值(例如,电气和电子工程师协会(IEEE)64位浮点值)存储要编码的浮点值。图16示出根据一些实施例的图15中所示的浮点值的十六进制表示。具体地,图16示出表1600,其包括对应于表1500中的浮点值的IEEE 64位浮点值(例如,双精度)的十六进制值。
示例操作开始于文件生成器110接收以format2文件存储表1500的请求。文件生成器110以与上面在部分I中描述的方式类似的方式生成用于表1500的format2文件。为了对列1505中的浮点值进行编码,文件生成器110确定用于将浮点值缩放到整数值的最低范围的缩放值。在一些实施例中,缩放值是10的幂(power of 10)。在该示例中,文件生成器110通过将列1505中的每个值乘以10的一次幂来确定缩放值,并且检查所有相乘后的值是否是整数。如果不是,则文件生成器110继续将列1505中的每个值与10的增加的幂相乘,直到列1505中的相乘后的值是整数。也就是说,文件生成器110将列1505中的每个值乘以10的二次幂并检查所有相乘后的值是否是整数,将列1505中的每个值乘以10的三次幂并检查所有相乘后的值是否是整数等。对于该示例,文件生成器110将缩放值确定为100,因为将列1505中的每个值乘以100产生所有整数值。一旦文件生成器110确定了缩放值,文件生成器110将列1505中的每个浮点值乘以缩放值,并将缩放的浮点值转换为缩放的浮点值的整数表示。图17示出根据一些实施例的图15中所示的浮点值的缩放整数表示。具体地,图17示出表1700,包括在文件生成器110缩放浮点值并将它们转换为整数值之后表1500中的相对应的浮点值的整数值。
在该示例中,需要九个位来对表1700中的所有整数值进行编码。在一些实施例中,可以通过使用一位用于符号位来解决负值。在其他实施例中,可以通过使用也利用附加位的Z字形编码来解决负值。然而,文件生成器110确定需要考虑负值的一个附加位来存储表1700中的整数值。因此,文件生成器110确定需要十位来存储表1700中的每个整数值。文件生成器110也将缩放值存储在format2文件中。
如上所述,在一些实施例中,缩放值是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中描述的类似的方式将编码的整数值存储在format2文件的数据页中(例如,使用图8中所示的格式和布局300)。
在一些情况下,计算系统105可以接收对表1500的查询并且需要访问列1505中的数据。在这种情况下,数据导入管理器125指示文件读取器130从文件存储器135检索包含表1500的文件。如果整数编码方案用于编码整数值,则数据导入管理器125使用它来解码整数值。然后,数据导入管理器125将整数值转换为整数值的浮点表示。接下来,数据导入管理器125通过提取整数指数并将值10提高到整数指数的幂来计算缩放值。数据导入管理器125使用计算的缩放值通过将每个浮点值乘以计算的缩放值来对浮点值取消缩放。得到的浮点值是表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中实施。此外,计算机系统1900可以实施许多上述操作、方法和/或处理(例如,处理900、处理1400和处理1800)。如图19所示,计算机系统1900包括处理子系统1902,其经由总线子系统1926与输入/输出(I/O)子系统1908、存储子系统1910和通信子系统1924通信。
总线子系统1926被配置为促进计算机系统1900的各种组件和子系统之间的通信。尽管图19中将总线子系统1926示出为单个总线,但是本领域普通技术人员将理解,总线子系统1926可以被实施为多个总线。总线子系统1926可以是使用各种总线架构中的任何总线架构的若干类型的总线结构(例如,存储器总线或存储器控制器、外围总线、本地总线等)中的任何。总线架构的示例可以包括工业标准体系结构(ISA)总线、微通道体系结构(MCA)总线、增强型ISA(EISA)总线、视频电子标准协会(VESA)本地总线、外围部件互连(PCI)总线、通用串行总线(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可以包括任何数量的用户接口输入设备和/或用户接口输出设备。用户接口输入设备可以包括:键盘、指点设备(例如,鼠标、轨迹球等)、触摸板、结合到显示器中的触摸屏、滚轮、点击轮、拨盘、按钮、开关、小键盘、具有语音识别系统的音频输入设备、麦克风、图像/视频捕获设备(例如,网络摄像头、图像扫描仪、条形码读取器等)、运动感测设备、手势识别设备、眼睛姿势(例如,闪烁)识别设备、生物识别输入设备和/或任何其他类型的输入设备。
用户接口输出设备可以包括:视觉输出设备(例如,显示子系统、指示灯等)、音频输出设备(例如,扬声器、耳机等)等。显示子系统的示例可以包括阴极射线管(CRT)、平板设备(例如,液晶显示器(LCD)、等离子显示器等)、投影设备、触摸屏和/或用于从计算机系统1900向用户或另一个设备(例如,打印机)输出信息的任何其他类型的设备和机制。
如图19所示,存储子系统1910包括系统存储器1912、计算机可读存储介质1920和计算机可读存储介质读取器1922。系统存储器1912可以被配置为存储以程序指令的形式可由处理子系统1902加载和执行的软件,以及在执行程序指令期间生成的数据。在一些实施例中,系统存储器1912可以包括易失性存储器(例如,随机存取存储器(RAM))和/或非易失性存储器(例如,只读存储器(ROM)、可编程只读存储器(PROM)、可擦除可编程只读存储器(EPROM)、电可擦除可编程只读存储器(EEPROM)、闪存等)。系统存储器1912可以包括不同类型的存储器,诸如静态随机存取存储器(SRAM)和/或动态随机存取存储器(DRAM)。在一些实施例中,系统存储器1912可以包括基本输入/输出系统(BIOS),其被配置为存储基本例程以便于在计算机系统1900内的元件之间传送信息(例如,在启动期间)。这样的BIOS可以存储在ROM(例如,ROM芯片)、闪存或可以被配置为存储BIOS的任何其他类型的存储器中。
如图19所示,系统存储器1912包括应用程1914、程序数据1916和操作系统(OS)1918。OS 1918可以是以下之一:各种版本的Microsoft Windows,Apple Mac OS,Apple OSX,Apple mac OS和/或Linux操作系统,各种商用UNIX或类UNIX操作系统(包括但不限于各种GNU/Linux操作系统,谷歌OS等)和/或移动操作系统(诸如Apple iOS,Windows Phone,Windows Mobile,Android,BlackBerry OS,Blackberry 10和Palm OS,WebOS操作系统)。
计算机可读存储介质1920可以是配置成存储软件(例如,程序、代码模块、数据构造、指令等)的非暂时性计算机可读介质。上述许多组件(例如,文件生成器110、执行管理器115、执行引擎120、数据导入管理器125和文件读取器130)和/或处理(例如,处理900、处理1400和处理1800)可以实施为软件,当由处理器或处理单元(例如,处理子系统1902的处理器或处理单元)执行时,执行这些组件和/或处理的操作。存储子系统1910还可以存储执行软件使用的数据或在软件执行期间生成的数据。
存储子系统1910还可以包括计算机可读存储介质读取器1922,其被配置为与计算机可读存储介质1920通信。一起地并且可选地,与系统存储器1912组合,计算机可读存储介质1920可以全面地表示远程、本地、固定的和/或可移动的存储设备加上用于临时和/或更永久地包含、存储、传输和检索计算机可读信息的存储介质。
计算机可读存储介质1920可以是本领域已知或使用的任何适当的介质,包括诸如以用于存储和/或传输信息的任何方法或技术实施的易失性、非易失性、可移动、不可移动介质的存储介质。这种存储介质的示例包括RAM、ROM、EEPROM、闪存或其他存储器技术,光盘只读存储器(CD-ROM)、数字通用盘(DVD)、蓝光盘(BD)、磁带盒、磁带、磁盘存储(例如,硬盘驱动器)、Zip驱动器、固态驱动器(SSD)、闪存卡(例如,安全数字(SD)卡,CompactFlash卡等)、USB闪存驱动器或任何其他类型的计算机可读存储介质或设备。
通信子系统1924用作从其他设备、计算机系统和网络接收数据并将数据发送到其他设备、计算机系统和网络的接口。例如,通信子系统1924可以允许计算机系统1900经由网络(例如,个域网(PAN)、局域网(LAN)、存储区域网络(SAN)、校园区域网络(CAN)、城域网(MAN)、广域网(WAN)、全球区域网络(GAN)、内联网、互联网、任意数量的不同类型网络的网络等)连接到一个或多个设备。通信子系统1924可以包括任何数量的不同通信组件。这样的组件的示例可以包括用于访问无线语音和/或数据网络(例如,使用诸如2G、3G、4G、5G等的蜂窝技术、诸如Wi-Fi、蓝牙、ZigBee等的无线数据技术,或其任何组合)的射频(RF)收发器组件,全球定位系统(GPS)接收器组件和/或其他组件。在一些实施例中,除了配置用于无线通信的组件之外或代替配置用于无线通信的组件,通信子系统1924可以提供配置用于有线通信(例如,以太网)的组件。
本领域普通技术人员将认识到图19中所示的架构仅是计算机系统1900的示例架构,并且计算机系统1900可以具有比所示更多或更少的组件,或者具有不同的组件配置。图19中所示的各种组件可以以硬件、软件、固件或其任何组合来实施,包括一个或多个信号处理和/或专用集成电路。
图20示出用于实施上述各种实施例的示例性计算设备2000。例如,计算设备2000可以用于实施计算系统105。计算设备2000可以是蜂窝电话,智能电话,可穿戴设备,活动跟踪器或管理器,平板式设备,个人数字助理(PDA),媒体播放器,或任何其他类型的移动计算设备或其组合。文件生成器110,执行管理器115,执行引擎120,数据导入管理器125,文件读取器130或其组合的部分或全部元件可以包括在计算设备2000中或者在计算设备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)、电可擦除可编程只读存储器(EEPROM)、闪存等)或其组合。
I/O系统2008负责通过各种组件接收输入并通过各种组件提供输出。如该示例所示,I/O系统2008包括显示器2010、一个或多个传感器2012、扬声器2014和麦克风2016。显示器2010被配置为输出视觉信息(例如,由处理器2004生成的和/或渲染的图形用户界面(GUI))。在一些实施例中,显示器2010是触摸屏,被配置为还接收基于触摸的输入。显示器2010可以使用液晶显示器(LCD)技术、发光二极管(LED)技术、有机LED(OLED)技术、有机电致发光(OEL)技术或任何其他类型的显示技术来实实施。传感器2012可以包括任何数量的不同类型的传感器,用于测量物理量(例如、温度、力、压力、加速度、取向、光、辐射等)。扬声器2014被配置为输出音频信息,而麦克风2016被配置为接收音频输入。本领域普通技术人员将理解,I/O系统2008可以包括任何数量的额外的、更少的和/或不同的组件。例如,I/O系统2008可以包括用于接收输入的小键盘或键盘,用于发送数据,接收数据和/或电力和/或与另一个设备或组件通信的端口,用于捕获照片和/或视频的图像捕获组件等。
通信系统2018用作从其他设备、计算机系统和网络接收数据并将数据发送到其他设备、计算机系统和网络的接口。例如,通信系统2018可以允许计算机系统1900经由网络(例如、个域网(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可以是以下之一:各种版本的MicrosoftWindows、Apple Mac OS、Apple OS X、Apple mac OS和/或Linux操作系统、各种商用UNIX或类UNIX操作系统(包括但不限于各种GNU/Linux操作系统、谷歌OS等)和/或移动操作系统(诸如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的服务器和系统与客户的本地服务器和系统不同。例如,云计算系统2100可以托管应用,并且客户端设备2102-2108之一的用户可以经由网络2110订购和使用该应用。
应用2114可以包括被配置为在云计算系统2112(例如,计算机系统或在计算机系统上运行的虚拟机)上执行并且经由客户端设备2102-2108被访问、控制、管理等的软件应用。在一些实施例中,应用2114可以包括服务器应用和/或中间层应用(例如,HTTP(超文本传输协议)服务器应用,FTP(文件传输协议)服务器应用,CGI(公共网关接口)服务器应用,JAVA服务器应用等)。服务2116是软件组件、模块、应用等,其被配置为在云计算系统2112上执行并经由网络2110向客户端设备2102-2108提供功能。服务2116可以是基于web的服务或按需云服务。
数据库2118被配置为存储和/或管理由应用2114,服务2116和/或客户端设备2102-2108访问的数据。例如,数据库135可以存储在数据库2118中。数据库2118可以驻留在云计算系统2112本地的非暂时性存储介质上(和/或驻留在云计算系统2112本地的非暂时性存储介质中),驻留在存储区域网络(SAN)中,或驻留在本地位于远离云计算系统2112的非暂时性存储介质上。在一些实施例中,数据库2118可以包括由关系数据库管理系统(RDBMS)管理的关系数据库。数据库2118可以是面向列的数据库,面向行的数据库或其组合。在一些实施例中,数据库2118中的部分或全部是存储器内数据库。也就是说,在一些这样的实施例中,数据库2118的数据在存储器(例如,随机存取存储器(RAM))中存储和管理。
客户端设备2102-2108被配置为执行和操作经由网络2110与应用2114,服务2116和/或数据库2118通信的客户端应用(例如,web浏览器,专有客户端应用等)。这样,客户端设备2102-2108可以访问由应用2114、服务2116和数据库2118提供的各种功能,而应用2114、服务2116和数据库2118在云计算系统2100上操作(例如,托管)。如上面参考图19和图20所述,客户端设备2102-2108可以是计算机系统1900或计算设备2000。尽管系统2100被示出具有四个客户端设备,但是可以支持任何数量的客户端设备。
网络2110可以是被配置为使用各种网络协议中的任何一种促进客户端设备2102-2108和云计算系统2112之间的数据通信的任何类型的网络。网络2110可以是个域网(PAN)、局域网(LAN)、存储区域网络(SAN)、校园区域网络(CAN)、城域网(MAN)、广域网(WAN)、全球区域网络(GAN)、内联网、互联网、任意数量的不同类型网络的网络等。
以上描述示出了本发明的各种实施例以及可以如何实施本发明的各方面的示例。以上示例和实施例不应被认为是唯一的实施例,并且用于说明由所附权利要求限定的本发明的灵活性和优点。基于以上公开内容和所附权利要求、其他布置、实施例、实施方式和等同物对于本领域技术人员来说是明显的,并且可以在不脱离由权利要求限定的本发明的精神和范围的情况下使用。
Claims (20)
1.一种存储由设备的至少一个处理单元可执行的程序的非暂时性机器可读介质,所述程序包括用于以下的指令集:
接收从包括多个行的表创建用于存储数据的文件的请求,所述多个行中的每个行被划分为列集合,所述列集合中的每个列被配置为存储一类型的数据;
将多个行划分为多个行块,所述多个行块中的每个行块包括所述多个行的一部分;
对于多个行块中的每个行块的列集合中的每个列:
基于存储在列中的数据类型对行块的列中的数据进行编码,和
将编码数据作为单独的数据页存储在文件中;
生成列集合的列元数据集合,每个列元数据包括存储在列集合中的相对应的列中的数据类型、用于对相对应的列中的数据进行编码的编码方案以及对用于相对应的列的多个行块的引用;
将每个列元数据作为单独的数据页存储在文件中;
生成报头页,包括多个行中的总行数、多个行块中的每个行块中的行数以及对列元数据集合的引用;以及
将报头页作为单独的数据页存储在文件中。
2.根据权利要求1所述的非暂时性机器可读介质,其中,所述程序还包括用于以下的指令集:
生成列集合的数据元数据集合,每个数据元数据包括描述存储在列集合中的相对应的列中的值的数据;以及
将数据元数据集合中的每个数据元数据作为单独的数据页存储在文件中。
3.根据权利要求1所述的非暂时性机器可读介质,其中,所述程序还包括用于以下的指令集:
对于多个行块中的每个行块的列集合中的每个列:
压缩编码数据,以及
作为单独的数据页存储编码和压缩数据。
4.根据权利要求1所述的非暂时性机器可读介质,其中,列集合中的列被配置为存储整数值作为数据类型,其中,所述程序还包括用于以下的指令集:
对于多个行块中的每个行块的列:
基于存储在行块的列中的数据,从多个整数编码方案中自动地选择整数编码方案;以及
使用选择的整数编码方案对行块的列中的数据进行编码。
5.根据权利要求4所述的非暂时性机器可读介质,其中,使用多个整数编码方案中的不同整数编码方案对不同行块的列中的数据进行编码。
6.根据权利要求1所述的非暂时性机器可读介质,其中,列集合中的列被配置为存储串值作为数据类型,其中,所述程序还包括用于以下的指令集:
对于多个行块中的每个行块的列,使用串编码方案对行块的列中的数据进行编码。
7.根据权利要求1所述的非暂时性机器可读介质,其中,所述程序还包括:用于在文件的每端处存储文件格式标识符的指令集。
8.一种方法,包括:
接收从包括多个行的表创建用于存储数据的文件的请求,所述多个行中的每个行被划分为列集合,所述列集合中的每个列被配置为存储一类型的数据;
将多个行划分为多个行块,所述多个行块中的每个行块包括所述多个行的一部分;
对于多个行块中的每个行块的列集合中的每个列:
基于存储在列中的数据类型对行块的列中的数据进行编码,和
将编码数据作为单独的数据页存储在文件中;
生成列集合的列元数据集合,每个列元数据包括存储在列集合中的相对应的列中的数据类型、用于对相对应的列中的数据进行编码的编码方案以及对用于相对应列的多个行块的引用;
将每个列元数据作为单独的数据页存储在文件中;
生成报头页,包括多个行中的总行数、多个行块中的每个行块中的行数以及对列元数据集合的引用;以及
将报头页作为单独的数据页存储在文件中。
9.根据权利要求8所述的方法,还包括:
生成列集合的数据元数据集合,每个数据元数据包括描述存储在列集合中的相对应的列中的值的数据;以及
将数据元数据集合中的每个数据元数据作为单独的数据页存储在文件中。
10.根据权利要求8所述的方法,还包括:
对于多个行块中的每个行块的列集合中的每个列:
压缩编码数据,以及
作为单独的数据页存储编码和压缩数据。
11.根据权利要求8所述的方法,其中,列集合中的列被配置为存储整数值作为数据类型,其中,所述方法还包括:
对于多个行块中的每个行块的列:
基于存储在行块的列中的数据,从多个整数编码方案中自动地选择整数编码方案;以及
使用选择的整数编码方案对行块的列中的数据进行编码。
12.根据权利要求11所述的方法,其中,使用多个整数编码方案中的不同整数编码方案对不同行块的列中的数据进行编码。
13.根据权利要求8所述的方法,其中,列集合中的列被配置为存储串值作为数据类型,其中,所述方法还包括:
对于多个行块中的每个行块的列,使用串编码方案对行块的列中的数据进行编码。
14.根据权利要求8所述的方法,还包括:在文件的每端处存储文件格式标识符。
15.一种系统,包括:
处理单元集;以及
存储指令的非暂时性机器可读介质,所述指令由处理单元集中的至少一个处理单元执行时,使至少一个处理单元:
接收从包括多个行的表创建用于存储数据的文件的请求,所述多个行中的每个行被划分为列集合,所述列集合中的每个列被配置为存储一类型的数据;
将多个行划分为多个行块,所述多个行块中的每个行块包括所述多个行的一部分;
对于多个行块中的每个行块的列集合中的每个列:
基于存储在列中的数据类型对行块的列中的数据进行编码,和
将编码数据作为单独的数据页存储在文件中;
生成列集合的列元数据集合,每个列元数据包括存储在列集合中的相对应的列中的数据类型、用于对相对应列的中的数据进行编码的编码方案以及对用于相对应的列的多个行块的引用;
将每个列元数据作为单独的数据页存储在文件中;
生成报头页,包括多个行中的总行数、多个行块中的每个行块中的行数以及对列元数据集合的引用;以及
将报头页作为单独的数据页存储在文件中。
16.根据权利要求15所述的系统,其中,指令还使至少一个处理单元:
生成列集合的数据元数据集合,每个数据元数据包括描述存储在列集合中的相对应的列中的值的数据;以及
将数据元数据集合中的每个数据元数据作为单独的数据页存储在文件中。
17.根据权利要求15所述的系统,其中,指令还使至少一个处理单元:
对于多个行块中的每个行块的列集合中的每个列:
压缩编码数据,以及
作为单独的数据页存储编码和压缩数据。
18.根据权利要求15所述的系统,其中,列集合中的列被配置为存储整数值作为数据类型,其中,指令还使至少一个处理单元:
对于多个行块中的每个行块的列:
基于存储在行块的列中的数据,从多个整数编码方案中自动地选择整数编码方案;以及
使用选择的整数编码方案对行块的列中的数据进行编码。
19.根据权利要求18所述的系统,其中,使用多个整数编码方案中的不同整数编码方案对不同行块的列中的数据进行编码。
20.根据权利要求15所述的系统,其中,列集合中的列被配置为存储串值作为数据类型,其中,指令还使至少一个处理单元:
对于多个行块中的每个行块的列,使用串编码方案对行块的列中的数据进行编码。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US16/124,149 US11030149B2 (en) | 2018-09-06 | 2018-09-06 | File format for accessing data quickly and efficiently |
US16/124,149 | 2018-09-06 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110879807A true CN110879807A (zh) | 2020-03-13 |
CN110879807B CN110879807B (zh) | 2023-07-21 |
Family
ID=67513345
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910700762.5A Active CN110879807B (zh) | 2018-09-06 | 2019-07-31 | 用于快速地并且有效地访问数据的文件格式 |
Country Status (3)
Country | Link |
---|---|
US (1) | US11030149B2 (zh) |
EP (1) | EP3620930B1 (zh) |
CN (1) | CN110879807B (zh) |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112019531A (zh) * | 2020-08-18 | 2020-12-01 | 华工正源智能终端(孝感)有限公司 | 基于http协议的文件压缩方法、系统及电子设备 |
CN112084250A (zh) * | 2020-09-15 | 2020-12-15 | 深圳市宝能投资集团有限公司 | 数据存储方法、数据查询方法和电子设备 |
CN112506924A (zh) * | 2020-11-30 | 2021-03-16 | 北京百度网讯科技有限公司 | 数据存储方法、数据查询方法、相关装置及车载设备 |
CN113886056A (zh) * | 2021-12-09 | 2022-01-04 | 飞天诚信科技股份有限公司 | 一种mac os系统下访问蓝牙设备的方法及系统 |
CN115934730A (zh) * | 2023-01-09 | 2023-04-07 | 阿里云计算有限公司 | 数据处理方法和装置、介质和计算机设备 |
Families Citing this family (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US11163756B2 (en) | 2019-04-16 | 2021-11-02 | Snowflake Inc. | Querying over external tables in database systems |
US11681676B2 (en) * | 2021-06-24 | 2023-06-20 | Sap Se | Compression determination for column store |
US20230004533A1 (en) * | 2021-07-01 | 2023-01-05 | Microsoft Technology Licensing, Llc | Hybrid intermediate stream format |
US11860951B2 (en) | 2021-10-01 | 2024-01-02 | Micro Focus Llc | Optimization of a file format |
CN115617878B (zh) * | 2022-11-17 | 2023-03-10 | 浪潮电子信息产业股份有限公司 | 一种数据查询方法、系统、装置、设备及计算机存储介质 |
Citations (14)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20080071818A1 (en) * | 2006-09-18 | 2008-03-20 | Infobright Inc. | Method and system for data compression in a relational database |
US20080294863A1 (en) * | 2007-05-21 | 2008-11-27 | Sap Ag | Block compression of tables with repeated values |
CN101656094A (zh) * | 2009-09-25 | 2010-02-24 | 杭州华三通信技术有限公司 | 数据存储方法和存储设备 |
FR2941580A1 (fr) * | 2009-01-23 | 2010-07-30 | Alcatel Lucent | Procede de codage de donnees a double entrelacement de symboles de parite, pour une infrastructure radio, et codec associe |
CN101876983A (zh) * | 2009-04-30 | 2010-11-03 | 国际商业机器公司 | 数据库分区方法与系统 |
CN101876947A (zh) * | 2009-04-30 | 2010-11-03 | 国际商业机器公司 | 用于存储数据的方法及其系统 |
US20100281004A1 (en) * | 2009-04-30 | 2010-11-04 | Oracle International Corporation | Storing compression units in relational tables |
CN101937448A (zh) * | 2009-06-28 | 2011-01-05 | Sap股份公司 | 用于主存储器列存储装置的基于字典的保持顺序的串压缩 |
CN103678401A (zh) * | 2012-09-21 | 2014-03-26 | 金蝶软件(中国)有限公司 | 基于元数据实现报表分组汇总的方法和装置 |
EP3136607A1 (en) * | 2015-08-26 | 2017-03-01 | Institute of Mathematics and Computer Science, University of Latvia | A method and a system for encoding and decoding of suffix tree and searching within encoded suffix tree |
US20170177368A1 (en) * | 2015-12-17 | 2017-06-22 | Charles Stark Draper Laboratory, Inc. | Techniques for metadata processing |
CN107153588A (zh) * | 2017-05-12 | 2017-09-12 | 成都优孚达信息技术有限公司 | 数据编码存储方法 |
CN108243256A (zh) * | 2018-01-19 | 2018-07-03 | 网宿科技股份有限公司 | 一种数据存储方法、编码设备及解码设备 |
US10019457B1 (en) * | 2013-01-22 | 2018-07-10 | Amazon Technologies, Inc. | Multi-level compression for storing data in a data store |
Family Cites Families (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7590641B1 (en) * | 2005-04-04 | 2009-09-15 | Qd Technology, Llc | Selecting various algorithms to compress columns of analytic data in a read-only relational database in a manner that allows decompression of the compressed data using minimal system resources |
US8832045B2 (en) * | 2006-04-07 | 2014-09-09 | Data Storage Group, Inc. | Data compression and storage techniques |
US8108361B2 (en) * | 2008-07-31 | 2012-01-31 | Microsoft Corporation | Efficient column based data encoding for large-scale data storage |
US8402071B2 (en) * | 2009-06-19 | 2013-03-19 | Aptare, Inc. | Catalog that stores file system metadata in an optimized manner |
US8832142B2 (en) * | 2010-08-30 | 2014-09-09 | Oracle International Corporation | Query and exadata support for hybrid columnar compressed data |
US8572126B2 (en) * | 2010-06-25 | 2013-10-29 | Educational Testing Service | Systems and methods for optimizing very large n-gram collections for speed and memory |
US8838551B2 (en) * | 2011-10-21 | 2014-09-16 | International Business Machines Corporation | Multi-level database compression |
US8751493B2 (en) * | 2012-04-23 | 2014-06-10 | Google Inc. | Associating a file type with an application in a network storage service |
CN102768676B (zh) * | 2012-06-14 | 2014-03-12 | 腾讯科技(深圳)有限公司 | 一种格式未知文件的处理方法和装置 |
US9286336B2 (en) | 2013-03-12 | 2016-03-15 | Sap Se | Unified architecture for hybrid database storage using fragments |
US9305041B2 (en) * | 2014-01-06 | 2016-04-05 | International Business Machines Corporation | Compression of serialized B-tree data |
US10963377B2 (en) * | 2016-04-29 | 2021-03-30 | Hewlett Packard Enterprise Development Lp | Compressed pages having data and compression metadata |
-
2018
- 2018-09-06 US US16/124,149 patent/US11030149B2/en active Active
-
2019
- 2019-07-30 EP EP19189021.9A patent/EP3620930B1/en active Active
- 2019-07-31 CN CN201910700762.5A patent/CN110879807B/zh active Active
Patent Citations (14)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20080071818A1 (en) * | 2006-09-18 | 2008-03-20 | Infobright Inc. | Method and system for data compression in a relational database |
US20080294863A1 (en) * | 2007-05-21 | 2008-11-27 | Sap Ag | Block compression of tables with repeated values |
FR2941580A1 (fr) * | 2009-01-23 | 2010-07-30 | Alcatel Lucent | Procede de codage de donnees a double entrelacement de symboles de parite, pour une infrastructure radio, et codec associe |
US20100281004A1 (en) * | 2009-04-30 | 2010-11-04 | Oracle International Corporation | Storing compression units in relational tables |
CN101876983A (zh) * | 2009-04-30 | 2010-11-03 | 国际商业机器公司 | 数据库分区方法与系统 |
CN101876947A (zh) * | 2009-04-30 | 2010-11-03 | 国际商业机器公司 | 用于存储数据的方法及其系统 |
CN101937448A (zh) * | 2009-06-28 | 2011-01-05 | Sap股份公司 | 用于主存储器列存储装置的基于字典的保持顺序的串压缩 |
CN101656094A (zh) * | 2009-09-25 | 2010-02-24 | 杭州华三通信技术有限公司 | 数据存储方法和存储设备 |
CN103678401A (zh) * | 2012-09-21 | 2014-03-26 | 金蝶软件(中国)有限公司 | 基于元数据实现报表分组汇总的方法和装置 |
US10019457B1 (en) * | 2013-01-22 | 2018-07-10 | Amazon Technologies, Inc. | Multi-level compression for storing data in a data store |
EP3136607A1 (en) * | 2015-08-26 | 2017-03-01 | Institute of Mathematics and Computer Science, University of Latvia | A method and a system for encoding and decoding of suffix tree and searching within encoded suffix tree |
US20170177368A1 (en) * | 2015-12-17 | 2017-06-22 | Charles Stark Draper Laboratory, Inc. | Techniques for metadata processing |
CN107153588A (zh) * | 2017-05-12 | 2017-09-12 | 成都优孚达信息技术有限公司 | 数据编码存储方法 |
CN108243256A (zh) * | 2018-01-19 | 2018-07-03 | 网宿科技股份有限公司 | 一种数据存储方法、编码设备及解码设备 |
Non-Patent Citations (1)
Title |
---|
谢平: "存储系统重构优化技术研究", 《智能处理与应用》 * |
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112019531A (zh) * | 2020-08-18 | 2020-12-01 | 华工正源智能终端(孝感)有限公司 | 基于http协议的文件压缩方法、系统及电子设备 |
CN112084250A (zh) * | 2020-09-15 | 2020-12-15 | 深圳市宝能投资集团有限公司 | 数据存储方法、数据查询方法和电子设备 |
CN112506924A (zh) * | 2020-11-30 | 2021-03-16 | 北京百度网讯科技有限公司 | 数据存储方法、数据查询方法、相关装置及车载设备 |
CN113886056A (zh) * | 2021-12-09 | 2022-01-04 | 飞天诚信科技股份有限公司 | 一种mac os系统下访问蓝牙设备的方法及系统 |
CN113886056B (zh) * | 2021-12-09 | 2022-03-18 | 飞天诚信科技股份有限公司 | 一种mac os系统下访问蓝牙设备的方法及系统 |
CN115934730A (zh) * | 2023-01-09 | 2023-04-07 | 阿里云计算有限公司 | 数据处理方法和装置、介质和计算机设备 |
Also Published As
Publication number | Publication date |
---|---|
CN110879807B (zh) | 2023-07-21 |
US11030149B2 (en) | 2021-06-08 |
EP3620930B1 (en) | 2022-03-02 |
EP3620930A1 (en) | 2020-03-11 |
US20200081993A1 (en) | 2020-03-12 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110879807B (zh) | 用于快速地并且有效地访问数据的文件格式 | |
CN110879854B (zh) | 使用超集树数据结构搜索数据 | |
US9025892B1 (en) | Data record compression with progressive and/or selective decomposition | |
US11256696B2 (en) | Data set compression within a database system | |
US9805079B2 (en) | Executing constant time relational queries against structured and semi-structured data | |
US7188118B2 (en) | System and method for detecting file content similarity within a file system | |
US9043293B2 (en) | Table boundary detection in data blocks for compression | |
CN110874346B (zh) | 浮点值的压缩方案 | |
US20170177597A1 (en) | Biological data systems | |
US11681679B2 (en) | Systems and methods for performing tree-structured dataset operations | |
WO2019047628A1 (zh) | 海量图片处理方法、装置、电子设备及存储介质 | |
US20240126762A1 (en) | Creating compressed data slabs that each include compressed data and compression information for storage in a database system | |
US9576008B2 (en) | System and method for search indexing | |
US9219497B2 (en) | Compression device, compression method, and recording medium | |
US8463759B2 (en) | Method and system for compressing data | |
US20140236897A1 (en) | System, method and non-transitory computer readable medium for compressing genetic information | |
WO2024073847A1 (en) | System and method for storing and sharing genomic data using blockchain | |
CN115905209A (zh) | 编码方法及装置 |
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 |