CN108572788A - 数据存取方法、装置及系统 - Google Patents
数据存取方法、装置及系统 Download PDFInfo
- Publication number
- CN108572788A CN108572788A CN201710146261.8A CN201710146261A CN108572788A CN 108572788 A CN108572788 A CN 108572788A CN 201710146261 A CN201710146261 A CN 201710146261A CN 108572788 A CN108572788 A CN 108572788A
- Authority
- CN
- China
- Prior art keywords
- data
- value
- block
- data block
- sub
- 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.)
- Pending
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0602—Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
- G06F3/061—Improving I/O performance
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0638—Organizing or formatting or addressing of data
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0668—Interfaces specially adapted for storage systems adopting a particular infrastructure
- G06F3/067—Distributed or networked storage systems, e.g. storage area networks [SAN], network attached storage [NAS]
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Human Computer Interaction (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开了一直数据存取方法、装置及系统,用于存储多行数据,每行数据包括多个属于不同字段的值,至少两行数据具有属于同一字段的值,存储过程如下:将多行数据中属于同一字段的值写入同一数据块,不同数据块所存储的值对应于不同的字段;针对每个数据块,在指定位置写入该数据块的第一元数据信息和行位置信息,其中,第一元数据信息用于存储记录数据块中的值的元信息,行位置信息用于记录该数据块中所存储的每个值所属的数据在多行数据中的行位置。由此,在读取过程中就可以根据数据块的第一元数据信息和行位置信息筛选出符合读取条件的数据,由此可以避免过多无意义的数据的读取,减少I/O浪费,从而可以提升数据读取性能。
Description
技术领域
本发明涉及数据存储技术领域,特别是涉及一种数据存取方法、装置及系统。
背景技术
在分布式计算处理中(MapReduce、Hive等),经常需要从海量数据中筛选过滤出少量用户需要的数据进行计算,I/O(输入输出)量的大小是影响分布式计算处理性能的一个关键问题。例如,查询今年销量最高的前20个商品,这个查询只关心三个字段:时间(date)、商品(item)以及销售量(sales amount)。商品的其他字段,例如商品URL、商品描述、商品所属店铺等等,对该查询都是没有意义的。
为减少不必要的I/O,业界普遍采用列式存储方案对数据进行存储,以便在读取时跳过无关的列,达到减少I/O的目的。对基于现有的列式存储方案存储的数据进行读取时,虽然能够跳过无关的列,但是读取到的记录往往并非用户真正需要的数据,还需要对读取的数据进行一次筛选,以过滤掉不符合用户读取要求的记录。也就是说,基于现有的数据存储结构,在读取数据时仍有大量的I/O浪费。
由此,需要一种能够进一步减少I/O浪费的数据存取方案。
发明内容
本发明的主要目的在于提供一种数据存取方法、装置及系统,利用本发明,可以将条件筛选过程提前到数据读取阶段,由此可以减少不必要的数据读取,从而可以降低I/O浪费,提高数据读取性能。
根据本发明的一个方面,提供了一种数据存取方法,用于存储多行数据,每行数据包括多个属于不同字段的值,至少两行数据具有属于同一字段的值,该方法包括:将多行数据中属于同一字段的值写入同一数据块,不同数据块所存储的值对应于不同的字段;针对每个数据块,在指定位置写入该数据块的第一元数据信息和行位置信息,其中,第一元数据信息用于记录数据块中的值的元信息,行位置信息用于记录该数据块中所存储的每个值所属的数据在多行数据中的行位置。
由此,对于利用本发明存储的数据,在读取过程中可以根据数据块的第一元数据信息和行位置信息筛选出符合读取条件的数据,从而可以将数据筛选环节提前到数据读取阶段,避免过多无意义的数据的读取,减少I/O浪费,进而可以提升数据读取性能。
优选地,第一元数据信息可以包括:m×n位图矩阵,其中,m为预先定义的字符的个数,m个字符与自然数列m中的项一一对应,n为数据块中值的最长长度,位图矩阵中的元素aij的值为1或0,aij=1表示数据块中存在第j位字符为自然数列m中第i项所对应的字符的值,aij=0表示数据块中不存在第j位字符为自然数列m中第i项所对应的字符的值,1≤i≤m,1≤j≤n,i、j、m、n均为正整数;和/或数据块中的最小值;和/或数据块中的最大值;和/或数据块中的值在排重前的个数;和/或数据块中的值在排重后的个数;和/或数据块中的值在压缩前的大小;和/或数据块中固定值在压缩后的大小;和/或;排重压缩后的值;和/或数据块中每个值对应的行位置在行位置信息中的偏移量。
由此,可以根据第一元数据信息快速判断数据块中是否存在符合数据读取条件的值,并且还可以根据每个值对应的行位置在行位置信息中的偏移量确定符合数据读取条件的值的行位置。
优选地,行位置信息可以是通过对数据块中的值的行位置进行行程编码和zigzag编码得到的。
由此,对于重复度较高的字段(例如版本),可以通过行程编码和zigzag编码对该字段下的值的行位置进行编码,这样可以减少行位置信息的占用空间。
优选地,该数据存取方法还可以包括:在指定位置写入针对多个数据块的第二元数据信息,第二元数据信息包括以下一项或多项:版本;压缩编码;总行数;数据块个数;每个数据块对应的字段;每个数据块在多个数据块中的偏移量;魔数。由此,可以根据第二元数据信息快速确定符合数据读取条件的数据块。
优选地,每个数据块包括一个或多个子数据块,将多行数据中属于同一字段的值写入同一数据块可以包括:将多行数据中属于同一字段的值写入同一数据块下的一个或多个子数据块中,针对每个数据块在指定位置写入该数据块的第一元数据信息和行位置信息可以包括:针对每个子数据块,在指定位置写入该子数据块的第一元数据信息和行位置信息。其中,子数据块可以是压缩、读取的最小数据单元。
优选地,该方法还用于响应于查询请求读取目标值,其中,查询请求包括目标值的读取条件,该方法还可以包括:筛选出存储有目标值所对应的字段的目标数据块;根据目标数据块的第一元数据信息和行位置信息,从目标数据块中筛选出符合读取条件的目标值和目标值所对应的行位置;根据行位置,对目标值进行拼接,以将对应于同一行位置的属于不同数据块的目标值拼接为一条记录。
由此,在对利用本发明的数据存取方法所存取的数据进行读取时,可以根据数据块的第一元数据信息和行位置信息,对数据块中的值进行筛选,即可以将筛选环节提前到数据读取阶段,从而可以避免过多无意义的数据的读取,减少I/O浪费,进而可以提升数据读取效率。
优选地,读取条件包括一个或多个子条件,不同的子条件针对不同的字段,筛选出存储有目标值所对应的字段的目标数据块可以包括:筛选出与一个或多个子条件所针对的字段相同的数据块,作为目标数据块。
优选地,多个子条件之间具有预定的逻辑关系,从目标数据块中筛选出符合读取条件的目标值可以包括:基于预定的逻辑关系,对从不同的目标数据块中选出的目标值所对应的行位置进行集合运算,以得到符合读取条件的目标值。
根据本发明的另一个方面,还提供了一种数据存取系统,包括:外部存储器,用于存储多条数据;以及处理器,用于执行上文述及的数据存取方法,以将多条数据存储到外部存储器,或从外部存储器读取数据。
根据本发明的又一个方面,还提供了一种数据存取装置,用于存储多行数据,每行数据包括多个属于不同字段的值,至少两行数据具有属于同一字段的值,该装置包括:第一写入模块,用于将多行数据中属于同一字段的值写入同一数据块,不同数据块所存储的值对应于不同的字段;第二写入模块,用于针对每个数据块,在指定位置写入该数据块的第一元数据信息和行位置信息,其中,第一元数据信息用于记录数据块中的值的元信息,行位置信息用于记录该数据块中所存储的每个值所属的数据在多行数据中的行位置。
优选地,第一元数据信息可以包括:m×n位图矩阵,其中,m为预先定义的字符的个数,m个字符与自然数列m中的项一一对应,n为数据块中值的最长长度,位图矩阵中的元素aij的值为1或0,aij=1表示数据块中存在第j位字符为自然数列m中第i项所对应的字符的值,aij=0表示数据块中不存在第j位字符为自然数列m中第i项所对应的字符的值,1≤i≤m,1≤j≤n,i、j、m、n均为正整数;和/或数据块中的最小值;和/或数据块中的最大值;和/或数据块中的值在排重前的个数;和/或数据块中的值在排重后的个数;和/或数据块中的值在压缩前的大小;和/或数据块中的值在压缩后的大小;和/或排重压缩后的值;和/或数据块中每个值对应的行位置在行位置信息中的偏移量。
优选地,行位置信息可以是通过对数据块中的值的行位置进行行程编码和zigzag编码得到的。
优选地,该数据存取装置还可以包括:第三写入模块,用于在指定位置写入针对多个数据块的元数据信息,元数据信息包括以下一项或多项:版本;压缩编码;总行数;数据块个数;每个数据块对应的字段;每个数据块在多个数据块中的偏移量;魔数。
优选地,每个数据块可以包括一个或多个子数据块,第一写入模块将多行数据中属于同一字段的值写入同一数据块下的一个或多个子数据块中,针对每个子数据块,第二写入装置在指定位置写入该子数据块的第一元数据信息和行位置信息。
优选地,该数据存取装置还可以用于根据查询请求读取目标值,其中,查询请求包括目标值的读取条件,该装置还可以包括:筛选模块,用于筛选出存储有目标值所对应的字段的目标数据块;读取模块,用于根据目标数据块的第一元数据信息和行位置信息,从目标数据块中筛选出符合读取条件的目标值和目标值所对应的行位置;拼接模块,用于根据行位置,对目标值进行拼接,以将对应于同一行位置的属于不同数据块的目标值拼接为一条记录。
优选地,读取条件可以包括一个或多个子条件,不同的子条件针对不同的字段,筛选模块可以筛选出与一个或多个子条件所针对的字段相同的数据块,作为目标数据块。
优选地,多个子条件之间可以具有预定的逻辑关系,该装置还可以包括:集合运算模块,用于基于预定的逻辑关系,对从不同的目标数据块中选出的目标值所对应的行位置进行集合运算,以得到符合读取条件的目标值。
本发明的数据存取方法、装置及系统在存储多行数据时,将属于同一字段的数据存入同一数据块,并写入针对该数据块的第一元数据信息和行位置信息,由此在对利用本发明的数据存取方法、装置及系统存储的数据进行读取时,可以根据数据块的第一元数据信息和行位置信息筛选出符合读取条件的数据,从而可以将数据筛选环节提前到数据读取阶段,避免过多无意义的数据的读取,减少I/O浪费,进而可以提升数据读取性能。
附图说明
通过结合附图对本公开示例性实施方式进行更详细的描述,本公开的上述以及其它目的、特征和优势将变得更加明显,其中,在本公开示例性实施方式中,相同的参考标号通常代表相同部件。
图1是示出了根据本发明一实施例的数据存取方法存储数据的示意性流程图。
图2至图4是示出了基于本发明的几种数据存储结构的示意图。
图5是示出了根据本发明一实施例的数据存取方法读取数据的示意性流程图。
图6是示出了根据本发明一实施例的数据存取系统的结构示意图。
图7是示出了根据本发明一实施例的数据存取装置的结构示意图。
具体实施方式
下面将参照附图更详细地描述本公开的优选实施方式。虽然附图中显示了本公开的优选实施方式,然而应该理解,可以以各种形式实现本公开而不应被这里阐述的实施方式所限制。相反,提供这些实施方式是为了使本公开更加透彻和完整,并且能够将本公开的范围完整地传达给本领域的技术人员。
如前所述,在对利用现有的列式存储方案存储的数据进行读取时,虽然在数据读取过程中能够减少一定的I/O,但是读取出的数据往往并非用户真正需要的数据,还需要对读取的数据进行一次筛选,使得整个数据读取过程仍会造成一定的I/O浪费。
针对于此,本发明提出了一种新的数据存取方案,本发明的数据存取方案主要包括数据存储过程和数据读取过程。存储过程用于存储多条数据,数据读取过程用于根据读取条件对存储的数据进行读取。在对利用本发明的数据存取方案存储的数据进行读取时,可以根据文件的存储结构,在读取过程筛选出符合读取条件的数据,由此可以避免过多无意义的数据的读取,减少I/O浪费,从而可以提升数据读取性能。
下面结合附图分别就本发明的数据存取方案的存储过程和读取过程进行说明。
一、存储过程
图1是示出了根据本发明一实施例的数据存储过程的示意性流程图。
图2是示出了基于本发明的一种数据存储结构的示意图。
参见图1、图2,在步骤S110,将多行数据中属于同一字段的值写入同一数据块,不同数据块所存储的值对应于不同的字段。
多行数据即为待存储的多条数据,每行(条)数据可以视为关于一个实体的描述,其可以包括多个属于不同字段的值。其中,本文述及的“字段”表示与对象或类关联的变量,其可以指示值所属的类别,例如,日期、版本号、名称、售价等均可以作为描述实体的字段。
如前文所述,本发明的数据存取方案主要是针对列式存储的业务场景,在实际需要进行列式存储的业务场景中,同一业务下的待存储的多行数据一般具有属于相同字段的值。因此,本文述及的待存储的多行数据中至少存在两行数据具有属于同一字段的值。
将多行数据中属于同一字段的值写入同一数据块时,可以将其写入物理上连续存储的同一数据块,也可以写入属于同一数据块但是物理上不连续的区域。
由于同一数据块下的值属于同一字段,不同数据块的值对应于不同的字段。因此,还可以针对不同的数据块使用与其存储的值所对应的字段相适应的数据压缩算法进行压缩,以进一步减小I/O。
在步骤S120,针对每个数据块,在指定位置写入该数据块的第一元数据信息和行位置信息。
行位置信息用于记录该数据块中所存储的每个值所属的数据在多行数据中的行位置。在数据读取阶段,可以根据读取的值的行位置,对读取的值进行拼接,形成完整的记录,根据行位置拼接数据的过程将在下文进行说明,这里暂不赘述。
同一数据块下存储的值在排重后很可能仅为有限的几个值,因此出于节省存储空间的考虑,本发明可以优选地采取行程编码和zigzag编码相结合的方式来获取行位置信息,关于行程编码和zigzag编码的各自编码原理为本领域技术人员所公知,这里不再赘述,下面结合具体实施例就行位置信息的编码过程做示意性说明。
假设有300行均包括ver(版本)字段的数据,并且前100行数据中属于ver字段的值均为10.0.0.1,第101行至200行数据中属于ver字段的值均为9.0.0.1,第201行至300行数据中属于ver字段的值均为10.0.0.1。在利用行程编码和zigzag编码对这300行数据中属于ver字段的值的行位置进行编码后,可以得到值10.0.0.1的行位置编码为100,-100,100,物理存储为3字节,值9.0.0.1的行位置编码为-100,100,-100,物理存储3字节。其中,100,-100,100中第一个100和最后一个100表示前100行和后100行数据中ver字段的值为10.0.0.1,中间的-100表示第201行至300行数据中ver字段的值为其它数值;-100,100,-100中中间的100表示第201行至300行数据中ver字段的值为9.0.0.1,第一个-100和最后一个-100表示前100行和后100行数据中ver字段的值为其它数值。
第一元数据信息用于记录数据块中的值的元信息,其可以包括与数据块中存储的值相关的多种类型的统计信息。如图2所示,第一元数据信息可以包括元信息大小、字符位图、排重前值的个数、排重后值的个数、排重压缩后的值、最大值、最小值、压缩前大小、压缩后大小、每个值对应的行位置在行位置信息中的偏移量的个数等等。
字符位图中记录着数据块中存储的值的范围。本发明述及的字符位图可以视为m×n位图矩阵。其中,m为预先定义的字符的个数,m个字符与自然数列m中的项一一对应,n为数据块中值的最长长度,位图矩阵中的元素aij的值为1或0,aij=1表示数据块中存在第j位字符为自然数列m中第i项所对应的字符的值,aij=0表示数据块中不存在第j位字符为自然数列m中第i项所对应的字符的值,1≤i≤m,1≤j≤n,i、j、m、n均为正整数。例如,m×n位图矩阵可以是95(常见字符数)*16(常见值长度)的矩阵,字符“a”表示第一个字符,字符“c”表示第三个字符,当该矩阵中代表第1个字符是“a”的元素皆为0时,即可确定不存在第一个字符为“a”的值,由此可以确定数据块中不可能存在值“abc”、“aed”。
需要说明的是,字符位图中记录的值是经过排重后的值。由此,在根据第一元数据信息中所记录的数据块中的值的统计信息,对数据块中的值进行筛选时,是对数据块中排重后的值进行筛选,而非逐一对每个值进行筛选,使得在数据读取过程中可以大大减少筛选测试的执行次数,可以提高数据读取效率。
图3是示出了基于本发明的另一种数据存储结构的示意图。
如图3所示,与图2所示的数据结构相比,不同之处在于,每个数据块可以进一步划分为若干个子数据块,子数据块可以是压缩、读取的最小数据单元,并且不同数据块下的子数据块的大小可以不同。
由此,对于步骤S110来说,可以将多行数据中属于同一字段的值写入该数据块下的一个或多个子数据块。对于步骤S120来说,可以针对每个子数据块,在指定位置写入该子数据块的第一元数据信息和行位置信息。其中,关于第一元数据信息和行位置信息已在上文做了详细说明,这里不再赘述。
参见图2、图3,还可以在指定位置写入针对多个数据块的第二元数据信息,第二元数据信息主要记录着数据块层级上的统计信息,其可以包括多种类型的信息。如图2、图3中所示,第二元数据信息可以包括版本、总行数、压缩编码、数据块个数、每个数据块对应的字段和每个数据块在多个数据块中的偏移量、魔数等多种类型的信息。
版本可以指示多个数据块所存储的多行数据所对应的版本信息;总行数即存储在多个数据块中的行数据的个数;压缩编码可以指示数据块中存储的数据采取的压缩算法;魔数可以用于确定文件类型。
对于很多类型的文件,其起始的几个字节的内容是固定的(或是有意填充,或是本就如此),这几个字节的内容即被称为魔数(magic number)。
在数据读取过程中,可以根据第二元数据信息中记录的每个数据块所对应的字段以及每个数据块在多个数据块中的偏移量,筛选出与存储有数据读取请求所针对的字段的数据块,以便于根据筛选出的数据块做进一步的数据筛选,具体的读取过程将在下文说明,这里暂不赘述。
至此,结合图2、图3详细说明了基于本发明的两种数据存储结构。应该知道,在利用本发明数据存取方案存储数据时,还可以有多种其它变形形式的数据存储结构,作为示例,图4是示出了另一种基于本发明的数据存储结构的示意图,如图4所示,存储的数据文件主要由元信息(Footer)和数据(Data)两部分构成。
Data存放数据文件的实际数据,包含若干个行组(RowGroup),行组可以是物理上划分的具有一定大小的存储单元(例如256MB),每个行组可以用于存储一定行数的数据,在数据读取过程中,每个行组可以在分布式计算处理中被单独处理。
每个行组包括若干个数据块,每个数据块可以进一步分为若干个子数据块,关于数据块和子数据块的描述,可以参见上文结合图2、图3的描述,这里不再赘述。
Footer用于存放数据文件的元数据信息,包括文件元信息(FileMeta)、文件元信息长度(FileMeta_Len)、魔数(magic number)。其中,魔数用于确定文件数据的类型,文件元信息主要包括版本、文件总行数、压缩编码、自定义kv、行组数、每个行组的元数据等等。每个行组的元数据可以进一步包括行组的行数、总大小、文件偏移、数据块的个数、每个数据块的元信息例如块名、数据块偏移等。其中,文件偏移用于指示该行组在多个行组中的偏移量,块名可以指示数据块所对应的字段,数据偏移用于指示数据块在该行组下的多个数据块中的偏移量。
二、数据读取过程
图5是示出了根据本发明一实施例的读取数据的过程的示意性流程图。
参见图5,首先可以根据查询请求携带的读取条件,筛选出存储有目标值所对应的字段的目标数据块(步骤S510)。
如上文所述,可以在指定位置写入针对多个数据块的第二元数据信息,第二元数据信息可以包括每个数据块所对应的字段。因此可以根据第二元数据信息初步筛选出符合数据读取条件的目标数据块。
在筛选出目标数据块后,就可以执行步S520,从目标数据块中进一步筛选出符合读取条件的目标值和目标值所对应的行位置。
一般来说,读取条件可以分为一个或多个子条件,不同的子条件针对不同的字段,并且多个子条件之间具有预定的逻辑关系。
因此,对于步骤S510来说,可以筛选出与一个或多个子条件所针对的字段相同的数据块,作为目标数据块。对于步骤S520来说,可以基于多个子条件之间的逻辑关系,对从不同的目标数据块中筛选得到的目标值所对应的行位置进行集合运算(例如交集、并集运算),以得到符合读取条件的目标值。
最后可以执行步骤S530,根据行位置,对目标值进行拼接,以将对应于同一行位置的属于不同数据块的目标值拼接为一条记录。
由此,在对利用本发明的数据存取方案存储的数据进行读取时,在读取过程中就可以根据读取条件进行筛选,得到符合读取条件的目标数据。从而可以尽量避免无意义的数据的读取,减少I/O浪费,进而可以提升数据读取性能。
2.1、数据读取过程的简化
需要说明的是,在多个子条件之间的逻辑关系为“逻辑与”的情况下,在数据读取过程中还可以进行一定程度的简化。例如,在多个子条件分别针对多个字段a、b、c,且多个子条件之间是逻辑与的情况下,在根据子条件对存储字段a的数据块A进行筛选时,当数据块A中前N行不存在满足子条件的值时,在存储字段b的数据块B以及存储字段c的数据块C中也可以跳过相应行数,因为任一列在某一行没有值,说明该行不满足筛选条件,无需输出。因此,在数据块A中查找到符合子条件的值后,可以根据值的行位置,仅在数据块B和数据块C中相同行位置处查找是否存在满足相应的子条件的值,以简化读取操作。
举例来说,对于1亿行的日志数据,每行日志数据包括dn、pv、ver等多个字段,其中,ver字段排重后独立取值100个,存在最大版本ver=10.0.0.1的记录100行,存储ver字段的总page数1000个。
数据读取请求为:Select count(distinct dn),sum(pv)from Table where ver>=10.0.0.1。按照现有的方案,需要读取dn、pv、ver三个字段各1亿行数据,然后再进行1亿次筛选测试,最后得到100行数据进行计算,以得到最终结果。
而基于本发明的数据存取方案,理想情况下(即最大版本ver=10.0.0.1的100行记录都存储在一个page中的情况下)可以直接跳过999个page,对唯一命中的page进行值筛选,以得到满足条件的100个值的行位置信息,然后根据这100个值的行位置信息,从存储dn、pv字段的page中选出与这100个值的行位置信息相同的dn、pv字段的值,对这些值进行拼接,得到最终结果。
下面以图4所示的数据存储结构,数据读取请求针对多个字段,且请求的多个字段之间的逻辑关系为逻辑与为例,对数据读取过程做进一步说明。
1)首先,加载元信息,读取数据文件的文件元信息,根据文件元信息,筛选出每个行组中符合数据读取条件的目标数据块。
2)每个分布式计算单元可以负责处理一个行组,多个行组可以交由多个分布式计算单元并行处理,每个行组下的处理逻辑如下:
2.1)按照顺序,读取第一个目标数据块中第一个子数据块中的第一元数据信息,判断该子数据块中是否包含满足数据读取条件的值,如果不包含,则直接跳过该子数据块,其它目标数据块在后续处理中也一并跳过相应行数,进行下一个子数据块的判断。如果判断结果为可能包含,则进入下一步。
2.2)读取第一元数据信息中的排重压缩后的值,进行解压,得到已排重的列值,根据字符位图判断哪些值满足数据读取条件,并获取对应的偏移量,读取行位置编码。
2.3)依次读取查找后续各目标数据块后得到的行位置编码,对各自的行位置编码求交集(任一列在某一行没有值,说明该行不满足筛选条件,无需输出),然后根据位置编码和值,将对应于同一位置编码的属于不同字段的值拼接为一条记录,完成读取。
3)多个行组下输出的全部记录即为最终读取结果。
至此,结合图1至图5详细说明了本发明的数据存取方案,另外本发明还提供了一种数据存取系统和数据存取装置,数据存取系统和数据存取装置均可以用于执行本发明的数据存取方案,因下面主要就数据存取系统和数据存取装置的基本结构进行说明,对于其中的细节部分可以参见上文相关说明,下文不再详述。
图6是示出了根据本发明一实施例的数据存取系统的结构的示意性方框图。
参见图6,数据存取系统600包括外部存储器610和处理器620。处理器620可以执行上文结合图1-图5描述的数据存取方案将数据存储在外部存储器610中,也可以根据读取请求从外部存储器610中读取目标数据。其中,外部存储器610是指除计算机内存及CPU缓存以外的储存器,断电后仍能保存数据,包括硬盘、软盘、光盘、U盘、磁带等。关于存储过程和读取过程可以参见上文相关说明,这里不再赘述。
图7是示出了根据本发明一实施例的数据存取装置的结构的示意性方框图。
参见图7,数据存取装置700包括第一写入模块710和第二写入模块720。
第一写入模块710可以将多行数据中属于同一字段的值写入同一数据块,不同数据块所存储的值对应于不同的字段。
第二写入模块720用于针对每个数据块,在指定位置写入该数据块的第一元数据信息和行位置信息,其中,第一元数据信息用于存储数据块中的值的元信息,行位置信息用于记录该数据块中所存储的每个值所属的数据在多行数据中的行位置。其中,关于第一元数据信息和行位置信息的描述,可以参见上文相关说明,这里不再赘述。
如图7所示,数据存取装置700还可以可选地包括第三写入模块730。第三写入模块730可以在指定位置写入针对多个数据块的元数据信息,元数据信息可以包括以下一项或多项:版本、压缩编码、文件总行数、数据块个数、每个数据块对应的字段、每个数据块在多个数据块中的偏移量、魔数。
如图7所示,数据存取装置700还可以可选地包括筛选模块740、读取模块750、拼接模块760。
筛选模块740用于筛选出存储有目标值所对应的字段的目标数据块。读取模块750用于根据目标数据块的第一元数据信息和行位置信息,从目标数据块中筛选出符合读取条件的目标值和目标值所对应的行位置。拼接模块760用于根据行位置,对目标值进行拼接,以将对应于同一行位置的属于不同数据块的目标值拼接为一条记录。
作为本发明的一个可选实施例,读取条件可以包括一个或多个子条件,不同的子条件可以针对不同的字段,筛选模块740可以筛选出与一个或多个子条件所针对的字段相同的数据块,作为目标数据块。
另外,多个子条件之间可以具有预定的逻辑关系,数据存取装置700还可以包括集合运算模块770。集合运算模块770可以基于预定的逻辑关系,对从不同的目标数据块中选出的目标值所对应的行位置进行集合运算,以得到符合读取条件的目标值。
上文中已经参考附图详细描述了根据本发明的数据存取方法、装置及系统。
此外,根据本发明的方法还可以实现为一种计算机程序,该计算机程序包括用于执行本发明的上述方法中限定的上述各步骤的计算机程序代码指令。或者,根据本发明的方法还可以实现为一种计算机程序产品,该计算机程序产品包括计算机可读介质,在该计算机可读介质上存储有用于执行本发明的上述方法中限定的上述功能的计算机程序。本领域技术人员还将明白的是,结合这里的公开所描述的各种示例性逻辑块、模块、电路和算法步骤可以被实现为电子硬件、计算机软件或两者的组合。
附图中的流程图和框图显示了根据本发明的多个实施例的系统和方法的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段或代码的一部分,所述模块、程序段或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标记的功能也可以以不同于附图中所标记的顺序发生。例如,两个连续的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
以上已经描述了本发明的各实施例,上述说明是示例性的,并非穷尽性的,并且也不限于所披露的各实施例。在不偏离所说明的各实施例的范围和精神的情况下,对于本技术领域的普通技术人员来说许多修改和变更都是显而易见的。本文中所用术语的选择,旨在最好地解释各实施例的原理、实际应用或对市场中的技术的改进,或者使本技术领域的其它普通技术人员能理解本文披露的各实施例。
Claims (17)
1.一种数据存取方法,用于存储多行数据,每行所述数据包括多个属于不同字段的值,至少两行所述数据具有属于同一字段的值,该方法包括:
将所述多行数据中属于同一字段的值写入同一数据块,不同数据块所存储的值对应于不同的字段;
针对每个所述数据块,在指定位置写入该数据块的第一元数据信息和行位置信息,其中,所述第一元数据信息用于记录所述数据块中的值的元信息,所述行位置信息用于记录该数据块中所存储的每个值所属的数据在所述多行数据中的行位置。
2.根据权利要求1所述的数据存取方法,其中,所述第一元数据信息包括:
m×n位图矩阵,其中,m为预先定义的字符的个数,m个字符与自然数列m中的项一一对应,n为所述数据块中值的最长长度,位图矩阵中的元素aij的值为1或0,aij=1表示所述数据块中存在第j位字符为自然数列m中第i项所对应的字符的值,aij=0表示所述数据块中不存在第j位字符为自然数列m中第i项所对应的字符的值,1≤i≤m,1≤j≤n,i、j、m、n均为正整数;和/或
最小值;和/或
最大值;和/或
排重前值的个数;和/或
排重后值的个数;和/或
压缩前的大小;和/或
压缩后的大小;和/或
排重压缩后的值;和/或
每个值对应的行位置在所述行位置信息中的偏移量。
3.根据权利要求1所述的数据存取方法,其中,所述行位置信息是通过对所述数据块中的值的行位置进行行程编码和zigzag编码得到的。
4.根据权利要求1所述的数据存取方法,还包括:
在指定位置写入针对多个所述数据块的第二元数据信息,所述第二元数据信息包括以下一项或多项:
版本;
压缩编码;
总行数;
数据块个数;
每个所述数据块对应的字段;
每个所述数据块在多个数据块中的偏移量;
魔数。
5.根据权利要求1所述的数据存取方法,其中,每个所述数据块包括一个或多个子数据块,
将所述多行数据中属于同一字段的值写入同一数据块包括:将所述多行数据中属于同一字段的值写入同一数据块下的一个或多个子数据块中,
针对每个所述数据块在指定位置写入该数据块的第一元数据信息和行位置信息包括:针对每个所述子数据块,在指定位置写入该子数据块的第一元数据信息和行位置信息。
6.根据权利要求1至5中任何一项所述的数据存取方法,还用于响应于查询请求读取目标值,其中,所述查询请求包括目标值的读取条件,该方法还包括:
筛选出存储有所述目标值所对应的字段的目标数据块;
根据所述目标数据块的第一元数据信息和行位置信息,从所述目标数据块中筛选出符合所述读取条件的目标值和目标值所对应的行位置;
根据所述行位置,对所述目标值进行拼接,以将对应于同一行位置的属于不同数据块的目标值拼接为一条记录。
7.根据权利要求6所述的数据存取方法,其中,所述读取条件包括一个或多个子条件,不同的子条件针对不同的字段,筛选出存储有所述目标值所对应的字段的目标数据块包括:
筛选出与所述一个或多个子条件所针对的字段相同的数据块,作为所述目标数据块。
8.根据权利要求7所述的数据存取方法,其中,所述多个子条件之间具有预定的逻辑关系,从所述目标数据块中筛选出符合所述读取条件的目标值包括:
基于所述预定的逻辑关系,对从不同的目标数据块中选出的目标值所对应的行位置进行集合运算,以得到符合所述读取条件的目标值。
9.一种数据存取系统,包括:
外部存储器,用于存储多条数据;以及
处理器,用于执行根据权利要求1-8中任何一项所述的方法,以将多条数据存储到所述外部存储器,或从所述外部存储器读取数据。
10.一种数据存取装置,用于存储多行数据,每行所述数据包括多个属于不同字段的值,至少两行所述数据具有属于同一字段的值,该装置包括:
第一写入模块,用于将所述多行数据中属于同一字段的值写入同一数据块,不同数据块所存储的值对应于不同的字段;
第二写入模块,用于针对每个所述数据块,在指定位置写入该数据块的第一元数据信息和行位置信息,其中,所述第一元数据信息用于记录所述数据块中的值的元信息,所述行位置信息用于记录该数据块中所存储的每个值所属的数据在所述多行数据中的行位置。
11.根据权利要求11所述的数据存取装置,其中,所述第一元数据信息包括:
m×n位图矩阵,其中,m为预先定义的字符的个数,m个字符与自然数列m中的项一一对应,n为所述数据块中值的最长长度,位图矩阵中的元素aij的值为1或0,aij=1表示所述数据块中存在第j位字符为自然数列m中第i项所对应的字符的值,aij=0表示所述数据块中不存在第j位字符为自然数列m中第i项所对应的字符的值,1≤i≤m,1≤j≤n,i、j、m、n均为正整数;和/或
最小值;和/或
最大值;和/或
排重前值的个数;和/或
排重后值的个数;和/或
压缩前的大小;和/或
压缩后的大小;和/或
排重压缩后的值;和/或
每个值对应的行位置在所述行位置信息中的偏移量。
12.根据权利要求11所述的数据存取方法,其中,所述行位置信息是通过对所述数据块中的值的行位置进行行程编码和zigzag编码得到的。
13.根据权利要求10所述的数据存取装置,还包括:
第三写入模块,用于在指定位置写入针对多个所述数据块的元数据信息,所述元数据信息包括以下一项或多项:
版本;
压缩编码;
总行数;
数据块个数;
每个所述数据块对应的字段;
每个所述数据块在多个数据块中的偏移量;
魔数。
14.根据权利要求10所述的数据存取装置,其中,每个所述数据块包括一个或多个子数据块,
所述第一写入模块将所述多行数据中属于同一字段的值写入同一数据块下的一个或多个子数据块中,
针对每个所述子数据块,所述第二写入装置在指定位置写入该子数据块的第一元数据信息和行位置信息。
15.根据权利要求10至14中任何一项所述的数据存取装置,还用于根据查询请求读取目标值,其中,所述查询请求包括目标值的读取条件,该装置包括:
筛选模块,用于筛选出存储有所述目标值所对应的字段的目标数据块;
读取模块,用于根据所述目标数据块的第一元数据信息和行位置信息,从所述目标数据块中筛选出符合所述读取条件的目标值和目标值所对应的行位置;
拼接模块,用于根据所述行位置,对所述目标值进行拼接,以将对应于同一行位置的属于不同数据块的目标值拼接为一条记录。
16.根据权利要求15所述的数据存取装置,其中,所述读取条件包括一个或多个子条件,不同的子条件针对不同的字段,所述筛选模块筛选出与所述一个或多个子条件所针对的字段相同的数据块,作为所述目标数据块。
17.根据权利要求16所述的数据存取装置,其中,所述多个子条件之间具有预定的逻辑关系,该装置还包括:
集合运算模块,用于基于所述预定的逻辑关系,对从不同的目标数据块中选出的目标值所对应的行位置进行集合运算,以得到符合所述读取条件的目标值。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710146261.8A CN108572788A (zh) | 2017-03-13 | 2017-03-13 | 数据存取方法、装置及系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710146261.8A CN108572788A (zh) | 2017-03-13 | 2017-03-13 | 数据存取方法、装置及系统 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN108572788A true CN108572788A (zh) | 2018-09-25 |
Family
ID=63578370
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201710146261.8A Pending CN108572788A (zh) | 2017-03-13 | 2017-03-13 | 数据存取方法、装置及系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN108572788A (zh) |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111190895A (zh) * | 2018-11-15 | 2020-05-22 | 百度在线网络技术(北京)有限公司 | 列式存储数据的组织方法、装置及存储介质 |
CN112015791A (zh) * | 2019-05-30 | 2020-12-01 | 阿里巴巴集团控股有限公司 | 数据处理方法、装置、电子设备及计算机存储介质 |
CN112073174A (zh) * | 2020-07-28 | 2020-12-11 | 广州骏伯网络科技有限公司 | 通讯账号解密方法、装置、设备、存储介质及信息交互系统 |
WO2024007992A1 (zh) * | 2022-07-08 | 2024-01-11 | 清华大学 | 数据存储方法、读取方法、装置、存储介质及程序产品 |
Citations (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4021782A (en) * | 1974-01-07 | 1977-05-03 | Hoerning John S | Data compaction system and apparatus |
CN101411109A (zh) * | 2006-08-14 | 2009-04-15 | 摩托罗拉公司 | 用于数据块中的差错检测的方法和装置 |
CN102346693A (zh) * | 2010-07-30 | 2012-02-08 | 海信集团有限公司 | 一种数据存储和数据恢复方法 |
CN102890721A (zh) * | 2012-10-16 | 2013-01-23 | 苏州迈科网络安全技术股份有限公司 | 基于列存储技术的数据库建立方法及系统 |
US20130086447A1 (en) * | 2011-10-04 | 2013-04-04 | Cleversafe, Inc. | Updating data stored in a dispersed storage network |
CN103914462A (zh) * | 2012-12-31 | 2014-07-09 | 中国移动通信集团公司 | 一种数据存储和查询方法以及装置 |
CN104125285A (zh) * | 2014-08-02 | 2014-10-29 | 成都致云科技有限公司 | 一种高io吞吐量的云存储读写方法 |
CN105204782A (zh) * | 2015-10-13 | 2015-12-30 | 中国联合网络通信集团有限公司 | 一种实现数据存储的方法及装置 |
US20160306699A1 (en) * | 2012-04-25 | 2016-10-20 | International Business Machines Corporation | Encrypting data for storage in a dispersed storage network |
-
2017
- 2017-03-13 CN CN201710146261.8A patent/CN108572788A/zh active Pending
Patent Citations (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4021782A (en) * | 1974-01-07 | 1977-05-03 | Hoerning John S | Data compaction system and apparatus |
CN101411109A (zh) * | 2006-08-14 | 2009-04-15 | 摩托罗拉公司 | 用于数据块中的差错检测的方法和装置 |
CN102346693A (zh) * | 2010-07-30 | 2012-02-08 | 海信集团有限公司 | 一种数据存储和数据恢复方法 |
US20130086447A1 (en) * | 2011-10-04 | 2013-04-04 | Cleversafe, Inc. | Updating data stored in a dispersed storage network |
US20160306699A1 (en) * | 2012-04-25 | 2016-10-20 | International Business Machines Corporation | Encrypting data for storage in a dispersed storage network |
CN102890721A (zh) * | 2012-10-16 | 2013-01-23 | 苏州迈科网络安全技术股份有限公司 | 基于列存储技术的数据库建立方法及系统 |
CN103914462A (zh) * | 2012-12-31 | 2014-07-09 | 中国移动通信集团公司 | 一种数据存储和查询方法以及装置 |
CN104125285A (zh) * | 2014-08-02 | 2014-10-29 | 成都致云科技有限公司 | 一种高io吞吐量的云存储读写方法 |
CN105204782A (zh) * | 2015-10-13 | 2015-12-30 | 中国联合网络通信集团有限公司 | 一种实现数据存储的方法及装置 |
Non-Patent Citations (2)
Title |
---|
丁祥武: "列存储系统的关键技术研究", 《中国博士学位论文全文数据库(电子期刊) 信息科技辑》 * |
毛小孩: "从NSM到Parquet:存储结构的衍化", 《博客园》 * |
Cited By (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111190895A (zh) * | 2018-11-15 | 2020-05-22 | 百度在线网络技术(北京)有限公司 | 列式存储数据的组织方法、装置及存储介质 |
CN111190895B (zh) * | 2018-11-15 | 2023-04-28 | 百度在线网络技术(北京)有限公司 | 列式存储数据的组织方法、装置及存储介质 |
CN112015791A (zh) * | 2019-05-30 | 2020-12-01 | 阿里巴巴集团控股有限公司 | 数据处理方法、装置、电子设备及计算机存储介质 |
WO2020238750A1 (zh) * | 2019-05-30 | 2020-12-03 | 阿里巴巴集团控股有限公司 | 数据处理方法、装置、电子设备及计算机存储介质 |
CN112015791B (zh) * | 2019-05-30 | 2024-06-07 | 阿里云计算有限公司 | 数据处理方法、装置、电子设备及计算机存储介质 |
CN112073174A (zh) * | 2020-07-28 | 2020-12-11 | 广州骏伯网络科技有限公司 | 通讯账号解密方法、装置、设备、存储介质及信息交互系统 |
CN112073174B (zh) * | 2020-07-28 | 2023-06-27 | 广州骏伯网络科技有限公司 | 通讯账号解密方法、装置、设备、存储介质及信息交互系统 |
WO2024007992A1 (zh) * | 2022-07-08 | 2024-01-11 | 清华大学 | 数据存储方法、读取方法、装置、存储介质及程序产品 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN103874980B (zh) | 存储系统中的映射 | |
CN103152395B (zh) | 一种分布式文件系统的存储方法及装置 | |
CN103392207B (zh) | 非易失性存储的自身日志记录和层级一致性 | |
CN103902403B (zh) | 经由冗余阵列的非易失性存储器编程故障恢复 | |
CN109343790B (zh) | 一种基于nand flash的数据存储方法、终端设备及存储介质 | |
CN108572788A (zh) | 数据存取方法、装置及系统 | |
CN102508784B (zh) | 视频监控设备中闪存卡的数据存储方法及其系统 | |
US8041883B2 (en) | Restoring storage devices based on flash memories and related circuit, system, and method | |
CN103019887B (zh) | 数据备份方法及装置 | |
CN104220991B (zh) | 用于允许数据在nand闪存上的有效存储的架构 | |
CN109952568B (zh) | 用于高速搜索或过滤大数据集的系统和方法 | |
US20070150809A1 (en) | Division program, combination program and information processing method | |
CN102301349A (zh) | 数据库操作意识条带化技术 | |
JP2005267600A5 (zh) | ||
JPS6115243A (ja) | メモリ割当て方法 | |
CN104160398B (zh) | 用于大对象数据内的结构化内容的方法及其系统 | |
CN110032521A (zh) | 用于增强闪存转换层映射灵活性以得到性能和寿命改进的方法和系统 | |
CN104205065B (zh) | 用于列表数据压缩的多重分类 | |
CN101739351A (zh) | 一种用来管理一记忆装置的方法以及其相关的记忆装置 | |
CN102171663A (zh) | 管理缓存内容的存储 | |
CN110196847A (zh) | 数据处理方法和装置、存储介质及电子装置 | |
CN102893265A (zh) | 管理可独立访问的数据单元的存储 | |
CN110597865A (zh) | 一种处理用户标签的方法、装置、计算设备及存储介质 | |
CN104951482B (zh) | 一种操作Sparse格式的镜像文件的方法及装置 | |
US9292549B2 (en) | Method and system for index serialization |
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 | ||
TA01 | Transfer of patent application right |
Effective date of registration: 20200709 Address after: 310052 room 508, floor 5, building 4, No. 699, Wangshang Road, Changhe street, Binjiang District, Hangzhou City, Zhejiang Province Applicant after: Alibaba (China) Co.,Ltd. Address before: 510627 Guangdong city of Guangzhou province Whampoa Tianhe District Road No. 163 Xiping Yun Lu Yun Ping B radio square 14 storey tower Applicant before: Guangzhou Dongjing Computer Technology Co.,Ltd. |
|
TA01 | Transfer of patent application right | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20180925 |
|
RJ01 | Rejection of invention patent application after publication |