CN110874346B - 浮点值的压缩方案 - Google Patents
浮点值的压缩方案 Download PDFInfo
- Publication number
- CN110874346B CN110874346B CN201910700822.3A CN201910700822A CN110874346B CN 110874346 B CN110874346 B CN 110874346B CN 201910700822 A CN201910700822 A CN 201910700822A CN 110874346 B CN110874346 B CN 110874346B
- Authority
- CN
- China
- Prior art keywords
- floating point
- value
- integer
- values
- point values
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
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/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
- G06F7/00—Methods or arrangements for processing data by operating upon the order or content of the data handled
- G06F7/38—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
- G06F7/48—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
- G06F7/483—Computations with numbers represented by a non-linear combination of denominational numbers, e.g. rational numbers, logarithmic number system or floating-point numbers
-
- 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/14—Details of searching files based on file metadata
- G06F16/144—Query formulation
-
- 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/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/245—Query processing
- G06F16/2453—Query optimisation
- G06F16/24534—Query rewriting; Transformation
- G06F16/24535—Query rewriting; Transformation of sub-queries or views
-
- 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/2455—Query execution
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/3001—Arithmetic instructions
- G06F9/30014—Arithmetic instructions with variable precision
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03M—CODING; DECODING; CODE CONVERSION IN GENERAL
- H03M7/00—Conversion of a code where information is represented by a given sequence or number of digits to a code where the same, similar or subset of information is represented by a different sequence or number of digits
- H03M7/14—Conversion to or from non-weighted codes
- H03M7/24—Conversion to or from floating-point codes
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03M—CODING; DECODING; CODE CONVERSION IN GENERAL
- H03M7/00—Conversion of a code where information is represented by a given sequence or number of digits to a code where the same, similar or subset of information is represented by a different sequence or number of digits
- H03M7/30—Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03M—CODING; DECODING; CODE CONVERSION IN GENERAL
- H03M7/00—Conversion of a code where information is represented by a given sequence or number of digits to a code where the same, similar or subset of information is represented by a different sequence or number of digits
- H03M7/30—Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
- H03M7/70—Type of the data to be coded, other than image and sound
- H03M7/707—Structured documents, e.g. XML
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- Data Mining & Analysis (AREA)
- Databases & Information Systems (AREA)
- Pure & Applied Mathematics (AREA)
- Mathematical Analysis (AREA)
- Mathematical Optimization (AREA)
- Computational Mathematics (AREA)
- Computing Systems (AREA)
- Nonlinear Science (AREA)
- Library & Information Science (AREA)
- Computational Linguistics (AREA)
- Software Systems (AREA)
- Mathematical Physics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
- Compression, Expansion, Code Conversion, And Decoders (AREA)
Abstract
本发明为浮点值的压缩方案。一些实施例提供了存储程序的非暂时性机器可读介质。该程序基于多个浮点值确定缩放值。该程序还基于缩放值缩放多个浮点值。该程序还将多个浮点值转换成多个整数值。该程序还从多个整数编码方案中确定整数编码方案。该程序还基于所确定的整数编码方案来编码多个整数值。
Description
技术领域
本发明涉及一种用于浮点值的压缩方案。
背景技术
数据库系统可以存储大量数据。不同的数据库系统可以使用不同的存储数据的方法。例如,一些数据库系统将数据存储在表格中,而其他数据库系统可能将数据存储在诸如电子表格、文档、媒介等文件中。存储的数据类型因不同的数据库系统而异。例如,一些数据库系统可以存储结构化数据。另一方面,一些数据库系统可以存储非结构化数据。许多技术可以用来在数据库系统中搜索特定的数据。例如,一些数据库系统遍历数据库系统中的所有数据,以便识别与查询匹配的数据。其他数据库系统可以使用索引来加快搜索。
发明内容
在一些实施例中,非暂时性机器可读介质存储程序。该程序基于多个浮点值确定缩放值。该程序还基于该缩放值缩放该多个浮点值。该程序还将该多个浮点值转换成多个整数值。该程序还从多个整数编码方案中确定整数编码方案。该程序还基于所确定的整数编码方案来编码该多个整数值。
在一些实施例中,该程序可以进一步将编码的多个整数值存储在文件存储器中的文件中。该多个浮点值可以是第一多个浮点值。该程序还可以接收对该多个浮点值的查询;响应于接收到该查询,从文件存储器中检索文件;基于整数编码方案解码文件中编码的多个整数值;将解码的多个整数值转换成第二多个浮点值;反缩放该第二多个浮点值;并且处理对该第二多个浮点值的查询。缩放值可以是第一缩放值。第一缩放值可以是10的幂。该程序还可以按照整数指数存储该第一缩放值,当值10被提升到该整数指数的幂时,产生第一缩放值。对该第二多个浮点值进行反缩放可以包括通过将值10提升到该整数指数的幂来计算第二缩放值,并将该第二多个浮点值除以计算出的该第二缩放值。
在一些实施例中,缩放该多个浮点值可以包括将该多个浮点值中的每个浮点值乘以该缩放值。该程序还可以接收将多个浮点值存储在文件中的请求。确定该缩放值可以包括遍历该多个浮点值,识别该多个浮点值中的最低浮点值,以及确定该缩放值的值,使得最低浮点值乘以该缩放值产生最低整数。
在一些实施例中,一种方法基于多个浮点值确定缩放值。该方法还基于该缩放值缩放该多个浮点值。该方法还将该多个浮点值转换成多个整数值。该方法还从多个整数编码方案中确定整数编码方案。该方法还基于所确定的整数编码方案来编码该多个整数值。
在一些实施例中,该方法可以进一步将编码的多个整数值存储在文件存储器中的文件中。该多个浮点值可以是第一多个浮点值。该方法还可以接收对该多个浮点值的查询;响应于接收到该查询,从文件存储器中检索文件;基于整数编码方案解码文件中编码的多个整数值;将解码的多个整数值转换成第二多个浮点值;反缩放该第二多个浮点值;并且处理对该第二多个浮点值的查询。缩放值可以是第一缩放值。该第一缩放值可以是10的幂。该方法还可以按照整数指数存储该第一缩放值,当值10被提升到该整数指数的幂时,产生第一缩放值。对该第二多个浮点值进行反缩放可以包括通过将值10提升到该整数指数的幂来计算第二缩放值,并将该第二多个浮点值除以计算出的第二缩放值。
在一些实施例中,缩放该多个浮点值可以包括将该多个浮点值中的每个浮点值乘以缩放值。该方法还可以接收将多个浮点值存储在文件中的请求。确定该缩放值可以包括遍历该多个浮点值,识别该多个浮点值中的最低浮点值,以及确定该缩放值的值,使得该最低浮点值乘以该缩放值产生最低整数。
在一些实施例中,系统包括一组处理单元和存储指令的非暂时性机器可读介质。这些指令使得至少一个处理单元基于多个浮点值确定缩放值。指令还使得至少一个处理单元基于该缩放值缩放该多个浮点值。指令还使得至少一个处理单元将该多个浮点值转换成多个整数值。指令还使得至少一个处理单元从多个整数编码方案中确定整数编码方案。指令还使得至少一个处理单元基于所确定的整数编码方案来编码该多个整数值。
在一些实施例中,指令可以进一步使得至少一个处理单元将编码的多个整数值存储在文件存储器中的文件中。多个浮点值可以是第一多个浮点值。指令还可以使得至少一个处理单元接收对该多个浮点值的查询;响应于接收到该查询,从文件存储器中检索文件;基于整数编码方案解码文件中编码的多个整数值;将解码的多个整数值转换成第二多个浮点值;反缩放该第二多个浮点值;并且处理对该第二多个浮点值的查询。该缩放值可以是第一缩放值。该第一缩放值可以是10的幂。指令还可以使得至少一个处理单元按照整数指数存储第一缩放值,当值10被提升到该整数指数的幂时,产生第一缩放值。对该第二多个浮点值进行反缩放可以包括通过将值10提升到该整数指数的幂来计算第二缩放值,并将该第二多个浮点值除以计算出的该第二缩放值。
在一些实施例中,缩放多个浮点值可以包括将该多个浮点值中的每个浮点值乘以该缩放值。指令还使得至少一个处理单元接收将该多个浮点值存储在文件中的请求。
以下详细描述和附图提供了对本发明的本质和优点的更好理解。
附图说明
图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文件)创建数据文件的技术。在一些实施例中,系统可以周期性地从数据库中的数据表创建这样的文件。当从表创建文件时,系统使用不同的编码和/或压缩方案对表中不同类型的数据进行编码和/或压缩。系统还可以生成与表、列和/或列中的数据相关联的元数据。一旦文件被创建,系统可以将它们存储在文件存储器(例如,本地文件存储器、远程文件存储器等)中。当系统接收到对存储在其中一个文件中的数据的查询时,系统从文件存储器中检索相应的文件,将文件的可能具有所需数据的部分加载到数据库中,对文件的被加载的部分进行查询,并返回查询结果。
本申请第I节中描述的技术提供了许多优于传统数据文件的好处和优点。首先,由于以文件格式组织数据的方式,系统通过将文件的可能具有所需数据的部分加载到数据库中、同时避免将文件的绝对不具有所需数据的部分加载到数据库中来减少数据读取量(例如,减少使用的带宽量)。其次,通过使用不同的编码和/或压缩方案对表中不同类型的数据进行编码和/或压缩,当从表中的数据创建文件时,系统减小了数据的存储大小。反过来,这减少了检索或访问这些文件的延迟。例如,当远程存储文件时,用于从远程文件读取的时间是数据读取量和恒定开销的函数。用于从远程文件读取的时间量可以表示如下:time_to_read(num_bytes)=roundtrip_overhead+num_bytes*read_over head_per_byte。在一些情况下,roundtrip_overhead足够大,1字节到1000字节的读取需要大约相同的时间量。本申请第I节中描述的文件格式以这样的方式构建:通过例如将100字节的10次读取减少到1000字节的1次读取来减少读取次数。
此外,本申请的第II节描述的是用于提高大数据文件中搜索速度的技术。如上所述,系统可以从数据库中的数据表创建数据文件。当创建这样的文件时,系统可以创建存储与表的列中的数据值相关联的信息的数据结构。系统可以为表中的每一列创建这些数据结构,并将它们存储在文件中。如果系统接收到对表的列的查询,则系统可以利用相应数据结构中的信息来识别文件的可能具有所需数据的部分,并识别文件的绝对不具有所需数据的部分。然后,系统仅将文件的可能具有所需数据的部分加载到数据库中,并对文件的被加载的部分进行查询,以便生成查询结果。
本申请第II节中描述的技术提供了许多优于对文件中的数据执行搜索的传统方法的好处和优点。例如,通过创建用于存储与表的列中的数据值相关联的信息的数据结构,系统可以稍后在处理对文件中的数据的查询时通过确定文件的可能具有所需数据的部分并确定文件的绝对不具有所需数据的部分来利用该信息。系统仅访问文件的可能具有所需数据的部分,并且避免访问文件的绝对不具有所需数据的部分,从而以更快和更有效的方式处理查询。这些技术在快速处理对大数据集的一小部分的查询时特别有效。
此外,本申请的第III节描述的是用于压缩浮点数据的技术。在一些实施例中,系统通过分析浮点值集合来确定缩放值,以压缩浮点值集合。然后,系统基于缩放值缩放浮点值,并将它们转换为缩放后的浮点值的整数表示。接下来,系统使用任意数量的不同整数编码方案来编码转换后和缩放后的浮点值的整数表示。
本申请第III节中描述的技术提供了许多优于存储浮点数据的传统方法的好处和优点。例如,缩放浮点值并将它们转换成整数值允许系统对浮点数据采用更有利的编码和压缩方案。它还减少了用于存储浮点数据的存储空间量。
I.format2文件格式
图1示出了根据一些实施例的系统100。如图所示,系统100包括计算系统105和文件存储器135。文件存储器135被配置为存储format2文件。在一些实施例中,文件存储器135在另一系统(未示出)上实施,作为存储区域网(Storage Area Network,SAN)、集群存储系统、云存储系统等的一部分。虽然图1将文件存储器135示出为在计算系统105外部,但是本领域普通技术人员将理解,在一些实施例中,文件存储器135可以是计算系统105的一部分。另外,本领域普通技术人员将理解,在一些实施例中,可以使用多个文件存储器。在一些这样的实施例中,多个文件存储器可以跨计算系统105和/或任意数量的不同系统分布。
在一些实施例中,系统100负责管理(例如,创建、存储、访问等)格式化为format2文件的数据文件。图2示出了根据一些实施例的文件格式的布局200。具体地,布局200是允许如本申请中所述的对文件中的数据进行有效访问的文件格式的高级描述。如图所示,布局200包括文件格式标识符(Identifier,ID)205、数据页面210a-210k、标头(header)页面215、标头大小220和文件格式ID 225。在一些实施例中,多字节数被存储为小端字节(little-endian)。文件格式ID 205和文件格式ID 225各自被配置为存储用于识别文件格式的唯一值。在一些实施例中,文件格式ID 205和文件格式ID 225各自是值为“FMT2”的32位有符号整数。在一些这样的实施例中,为“FMT2”的32位有符号整数值是美国信息交换标准码(American Standard Code for Information Interchange,ASCII)编码中每个字符的十六进制表示的串接。也就是说,该32位有符号整数值是464D5432(46代表“F”,4D代表“M”,54代表“T”,32代表“2”)。
数据页面210a-210k各自是分离的、连续的字节序列,被配置为存储如由标头页面215定义的各种数据。例如,数据页面210a-210k可以存储表的列的一部分或超集树结构(下面将详细描述)的值。数据页面210a-210k的大小可以不同,这取决于存储在数据页面210a-210k中的数据。标头页面215是分离的、连续的字节序列,被配置为存储文件格式的版本(例如,主要版本号、次要版本号等)、数据集中正存储的总行数、每个行块中包括的行数、对数据集中列的列元数据的引用、以及对超集树的引用。标头大小220被配置成按照字节数存储标头页面215的大小。在一些实施例中,标头大小220是64位有符号整数。如上所述,在一些实施例中,文件格式ID 225是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未被压缩时按照字节数存储数据305的大小。在一些实施例中,未压缩大小315是64位有符号整数。
回到图1,计算系统105包括文件生成器110、执行管理器115、执行引擎120、数据导入管理器125、文件读取器130和数据库140。在一些实施例中,数据库管理系统(DatabaseManagement System,DBMS)提供对数据库140的访问并与之交互。数据库140存储可用于生成format2文件的数据。在一些实施例中,数据库140中的数据存储在一个或多个表中。每个表可以包括一组字段。每个表可以有在表的每个字段中存储值的一个或多个记录。在一些实施例中,数据库140在单个物理存储装置中实施,而在其他实施例中,数据库140可以跨几个物理存储装置实施。虽然图1将数据库140示出为计算系统105的一部分,但是本领域普通技术人员将认识到,在一些实施例中,数据库140可以在计算系统105的外部。
文件生成器110负责从存储在数据库140中的数据创建format2文件。在一些实施例中,文件生成器110以定义的间隔(例如,每天一次、每周一次、每月一次等)生成format2文件。在定义的间隔期间,文件生成器110可以访问数据库140并识别比阈值年龄(例如,两周、一个月、六个月、一年等)更老的数据表或在阈值时间量(例如,一周、两周、一个月等)内未被访问的数据。文件生成器110然后从所识别的表中的数据生成format2文件。
现在将参照图4-7描述从表创建format2文件的示例操作。图4示出了根据一些实施例的示例数据表400。对于该示例,表400存储在数据库140中,并将用于创建format2文件。如图所示,表400包括两列405和410以及二十四行数据。列405被配置为存储表示记录温度的日、月和年的日期值。列410被配置为存储表示温度(华氏温度)的整数值。
操作由文件生成器110访问数据库140中的表400开始。接下来,文件生成器110将表400划分成行块。在该示例中,文件生成器110将表400划分成三个行块,每个行块包括八行数据。文件生成器110还将行块分成分离的列块(也称为片段)。图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和文件格式ID725。在该示例中,文件生成器110通过从文件700的前面(即,以文件格式ID 705开始的左侧)朝向文件700的后面(即,以文件格式ID 725结束的右侧)在文件中写入数据来构建文件700。
文件生成器110通过将文件格式ID 705作为整数值为“FMT2”的32位有符号整数写入文件700而开始。接下来,文件生成器110使用无损压缩方案(例如,zlib压缩方案、lz4压缩方案、snappy压缩方案等)来压缩数据元数据600和数据元数据620。如果压缩数据小于数据的原始大小的阈值比值(例如,85%、90%、95%等),则文件生成器110使用压缩数据以存储在文件700中。否则,文件生成器110使用原始未压缩数据以存储在文件700中。文件生成器110然后按照字节数确定数据元数据600和数据元数据620中的每一个的未压缩大小。接下来,文件生成器110根据布局300使用所确定的未压缩大小来格式化数据元数据600和数据元数据620,并将它们分别写入文件700,作为数据页面710a和数据页面710b。
在将数据元数据600和数据元数据620写入文件700之后,文件生成器110处理列405的片段505-515和列410的片段520-530以存储在文件700中。在该示例中,日期值是64位整数,其从1970年1月1日的日期开始按照十分之一秒存储日期。对于片段505-515中的每一个,文件生成器110使用整数编码方案对数据值进行编码。对于片段520-530中的每一个,文件生成器110使用整数编码方案对整数值进行编码。
文件生成器110可以使用任意数量的不同整数编码方案。例如,第一编码方案是游程(runlength)编码方案,其中使用可变长度量(Variable-length Quantity,VLQ)编码结合对负值的zigzag编码来存储值出现的次数和实际值。第二编码方案是逐位编码方案,其确定表示整数值序列中的值的范围所需的最小位数。逐位编码方案存储用于存储值的数组大小、用于表示值的位数以及使用最小位数表示的值的数组。用于存储值的数组的大小和用于表示值的位数可以使用两个VLQ编码值来存储。第三整数编码方案是增量游程编码方案,其中使用VLQ编码方案存储整数值序列中的第一值,并且基于整数值序列中的值和先前值之间的差异(即,增量)存储整数值序列中的每个后续值。使用游程编码方案(例如,第一编码方案)对增量进行编码。第四整数编码方案是增量逐位编码方案,其中使用VLQ编码方案存储整数值序列中的第一值,并且基于整数值序列中的值和先前值之间的差异(即,增量)存储整数值序列中的每个后续值。使用逐位编码方案(例如,第二编码方案)对增量进行编码。
在一些实施例中,文件生成器110从几个不同的整数编码方案中自动选择整数编码方案,以用于对整数值序列进行编码。对于该示例,文件生成器110从上述四种整数编码方案中自动选择整数编码方案,用于对片段520-530中的每一个进行编码。为了确定使用四个整数编码方案中的哪一个,文件生成器110估计每个整数编码方案将使用的字节数,并选择将使用最低估计字节数的整数编码方案。
对于第一整数编码方案,文件生成器110使用以下等式(1)估计将与游程编码方案一起使用的字节数:
rumlength_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_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-value1),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类型和列中的空(null)值的数量。在一些实施例中,可以使用不同的编码方案来编码列的不同片段。在一些这样的实施例中,用于列的每个片段的编码方案存储在列元数据中。该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位有符号整数在文件700中写入文件格式ID 725。最后,文件生成器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的大小,等等。块805n的大小可以通过从偏移815的值中减去偏移810n的值来计算。偏移数量820被配置为存储偏移的总数,其包括偏移810a-810n和偏移815。在一些实施例中,使用64位整数来存储偏移810a-810n、偏移815和偏移数量820。
如上所述,文件生成器110可以将字符串值序列(例如,来自列片段)存储为空端字符串的连续数组,并且使用VLQ编码方案对序列中的字符串值的数量进行编码。在布局800用于存储字符串值的一些实施例中,文件生成器110在第一数据块(例如,数据块805a)的开头处存储经VLQ编码的字符串值的数量,随后是空端字符串数组(也在第一数据块中)。文件生成器110还存储偏移数组,该偏移数组存储空端字符串数组中每个字符串的偏移。偏移数组允许快速访问空端字符串数组中的特定字符串,而不必依次遍历空端字符串数组。在列具有NULL字符串值的一些情况下,文件生成器110存储分离的数据块来编码NULL值。
在一些情况下,表的列片段中的值可能包含空值。在布局800用于数据值序列的一些实施例中,文件生成器110在布局800的最后一个数据块(例如,数据块805n)中存储与空值相关联的信息。如果列片段不包括任何空值,则文件生成器110将最后一个数据块存储为具有零字节大小。如果列片段确实包括空值,则文件生成器110将布尔数组作为8位整数数组存储在最后一个数据块中,并且使用上述自动整数编码方案选择技术来编码该数组。对于列片段中不存储NULL值的每一行,文件生成器110在布尔数组中存储相应的FALSE值。对于列片段中存储NULL值的每一行,文件生成器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中的值大于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发送数据页面710g和数据页面710h的偏移和大小,并指示文件读取器130从数据页面710g和710h中检索片段525和530,其中,这些偏移和大小是数据导入管理器125从列410的列元数据中检索的。一旦接收到片段525和530,数据导入管理器125识别片段530中满足查询的行(片段530中的第一、第二和第五行)。数据导入管理器125然后向文件读取器130发送数据页面710d和数据页面710e的偏移和大小,并指示文件读取器130从数据页面710d和710e中检索片段510和515,其中,这些偏移和大小是数据导入管理器125从列405的列元数据中检索的。数据导入管理器125识别片段515中对应于片段530中满足查询的行的行。数据导入管理器125然后将片段515中的所识别的行、片段530中的所识别的行、片段510中的所有行以及片段525中的所有行包括在查询结果中,并将查询结果发送给执行引擎120,执行引擎120将其转发给执行管理器115。最后,执行管理器115将查询结果发送到执行管理器115从其接收查询的元件。
图9示出了根据一些实施例的用于创建为了快速有效地访问数据而被格式化的文件的过程900。在一些实施例中,文件生成器110执行过程900。过程900由在910处接收创建用于存储来自包括多个行的表的数据的文件的请求。多个行中的每一行被划分成列集。列集中的每一列被配置为存储一种数据类型。参考图1和4作为示例,文件生成器110可以接收创建用于存储表400中的数据的文件的请求。
接下来,在920处,过程900将多个行划分成多个行块。多个行块中的每个行块包括该多个行的一部分。参考图1和图5作为示例,文件生成器110可以将表400中的行划分成三个行块505-515。然后,在930处,对于多个行块中的每个行块的列集中的每一列,过程900基于存储在列中的数据类型对行块的列中的数据进行编码,并将编码的数据作为分离的数据页面存储在文件中。过程900可以使用上述自动整数编码方案选择技术来编码列410中的值。
接下来,在940处,过程900为列集生成列元数据集。每个列元数据包括存储在该列集中的相应列中的数据类型、用于编码相应列中的数据的编码方案、以及对相应列的多个行块的引用。然后,在950处,过程900将每个列元数据作为分离的数据页面存储在文件中。参考图1、4和7作为示例,文件生成器110可以将列405的列元数据作为数据页面710i存储在文件700中,并将列410的列元数据作为数据页面710j存储在文件700中。
然后,在960处,过程900生成标头页面,该标头页面包括多个行中的总行数、多个行块中的每个行块中的行数以及对列元数据集的引用。最后,在970处,过程900将标头页面作为分离的数据页面存储在文件中。参考图1、4和7,作为示例,文件生成器110将标头页面作为标头页面715存储在文件700中。
II.超集树数据结构
在第I节中,处理对format2文件的查询的示例操作描述了使用文件中的数据元数据来处理查询。计算系统105可以使用超集树数据结构来实施数据元数据。在一些实施例中,超集树数据结构是有根的(rooted)、满的(full)和完整的(complete)二叉树。在一些这样的实施例中,超集树数据结构的根存储值(即,有根的超集树数据结构),超集树数据结构中的每个节点具有零个或两个子节点(即,满超集树数据结构),并且可能除了最低级别超集树数据结构中的每个级别都是满的(即,完整超集树数据结构)。
在一些实施例中,为列生成的超集树数据结构具有与列片段数量相同数量的叶节点。文件生成器110可以基于列中的片段数使用以下等式(5)计算超集树数据结构的高度(例如,具有三个级别的超集数据结构具有高度二,具有五个级别的超集数据结构具有高度四,等):
height=ceik(log2(fragments))
其中ceil()以一个值作为输入,并返回大于该值的最小整数值,fragments是列中的片段数。文件生成器110然后可以使用以下等式(6)计算倒数第二级别(即,第二低的级别)中的叶节点数:
leaf_nodes_penultimate=heightr2-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以广度优先(breadth-first)的顺序串行化超集树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中的数据的查询开始。查询可以从客户端设备(未示出)、在计算系统(未示出)上运行的应用、在计算系统105上执行的服务或进程(未示出)、或者能够向执行管理器115发送查询的任何其他设备、系统、组件、元件等接收。对于该示例,查询针对表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发送包含片段1025和1030的数据页面的偏移和大小,并指示文件读取器130从相应的数据页面中检索片段1025和1030,其中,这些偏移和大小是数据导入管理器125从列410的列元数据中检索的。当数据导入管理器125接收片段1025和1030时,数据导入管理器125识别片段1030中满足查询的行(片段1030中的第一和第二行)。数据导入管理器125然后向文件读取器130发送包含片段1005和1010的数据页面的偏移和大小,并指示文件读取器130从相应的数据页面中检索片段1005和1010,其中,这些偏移和大小是数据导入管理器125从列405的列元数据中检索的。接下来,数据导入管理器125识别片段1010中对应于片段1030中满足查询的行的行。数据导入管理器125然后将片段1010中的所识别的行、片段1030中的所识别的行、片段1005中的所有行以及片段1025中的所有行包括在查询结果中,并将查询结果发送到执行引擎120。作为响应,执行引擎120将查询结果转发给执行管理器115,执行管理器115将其转发给执行管理器115从其接收查询的元件。
上述使用超集树数据结构来处理对存储在format2文件中的数据的查询的示例操作展示了数据导入管理器125如何能够基于存储在超集树数据结构中的数据一次消除/跳过多个片段。此外,上述示例操作中的超集树数据结构基于底层片段中的整数值存储整数值的范围(即间隔)。在一些实施例中,超集树数据结构可以存储基于存储在列中的字符串值生成的布隆过滤器(bloom filter)。
现在将参照图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)将其作为数据页面存储在format2文件中。
如图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)散列函数、杂音散列函数(Murmurhash function)、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中的、其中具有等于“United States”的字符串值的行对列1205应用过滤器。响应于该指示,数据导入管理器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发送包含片段1210的数据页面的偏移和大小,并指示文件读取器130从相应的数据页面中检索片段1210,其中,这些偏移和大小是数据导入管理器125从列1205的列元数据中检索的。一旦接收到片段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的值的记录的查询。
接下来,在1420处,过程1400遍历包括以多个级别布置的多个节点的分层树结构,以便基于该值的集合识别分层树结构的叶节点集。分层树结构中的每个叶节点可以与表中的记录块相关联。分层树结构中的每个叶节点可以包括描述与叶节点相关联的记录块的列中的值的超集的数据。每个非叶节点可以包括描述由非叶节点的子节点中的数据所描述的值的超集的数据。参考图1和11以及上述操作作为示例,数据导入管理器125可以遍历超集树1100,以识别可以包括满足查询的记录的叶节点(例如,节点1120、节点1125、节点1130和/或节点1135)。
然后,在1430处,过程1400处理对表中与该叶节点集相关联的记录块集的查询。参考图1和10以及上述操作作为示例,数据导入管理器125确定包括片段1025中的所有行,并且确定片段1030中的一些行可以包括在查询结果中。具体地,数据导入管理器125识别片段1030中满足查询的行(片段1030中的第一和第二行)。最后,在1440处,过程1400基于该处理生成查询结果。参考图1和上述操作作为示例,数据导入管理器125将片段1025中的所有行和片段1030中的所识别的行(以及列405中的相应行)包括在查询结果中。
III.浮点数据压缩方案
第I节讨论了对整数值序列、字符串值等进行编码的不同方法。在一些情况下,表中的列存储浮点值。计算系统105使用新颖的技术来编码浮点值序列。现在将参考图1、15和16描述对浮点值序列进行编码的示例操作。图15示出了根据一些实施例的浮点值的示例表1500。如图所示,表1500包括列1505和五行数据。为了简单和解释的目的,图15仅示出了表1500的列1505。本领域普通技术人员将理解,表1500中可以包括任意数量的不同列。列1505被配置为存储表示温度(华氏温度)的浮点值。在一些实施例中,要被编码的浮点值以64位浮点值(例如,电气和电子工程师协会(Institute of Electrical and ElectronicsEngineers,IEEE)64位浮点值)存储。图16示出了根据一些实施例的图15所示的浮点值的十六进制表示。具体地,图16示出了表1600,其包括对应于表1500中浮点值的IEEE 64位浮点值(例如,双精度)的十六进制值。
示例操作由文件生成器110接收将表1500存储在format2文件中的请求开始。文件生成器110以与上面在第I节中描述的类似方式为表1500生成format2文件。为了编码列1505中的浮点值,文件生成器110确定用于将浮点值缩放到整数值的最低范围的缩放值。在一些实施例中,缩放值是10的幂。在该示例中,文件生成器110通过将列1505中的每个值乘以10到一次幂并检查是否所有相乘值都是整数来确定缩放值。如果不是,则文件生成器110继续将列1505中的每个值乘以10的递增幂,直到列1505中的相乘值是整数。也就是说,文件生成器110将列1505中的每个值乘以10到二次幂并检查是否所有相乘值都是整数,将列1505中的每个值乘以10到三次幂并检查是否所有相乘值都是整数,等等。对于该示例,文件生成器110将缩放值确定为100,因为将列1505中的每个值乘以100产生了所有整数值。一旦文件生成器110确定了缩放值,文件生成器110将列1505中的每个浮点值乘以缩放值,并将缩放后的浮点值转换成缩放后的浮点值的整数表示。图17示出了根据一些实施例的图15所示的浮点值的缩放后的整数表示。特别地,图17示出了在文件生成器110已经缩放浮点值并将它们转换成整数值之后,包括表1500中的相应浮点值的整数值的表1700。
在该示例中,需要九位来编码表1700中的所有整数值。在一些实施例中,负值可以通过使用一位作为符号位来应对。在其他实施例中,负值可以通过使用zigzag编码来应对,zigzag编码也使用一个附加位。然而,文件生成器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节中描述的类似方式(例如,使用图8所示的格式和布局300)将编码整数值存储在format2文件的数据页面中。
在一些情况下,计算系统105可以接收对表1500的查询,并且需要访问列1505中的数据。在这种情况下,数据导入管理器125指示文件读取器130从文件存储器135中检索包含表1500的文件。如果使用整数编码方案来编码整数值,则数据导入管理器125使用它来解码整数值。然后,数据导入管理器125将整数值转换成整数值的浮点表示。接下来,数据导入管理器125通过提取整数指数并将值10提升到该整数指数的幂来计算缩放值。数据导入管理器125使用计算出的缩放值,通过将每个浮点值乘以计算出的缩放值来对浮点值进行反缩放。得到的浮点值是表1500中的原始值。最后,数据导入管理器125处理对得到的浮点值的查询。
图18示出了根据一些实施例的用于压缩浮点值的过程1800。在一些实施例中,文件生成器110执行过程1800。过程1800在1810处由基于多个浮点值确定缩放值开始。接下来,在1820处,过程1800基于缩放值缩放多个浮点值。过程1800可以通过将每个浮点值乘以缩放值来缩放多个浮点值。
然后,在1830处,过程1800将多个浮点值转换成多个整数值。也就是说,过程1800将每个浮点值转换成缩放后的浮点值的整数表示。接下来,在1840处,过程1800从多个整数编码方案中确定整数编码方案。在一些实施例中,过程1800使用第I节中描述的自动整数编码方案选择技术来确定整数编码方案。最后,在1850处,过程1800基于所确定的整数编码算法对多个整数值进行编码。
图19示出了用于实施上述各种实施例的示例性计算机系统1900。例如,计算机系统1900可以用于实施计算系统105。计算机系统1900可以是台式计算机、膝上型计算机、服务器计算机或任何其他类型的计算机系统或其组合。文件生成器110、执行管理器115、执行引擎120、数据导入管理器125、文件读取器130或其组合中的一些或所有元件可以被包括或实施在计算机系统1900中。此外,计算机系统1900可以实施上述许多操作、方法和/或过程(例如,过程900、过程1400和过程1800)。如图19所示,计算机系统1900包括处理子系统1902,其经由总线子系统1926与输入/输出(Input/Output,I/O)子系统1908、存储子系统1910和通信子系统1924通信。
总线子系统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)、电可擦除可编程只读存储器(Electrically Erasable Programmable Read-Only Memory,EEPROM)、闪存等)。系统存储器1912可以包括不同类型的存储器,诸如静态随机存取存储器(Static Random AccessMemory,SRAM)和/或动态随机存取存储器(Dynamic Random Access Memory,DRAM)。在一些实施例中,系统存储器1912可以包括基本输入/输出系统(Basic Input/Output System,BIOS),其被配置为存储基本例程,以促进在计算机系统1900内的元件之间传输信息(例如,在启动期间)。这种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、BlackBerry 10和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)、数字多功能盘(Digital VersatileDisk,DVD)、蓝光盘(Blu-ray Disc,BD)、盒式磁带、磁带、磁盘存储装置(例如,硬盘驱动器)、Zip驱动器、固态驱动器(Solid-State Drive,SSD)、闪存卡(例如,安全数字(SecureDigital,SD)卡、压缩闪存卡等)、USB快闪驱动器或任何其他类型的计算机可读存储介质或设备。
通信子系统1924用作从其他设备、计算机系统和网络接收数据和向其他设备、计算机系统和网络发送数据的接口。例如,通信子系统1924可以允许计算机系统1900经由网络(例如,个人区域网(Personal Area Network,PAN)、局域网(Local Area Network,LAN)、存储区域网(Storage Area Network,SAN)、校园区域网(Campus Area Network,CAN)、城域网(Metropolitan Area Network,MAN)、广域网(Wide Area Network,WAN)、全球区域网(Global Area Network,GAN)、内联网、互联网、任何数量的不同类型网络的网络,等)连接到一个或多个设备。通信子系统1924可以包括任意数量的不同通信组件。这种组件的示例可以包括用于访问无线语音和/或数据网络的射频(Radio Frequency,RF)收发器组件(例如,使用诸如2G、3G、4G、5G等的蜂窝技术、诸如Wi-Fi、蓝牙、ZigBee等的无线数据技术、或其任意组合)、全球定位系统(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)、电可擦除可编程只读存储器(EEPROM)、闪存等)、或其组合。
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可以包括任意数量的不同通信组件。这种组件的示例可以包括用于访问无线语音和/或数据网络的射频(RF)收发器组件(例如,使用诸如2G、3G、4G、5G等的蜂窝技术、诸如Wi-Fi、蓝牙、ZigBee等的无线数据技术、或其任意组合)、全球定位系统(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、AppleMac 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可以托管(host)应用,并且客户端设备2102-2108中的一个的用户可以经由网络2110订购和使用该应用。
应用2114可以包括被配置为在云计算系统2112(例如,计算机系统或在计算机系统上操作的虚拟机)上执行并经由客户端设备2102-2108访问、控制、管理等的软件应用。在一些实施例中,应用2114可以包括服务器应用和/或中间层应用(例如,超文本传输协议(Hypertext Transport Protocol,HTTP)服务器应用、文件传输协议(File TransferProtocol,FTP)服务器应用、通用网关接口(Common Gateway Interface,CGI)服务器应用、JAVA服务器应用等)。服务2116是被配置为在云计算系统2112上执行并经由网络2110向客户端设备2102-2108提供功能的软件组件、模块、应用等。服务2116可以是基于网络的服务或按需云服务。
数据库2118被配置为存储和/或管理由应用2114、服务2116和/或客户端设备2102-2108访问的数据。例如,数据库140可以存储在数据库2118中。数据库2118可以驻留在云计算系统2112本地(和/或驻留在云计算系统2112中)的非暂时性存储介质上、驻留在存储区域网(SAN)中、驻留在位于远离云计算系统2112的本地的非暂时性存储介质上。在一些实施例中,数据库2118可以包括由关系数据库管理系统(Relational DatabaseManagement System,RDBMS)管理的关系数据库。数据库2118可以是面向列的数据库、面向行的数据库或其组合。在一些实施例中,数据库2118中的一些或所有是内存(in-memory)数据库。也就是说,在一些这样的实施例中,数据库2118的数据被存储和管理在存储器(例如,随机存取存储器(RAM))中。
客户端设备2102-2108被配置为执行和操作经由网络2110与应用2114、服务2116和/或数据库2118通信的客户端应用(例如,网络浏览器、专有客户端应用等)。这样,当应用2114、服务2116和数据库2118在云计算系统2100上操作(例如,被托管)时,客户端设备2102-2108可以访问由应用2114、服务2116和数据库2118提供的各种功能。如上分别参考图19和20所述,客户端设备2102-2108可以是计算机系统1900或计算设备2000。尽管系统2100被示出为具有四个客户端设备,但是可以支持任意数量的客户端设备。
网络2110可以是被配置为使用多种网络协议中的任何一种来促进客户端设备2102-2108和云计算系统2112之间的数据通信的任何类型的网络。网络2110可以是个人区域网(PAN)、局域网(LAN)、存储区域网(SAN)、校园区域网(CAN)、城域网(MAN)、广域网(WAN)、全球区域网(GAN)、内联网、互联网、任意数量不同类型网络的网络等。
以上描述示出了本发明的各种实施例以及如何实施本发明的各方面的示例。上述示例和实施例不应被认为是唯一的实施例,并且呈现这些示例和实施例是为了说明由所附权利要求限定的本发明的灵活性和优点。基于以上公开和所附权利要求,其他布置、实施例、实施方式和等同物对于本领域技术人员来说将是显而易见的,并且可以在不脱离由权利要求限定的本发明的精神和范围的情况下使用。
Claims (18)
1.一种存储可由设备的至少一个处理单元执行的程序的非暂时性机器可读介质,所述程序包括指令集,用于:
基于存储在表中的列中的多个浮点值确定缩放值;
基于所述缩放值缩放所述多个浮点值;
将所述多个浮点值转换成多个整数值;
从多个整数编码方案中确定整数编码方案;和
基于所确定的整数编码方案来编码所述多个整数值,
其中,确定所述缩放值包括:
将所述列中的所述浮点值中的每一个乘以一个值,
检查是否所有相乘值都是整数,
继续将所述浮点值中的每一个乘以所述值的递增幂,直到列中的相乘值是整数为止,并且
当将所述列中的所述浮点值乘以所述值产生所有整数值时,确定所述缩放值是所述值。
2.根据权利要求1所述的非暂时性机器可读介质,其中,所述程序还包括指令集,用于将编码的多个整数值存储在文件存储器中的文件中。
3.根据权利要求2所述的非暂时性机器可读介质,其中,所述多个浮点值是第一多个浮点值,其中,所述程序还包括指令集,用于:
接收对所述多个浮点值的查询;
响应于接收到所述查询,从所述文件存储器中检索文件;
基于所述整数编码方案解码文件中编码的多个整数值;
将解码的多个整数值转换成第二多个浮点值;
反缩放所述第二多个浮点值;和
处理对所述第二多个浮点值的查询。
4.根据权利要求3所述的非暂时性机器可读介质,其中所述缩放值是第一缩放值,其中所述第一缩放值是10的幂,其中所述程序还包括指令集,用于按照整数指数存储第一缩放值,当值10被提升到所述整数指数的幂时,产生第一缩放值,其中反缩放所述第二多个浮点值包括通过将值10提升到所述整数指数的幂来计算第二缩放值,并将所述第二多个浮点值除以计算出的所述第二缩放值。
5.根据权利要求1所述的非暂时性机器可读介质,其中,缩放所述多个浮点值包括将所述多个浮点值中的每个浮点值乘以缩放值。
6.根据权利要求1所述的非暂时性机器可读介质,其中,所述程序还包括指令集,用于接收将所述多个浮点值存储在文件中的请求。
7.一种用于压缩浮点值的方法,包括:
基于存储在表中的列中的多个浮点值确定缩放值;
基于所述缩放值缩放所述多个浮点值;
将所述多个浮点值转换成多个整数值;
从多个整数编码方案中确定整数编码方案;和
基于所确定的整数编码方案来编码所述多个整数值,
其中,确定所述缩放值包括:
将所述列中的所述浮点值中的每一个乘以一个值,
检查是否所有相乘值都是整数,
继续将所述浮点值中的每一个乘以所述值的递增幂,直到列中的相乘值是整数为止,并且
当将所述列中的所述浮点值乘以所述值产生所有整数值时,确定所述缩放值是所述值。
8.根据权利要求7所述的方法,还包括将编码的多个整数值存储在文件存储器中的文件中。
9.根据权利要求8所述的方法,其中,所述多个浮点值是第一多个浮点值,其中所述方法进一步包括:
接收对所述多个浮点值的查询;
响应于接收到所述查询,从所述文件存储器中检索文件;
基于所述整数编码方案解码文件中编码的多个整数值;
将解码的多个整数值转换成第二多个浮点值;
反缩放所述第二多个浮点值;和
处理对所述第二多个浮点值的查询。
10.根据权利要求9所述的方法,其中所述缩放值是第一缩放值,其中所述第一缩放值是10的幂,其中所述方法还包括按照整数指数存储第一缩放值,当值10被提升到所述整数指数的幂时,产生第一缩放值,其中反缩放所述第二多个浮点值包括通过将值10提升到所述整数指数的幂来计算第二缩放值,并将所述第二多个浮点值除以计算出的所述第二缩放值。
11.根据权利要求7所述的方法,其中缩放所述多个浮点值包括将多个浮点值中的每个浮点值乘以缩放值。
12.根据权利要求7所述的方法,还包括接收将所述多个浮点值存储在文件中的请求。
13.一种用于压缩浮点值的系统,包括:
一组处理单元;和
存储指令的非暂时性机器可读介质,当所述指令被所述一组处理单元中的至少一个处理单元执行时,使得所述至少一个处理单元:
基于存储在表中的列中的多个浮点值确定缩放值;
基于所述缩放值缩放所述多个浮点值;
将所述多个浮点值转换成多个整数值;
从多个整数编码方案中确定整数编码方案;和
基于所确定的整数编码方案编码所述多个整数值,
其中,所述缩放值通过以下被确定:
将所述列中的所述浮点值中的每一个乘以一个值,
检查是否所有相乘值都是整数,
继续将所述浮点值中的每一个乘以所述值的递增幂,直到列中的相乘值是整数为止,并且
当将所述列中的所述浮点值乘以所述值产生所有整数值时,确定所述缩放值是所述值。
14.根据权利要求13所述的系统,其中,所述指令还使得所述至少一个处理单元将编码的多个整数值存储在文件存储器中的文件中。
15.根据权利要求14所述的系统,其中,所述多个浮点值是第一多个浮点值,其中所述指令进一步使得所述至少一个处理单元:
接收对所述多个浮点值的查询;
响应于接收到所述查询,从所述文件存储器中检索文件;
基于所述整数编码方案解码文件中编码的多个整数值;
将解码的多个整数值转换成第二多个浮点值;
反缩放所述第二多个浮点值;和
处理对所述第二多个浮点值的查询。
16.根据权利要求15所述的系统,其中所述缩放值是第一缩放值,其中所述第一缩放值是10的幂,其中所述指令还使得所述至少一个处理单元按照整数指数存储所述第一缩放值,当值10被提升到所述整数指数的幂时,产生第一缩放值,其中反缩放所述第二多个浮点值包括通过将值10提升到所述整数指数的幂来计算第二缩放值,并将所述第二多个浮点值除以计算出的所述第二缩放值。
17.根据权利要求13所述的系统,其中,缩放所述多个浮点值包括将多个浮点值中的每个浮点值乘以缩放值。
18.根据权利要求13所述的系统,其中,所述指令还使得所述至少一个处理单元接收将所述多个浮点值存储在文件中的请求。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US16/117,774 | 2018-08-30 | ||
US16/117,774 US11138151B2 (en) | 2018-08-30 | 2018-08-30 | Compression scheme for floating point values |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110874346A CN110874346A (zh) | 2020-03-10 |
CN110874346B true CN110874346B (zh) | 2023-09-29 |
Family
ID=67658301
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910700822.3A Active CN110874346B (zh) | 2018-08-30 | 2019-07-31 | 浮点值的压缩方案 |
Country Status (3)
Country | Link |
---|---|
US (1) | US11138151B2 (zh) |
EP (1) | EP3617873A1 (zh) |
CN (1) | CN110874346B (zh) |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10970281B2 (en) * | 2018-09-06 | 2021-04-06 | Sap Se | Searching for data using superset tree data structures |
US20210200717A1 (en) * | 2019-12-26 | 2021-07-01 | Oath Inc. | Generating full metadata from partial distributed metadata |
US11650899B1 (en) * | 2022-01-21 | 2023-05-16 | Lenovo Global Technology (United States) Inc. | User interface experience by compressing metrics and allowing customization of metrics compression for detailed analytics |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102523449A (zh) * | 2011-12-17 | 2012-06-27 | 无敌科技(西安)有限公司 | 借助将色彩模式转化的运算方法 |
CN104040484A (zh) * | 2011-12-28 | 2014-09-10 | 英特尔公司 | 浮点缩放处理器、方法、系统和指令 |
CN105301619A (zh) * | 2015-12-02 | 2016-02-03 | 武汉大学 | 大规模gnss网数据整体快速处理方法及系统 |
CN107391463A (zh) * | 2017-07-20 | 2017-11-24 | 上海金大师网络科技有限公司 | 一种行情数据压缩方法及系统 |
Family Cites Families (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6424972B1 (en) | 1999-06-22 | 2002-07-23 | Microsoft Corporation | Floating point conversion for records of multidimensional database |
US7103621B2 (en) * | 2002-03-29 | 2006-09-05 | Pts Corporation | Processor efficient transformation and lighting implementation for three dimensional graphics utilizing scaled conversion instructions |
US7900025B2 (en) * | 2008-10-14 | 2011-03-01 | International Business Machines Corporation | Floating point only SIMD instruction set architecture including compare, select, Boolean, and alignment operations |
EP2264904B9 (en) * | 2009-06-16 | 2013-08-21 | Canon Kabushiki Kaisha | Methods and device of binary coding and decoding for structured document comprising a plurality of data |
US9104473B2 (en) * | 2012-03-30 | 2015-08-11 | Altera Corporation | Conversion and compression of floating-point and integer data |
-
2018
- 2018-08-30 US US16/117,774 patent/US11138151B2/en active Active
-
2019
- 2019-07-30 EP EP19189082.1A patent/EP3617873A1/en active Pending
- 2019-07-31 CN CN201910700822.3A patent/CN110874346B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102523449A (zh) * | 2011-12-17 | 2012-06-27 | 无敌科技(西安)有限公司 | 借助将色彩模式转化的运算方法 |
CN104040484A (zh) * | 2011-12-28 | 2014-09-10 | 英特尔公司 | 浮点缩放处理器、方法、系统和指令 |
CN105301619A (zh) * | 2015-12-02 | 2016-02-03 | 武汉大学 | 大规模gnss网数据整体快速处理方法及系统 |
CN107391463A (zh) * | 2017-07-20 | 2017-11-24 | 上海金大师网络科技有限公司 | 一种行情数据压缩方法及系统 |
Non-Patent Citations (3)
Title |
---|
Database Compression on Graphics Processors.Database Compression on Graphics Processors.《 Proceedings of the VLDB Endowment》.2010,第1-12页. * |
Eric Quinnell 等.Bridge Floating-Point Fused Multiply-Add Design.《IEEE Transactions on Very Large Scale Integration (VLSI) Systems》.2008,1726-1730. * |
乔世杰 等.一种快速的小波变换图象编码算法.《中国图象图形学报 》.2001,5. * |
Also Published As
Publication number | Publication date |
---|---|
CN110874346A (zh) | 2020-03-10 |
EP3617873A1 (en) | 2020-03-04 |
US20200073958A1 (en) | 2020-03-05 |
US11138151B2 (en) | 2021-10-05 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110879854B (zh) | 使用超集树数据结构搜索数据 | |
CN110879807B (zh) | 用于快速地并且有效地访问数据的文件格式 | |
US9025892B1 (en) | Data record compression with progressive and/or selective decomposition | |
US10318484B2 (en) | Scan optimization using bloom filter synopsis | |
CN110874346B (zh) | 浮点值的压缩方案 | |
US9935650B2 (en) | Compression of floating-point data by identifying a previous loss of precision | |
US9633073B1 (en) | Distributed data store for hierarchical data | |
US11704286B2 (en) | High-density compression method and computing system | |
US20130019029A1 (en) | Lossless compression of a predictive data stream having mixed data types | |
US9916320B2 (en) | Compression-based filtering for deduplication | |
CN114026555A (zh) | 差分压缩的方法和系统 | |
US10318516B1 (en) | System for optimizing serialization of values | |
US10599621B1 (en) | Distributed processing framework file system fast on-demand storage listing | |
US9219497B2 (en) | Compression device, compression method, and recording medium | |
US10168909B1 (en) | Compression hardware acceleration | |
US20240012851A1 (en) | Generating and compressing data blocks for efficient browse structures | |
US9058377B2 (en) | Fixed width encoding document posting lists | |
WO2024073847A1 (en) | System and method for storing and sharing genomic data using blockchain | |
CN115905209A (zh) | 编码方法及装置 | |
WO2023064496A1 (en) | High-compression, high-volume deduplication cache |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |