CN102880615A - 一种数据存储方法和装置 - Google Patents
一种数据存储方法和装置 Download PDFInfo
- Publication number
- CN102880615A CN102880615A CN201110198294XA CN201110198294A CN102880615A CN 102880615 A CN102880615 A CN 102880615A CN 201110198294X A CN201110198294X A CN 201110198294XA CN 201110198294 A CN201110198294 A CN 201110198294A CN 102880615 A CN102880615 A CN 102880615A
- Authority
- CN
- China
- Prior art keywords
- data
- information
- file
- segment
- 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
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明实施例公开了一种数据存储方法和装置,该方法包括:获得需要存储的数据和所述数据的逻辑存储信息;根据所述逻辑存储信息将所述数据以段为单位存储在数据文件中,并在所述数据文件中形成数据段和数据段索引,所述数据段索引用于在所述数据文件中定位数据所在的数据段,以便分布式集群并行处理所述数据文件的数据段。采用本发明,可提高分布式集群中的数据处理效率。
Description
技术领域
本发明涉及数据存储领域,尤其涉及一种数据存储方法、数据访问方法和数据存储装置。
背景技术
分布式数据仓库需要对T/P级(即1024G或1024T,G为1024M,M为1024K,K为1024比特)的海量数据进行分析处理,这些数据是各个客户提供的业务或用户行为信息,逻辑上通常以表(Table)的形式存储。传统的数据库(Database)/数据仓库(Data Warehouse)产品通常以行为单位对记录进行存储,访问的时候也只能整行读取。这种处理方式对需要处理海量数据的分布式数据仓库系统来说,存在3个严重的问题:
1、为方便统计、计算等应用场景,数据仓库中的表通常都是宽表,一般都是几十、几百个字段,数据冗余非常大,在以行为单位的存储、访问模型中,哪怕只需要访问一个字段(通常一个字段对应一列),也需要读取整个记录的所有字段,然后留下需要的信息,将不需要的字段抛弃。这个过程会浪费很多的本地磁盘输入输出(IO),无疑会导致集群的处理效率低下,特别是在需要访问的字段数远小于整表实际的字段数的时候。而这种情况在数据仓库需要处理的业务类型中非常常见。
2、在分布式数据仓库中,业务请求通常会被分拆成多个任务,分别由集群中的各个节点执行,当需要访问的数据量越大的时候,所需要参与计算的节点就越多。在传统以行为单位存储、访问的模型中,由于会读取大量冗余的字段信息,会明显增大业务的计算规模,导致集群中计算资源的严重浪费,进一步导致整个集群的处理效率低下。
3、在分布式数据仓库中,集群中参与计算的各个节点之间需要通过网络共享、传输大量的数据,需要传输的数据量越大,网络带宽的负载就越大,进而影响整个集群的处理效率。而在以行为单位的存储、访问模型中,由于有大量的数据是冗余的,在进行业务处理的时候,会浪费大量的网络带宽。
因此,若没有高效的数据逻辑存储结构,会使得集群处理的效率底下,甚至很可能会导致计算任务无法完成。当前的部分数据库,例如Oracle通过压缩技术部分缓解,但无法从根本上解决。
发明内容
本发明实施例所要解决的技术问题在于,提供一种数据存储方法及装置。可提高分布式集群中的数据处理效率。
为了解决上述技术问题,本发明实施例提供了一种数据存储方法包括:
获得需要存储的数据和所述数据的逻辑存储信息;
根据所述逻辑存储信息将所述数据以段为单位存储在数据文件中,并在所述数据文件中形成数据段和数据段索引,所述数据段索引用于在所述数据文件中定位数据所在的数据段,以便分布式集群并行处理所述数据文件的数据段。
其中,所述需要存储的数据为列簇数据,所述获得需要存储的数据和所述数据的逻辑存储信息包括:
获得列簇数据和所述列簇数据的逻辑存储信息,所述列簇数据中包括一个数据表中的多列数据,所述逻辑存储信息用于将所述列簇数据存储在所述数据文件中;
所述方法还包括获得列簇定义信息,所述列簇定义信息中包括所述数据表中各列簇数据的组成信息以及各列簇数据的逻辑存储位置。
在所述获得列簇数据之前包括:
根据数据表结构和业务将所述数据表分为多个列簇数据。
数据段还可包括数据单元,所述数据单元中包括数据块,所述方法还包括:
根据所述逻辑存储信息将所述数据格式化为多个数据块;
将所述多个数据块存储在一个数据单元中,再将多个数据单元存储在一个数据段中,并在所述数据段中形成所述数据单元的数据单元索引。
所述将多个数据单元存储在一个数据段中包括,将多个数据单元压缩后存储在一个数据段中。
所述数据文件为数据仓库中的存储文件。
相应的,本发明实施例还提供了一种数据访问方法,包括:
获得需要访问的数据的数据文件信息;
根据所述数据文件信息获取所述数据文件中存储的数据段索引信息,所述数据段索引用于在所述数据文件中定位数据所在的数据段,以便分布式集群并行处理所述数据文件的数据段;
根据所述数据段索引信息获取所述数据在所述数据文件的逻辑存储位置;
根据所述逻辑存储位置访问所述数据。
其中,所述数据文件中存储列簇数据,所述列簇数据中包括一个数据表中的多列数据,所述获得需要访问的数据的数据文件信息包括:
判断业务需要的数据是否处于一个列簇数据中;
若判断结果为是,则根据列簇定义信息获得数据文件的信息,所述列簇定义信息中包括所述数据表中各列簇数据的组成信息以及各列簇数据的逻辑存储位置;
若判断结果为否,则根据列簇定义信息获得多个数据文件的信息。
进一步的,本发明实施例还提供了一种数据存储装置,包括:
获取单元,用于获得需要存储的数据和所述数据的逻辑存储信息;
存储单元,用于根据所述逻辑存储信息将所述数据以段为单位存储在数据文件中,并在所述数据文件中形成数据段和数据段索引,所述数据段索引用于在所述数据文件中定位数据所在的数据段,以便分布式集群并行处理所述数据文件的数据段。
其中,所述需要存储的数据为列簇数据,所述获取单元还用于获得列簇数据和所述列簇数据的逻辑存储信息,所述列簇数据中包括一个数据表中的多列数据,所述逻辑存储信息用于将所述列簇数据存储在所述数据文件中;
所述数据存储装置还包括定义单元,用于获得列簇定义信息,所述列簇定义信息中包括所述数据表中各列簇数据的组成信息以及各列簇数据的逻辑存储位置。
所述定义单元还用于根据数据表结构和业务将所述数据表分为多个列簇数据。
数据段还包括数据单元,所述数据单元中包括数据块,所述存储单元还包括:
划分子单元,用于根据所述逻辑存储信息将所述数据格式化为多个数据块;
块存储子单元,用于将所述多个数据块存储在一个数据单元中,再将多个数据单元存储在一个数据段中,并在所述数据段中形成所述数据单元的数据单元索引;
段存储子单元,用于将所述数据段存储在数据文件中,并在所述数据文件中形成所述数据段的数据段索引。
所述块存储子单元还用于将多个数据单元压缩后存储在一个数据段中。
所述数据文件为数据仓库中的存储文件。
实施本发明实施例,具有如下有益效果:由于将数据文件中的数据划分为逻辑上的数据段,并形成了数据段的索引,使得该数据文件中的各数据段可同时被分布式集群中的不同处理器访问,即可实现分布式集群对数据文件的数据进行并行处理,大大提升了数据处理效率。同时,本发明的具体实施例中还将数据表分成各列簇存储在数据文件中,符合业务处理的惯常逻辑(即一个列簇的数据通常会同时被需要),也一定程度上提高了处理效率。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1是本发明实施例中的数据存储方法的一个具体流程示意图;
图2是本发明实施例中的数据文件的一个具体组成结构示意图;
图3是本发明实施例中的数据存储方法的另一个具体流程示意图;
图4是本发明实施例中的数据段的一个具体组成结构示意图;
图5是本发明实施例中的数据单元和数据块的一个具体组成结构示意图;
图6是本发明实施例中的记录按列存储方法的一个具体流程示意图;
图7是本发明实施例中的数据访问方法的一个具体流程示意图;
图8是本发明实施例中的数据存储装置的一个具体组成示意图;
图9是本发明实施例中的数据存储装置的另一个具体组成示意图;
图10是本发明实施例中的存储单元的一个具体组成示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
在分布式集群系统中,通常会有多个集群处理器同时工作,而传统的存储在数据文件中的数据通常为一个整体,不论是读取还是其他操作都只允许一个处理器进行操作,当一个数据文件的容量很大时其内容本身则可能被多个处理器并行处理。基于此,本发明实施例中提出了一种用于分布式集群系统的文件存储结构,其允许多个处理器并行的处理数据文件中不同的数据段。需要注意的是,本发明实施例中的数据段与现有技术中的数据段意义并不相同,本发明实施例中的数据段是逻辑上可并行处理的数据段,其大小一般对应于集群处理器的处理习惯(如为64K、128K等)。而现有技术中的数据段一般是根据数据值划分的区间,如将具有1万记录的数据划分为10段;但是进行并行处理时,一般是与业务有关的,而业务有关的数据表中,记录值的范围通常是不确定的(比如,一些极端情况,一个列的值可能只有两种,如性别字段),若仍然按现有技术的分段技术,无法根据业务特点进行分段,各段并不能被分布式集群处理器并行处理。
同时,在本发明实施例中考虑到数据一般以数据表形式存在,其数据通常是按字段形成不同的列,在访问数据表时经常会有某几个字段形成的列更容易被同时访问,因而,本发明实施例提出了将数据列形成列簇存储在数据文件的方案。以下将分别描述以上各方案的技术细节。
如图1所示,为本发明实施例中的数据存储方法的一个具体流程示意图。该方法包括如下步骤。
101、获得需要存储的数据和所述数据的逻辑存储信息。其中,数据以列簇数据的形式被存储时,则本步骤相应为,获得列簇数据和所述列簇数据的逻辑存储信息,所述列簇数据中包括一个数据表中的多列数据,所述逻辑存储信息用于将所述列簇数据存储在所述数据文件中。该数据文件可为数据仓库中的存储文件。
当然,当存储数据表时,则需要根据数据表结构和业务将所述数据表分为多个列簇数据,如用户可以创建表的语句中指定列簇; 如create table test(a int, b int, c int) projection(a,b)。这样就可以将多个列簇数据分别存储在对应的数据文件中。
相应的,为了说明这种列簇存储的文件结构,本方法则还包括一步骤:获得列簇定义信息,所述列簇定义信息中包括所述数据表中各列簇数据的组成信息以及各列簇数据的逻辑存储位置。这样,在需要访问数据时,当知道要访问数据所属的列(即,数据表的列定义字段),再在列簇定义信息中查找,就可以获知其列簇所在的数据文件。如表1所示,为列簇定义信息中包括的组要内容。
表1:
字段名称 | 含义 |
ProjectionList | 一个表中所有的列簇定义 |
FieldList | 一个列簇中所有的字段,可能有多个 |
FileNameList | 每个列簇存储的数据文件名 |
102、根据所述逻辑存储信息将所述数据以段为单位存储在数据文件中,并在所述数据文件中形成数据段和数据段索引,所述数据段索引用于在所述数据文件中定位数据所在的数据段,以便分布式集群并行处理所述数据文件的数据段。
当然,在具体实施例中,通常数据文件还包括头结构(head),在头结构中存储该数据文件的所有信息,如数据版本、字段类型等,并保证生成的二进制格式文件能独立被解析读取。在一些具体实施例中的分布式环境中,一个列簇的数据文件不一定在同一个文件中;有可能被分拆成多个小文件,每个小文件包含一部分内容,这些小文件合在一起才是完整的内容。 Head的目的就算保证每个小文件都能独立被读取、解析。如表2所示为一种头结构中部分数据的定义。
表2:
字段名称 | 含义 |
Ver | 数据版本号 |
Var | 是否存在变长字段 |
Compress | 数据是否压缩 |
Encode | 数据是否加密 |
FieldMap | 所有字段的类型定义 |
即将每个列簇存储在数据文件中,该数据文件由文件头(Head)、数据段(Segment)、数据段索引(或称为一级块索引,Segment Index)三部分构成。其中Head用于记录该数据文件中保存的字段类型、版本等信息;Segment中存储具体的数据;Segment Index用于快速定位到特定记录值所在的Segment,从而达到快速访问的目的;同时数据以Segment为单位组成,便于数据文件在分布式集群中被并行处理。如图2所示,则为本发明实施例中数据文件的组成结构示意图。该数据文件包括头(head)、数据段1(Segment 1)、数据段2(Segment 2)、……,还包括数据段索引1(Segment idx 1)、数据段索引2(Segment idx 2)、……;其中,相同序列号的索引可指向对应的数据段。
采用上述结构存储的数据,其数据文件中的各数据段可以被分布式集群并行处理。为了进一步的提高数据存储的灵活性和效率,还可进一步创建2级段(也就是数据单元)。创建数据单元可实现以下效果:1、当文件支持压缩时,压缩需要有一个基本的压缩单位,太大或太小都会影响压缩、解压缩的效率,以数据单元为压缩单位则可解决上述问题;2、网络传输、磁盘读取,都需要有一个预读的单位,以便提升读取效率,以数据单元为预读的单位有利于提升读取的效率。
为此,在本发明的一具体实施例中,其数据段还可包括多个数据单元,所述数据单元中包括数据块,则相应的,如图3所示,数据存储方法还包括步骤:
301、根据所述逻辑存储信息将所述数据格式化为多个数据块;
302、将所述多个数据块存储在一个数据单元中,再将多个数据单元存储在一个数据段中,并在所述数据段中形成所述数据单元的数据单元索引。同时,为了提高存储效率,可将多个数据单元压缩后存储在一个数据段中。
并且相应的,图1中的步骤102对应为,303、将所述数据段存储在数据文件中,并在所述数据文件中形成所述数据段的数据段索引,所述数据段索引用于在所述数据文件中定位数据所在的数据段。
如图4所示,为包括多个数据单元的数据段的组成结构。该数据段中包括数据单元1(Unit 1)、数据单元2(Unit 2)、……,每个数据单元对应一数据单元索引(可称其为二级块索引项),用以指示该数据单元的位置和大小,在如图4的示例中,该索引项保存在数据段的尾部,为数据单元索引1(Unit idx 1)、数据单元索引2(Unit idx 2)、……。每个Segment的大小固定,进行数据分割的时以此大小为依据。Unit依次填充到Segment中,对于无法存放一个完整Unit的情况,将空闲的部分进行填充补齐,避免一个记录被分割成2个部分的情况。Unit作为压缩的基本单位。
如图5所示,则为包括多个数据块的数据单元的组成结构,以及一个数据块的组成结构。用户的一个记录被格式化成一个数据块(Chunk)保存在数据单元(Unit)中,Unit中存放具体的用户记录,另外还需要为每个Chunk保存其在Unit中的偏移信息。Unit主要有各个Chunk和这些偏移信息构成。每个Unit的大小不固定,但是需要保证基本一致。每个Chunk根据Head中保存的字段类型定义,将数据分为2中保存类型:定长和不定长。对于定长记录,如Int、Long等基本类型,直接保存指定的长度;而对于不定长类型,如String类型,通过保存一个len字段来标识具体的数值长度,然后再保存具体的数值。
上述的一级块索引项或二级块索引项的可具有相同的内部结构,如表3所示,为块索引项的一种数据结构组成。
表3:
字段名称 | 含义 |
Begin | 起始行号(或记录值) |
End | 结束行号(或记录值) |
Offset | 该块的起始偏移 |
Length | 该块的长度 |
Index | 该Segment(或Unit)的索引号 |
为了更清楚的说明本发明的上述技术方案,以下以插入一条记录为例,说明将记录按列存储的过程。假设数据表结构定义为:Test(age tinyint, qq int, desc string,area string),即数据表名为Test,数据表中定了四个字段(每个字段形成一个数据列),分别为年龄、qq号码、描述信息、所属地区;同时,根据业务特点,将该表的4列分为3个列簇:Projection1(qq)、Projection2(age,area)、Projection3(desc),即列簇1中包括qq号码字段列、列簇2包括年龄和所属地区字段列、列簇3包括描述信息字段列。本次需要存储的记录值为(25, 1234567890, “hello world”,“china”)。则如图6所示,本次存储的过程包括如下步骤:
601、根据业务特点(也有可能是用户的定义等)创建列簇定义结构,生成3个列簇,根据各个列簇中字段组成,构成每个列簇数据的存储文件名并创建对应的数据文件(此时,假定本次记录为第一条记录),同时对3个列簇数据文件进行写入,由于写入每个文件的过程完全一样(仅仅写入的数据不一样),则以下步骤以写入Projection1为例,描述写一个列簇文件的过程;
602、将字段qq的具体值序列化成一个chunk结构;
603、创建一个unit结构,并将chunk保存在unit中;
604、在unit的MetaData信息中保存该chunk的起始偏移地址;(此处只描述一条记录的情况,如果是多条记录,重复602~604步骤)
605、创建一个Segment结构,将unit保存在其中,在本步骤中,若用户指定了压缩标识,则会在将Unit数据写入Segment之前,对Unit进行压缩,并能根据数据类型智能选择合适的压缩方式;
606、在Segment的二级块索引表中增加一个索引项,记录该unit的起始行号、包含的key记录起始值、unit的起始偏移、unit的索引号和长度等信息;
607、将Segment的内容写入到列簇数据文件中,同时在一级块索引表中增加一个索引项,记录该Segment的其实行号、包含的key记录起始值、segment的起始偏移、segment的索引号和长度等信息;
608、在列簇数据文件的末尾记录一级块索引表的起始偏移和长度;
609、写入过程结束,该列簇文件中存储的全部是字段qq的值,根据相同的逻辑,另外2个列簇文件中分别存储的是字段(age,area)组合的值、字段desc的值。
综上所述,在本发明实施例中,由于将数据文件中的数据划分为逻辑上的数据段,并形成了数据段的索引,使得该数据文件中的各数据段可同时被分布式集群中的不同处理器访问,即可实现分布式集群对一个数据文件的数据进行并行处理,大大提升了数据处理效率。其次,本发明的具体实施例中还将数据表分成各列簇存储在数据文件中,符合业务处理的惯常逻辑(即一个列簇的数据通常会同时被需要),也一定程度上提高了处理效率。第三、将数据单元进行压缩后存储,可进一步提高存储的效率。
相应的,本发明实施例还提供了一种数据访问方法,如图7所示,该方法包括如下步骤。
701、获得需要访问的数据的数据文件信息。该数据文件中存储的可为列簇数据,列簇数据中包括一个数据表中的多列数据。
本步骤还可进一步包括:判断业务需要的数据是否处于一个列簇数据中;若判断结果为是,则根据列簇定义信息获得一数据文件的信息,所述列簇定义信息中包括所述数据表中各列簇数据的组成信息以及各列簇数据的逻辑存储位置;若判断结果为否,则根据列簇定义信息获得多个数据文件的信息。
702、根据所述数据文件信息获取所述数据文件中存储的数据段索引信息,所述数据段索引用于在所述数据文件中定位数据所在的数据段,以便分布式集群并行处理所述数据文件的数据段。
703、根据所述数据段索引信息获取所述数据在所述数据文件的逻辑存储位置。
704、根据所述逻辑存储位置访问所述数据。相应于步骤701,若数据处于多个列簇数据中,则可将处于多个列簇数据中的记录拼装在一起形成一个完整的记录。
为进一步说明本技术方案,以下将对数据的访问分为两种情况分别描述。这两种情况分为:仅需要访问一个列簇和需要访问多个列簇。下面以按图6的方式存储的具体数据为例分别进行说明。
情况一、仅需要访问一个列簇,若判断任务需要的字段数据全部在一个列簇定义中,如仅仅需要访问qq字段,则仅需要读取列簇Projection1所对应的数据文件即可。具体的访问过程如下:
0、访问列簇定义组件,根据需要访问的字段信息,获取需要读取的列簇数据文件名;
1、打开列簇数据文件,读取文件Head信息,并直接在数据文件末尾,读取一级块索引的偏移、长度信息;
2、将全部一级块索引表读入到内存中;
3、根据一级块索引表,找到指定行号所属的segment信息,包含起始偏移和长度信息;
4、根据该segment的起始偏移和长度,计算出该segment内部二级块索引的位置,并读取到二级块索引表的信息;
5、根据二级块索引表,找到指定行号所属的unit信息,包含起始偏移和长度信息;
6、根据unit的偏移和长度,读取整个unit的数据块信息;
7、根据unit的meta结构中保存的chunk偏移值,计算中指定行号记录所在的具体偏移和该记录的长度;
8、根据上面计算的偏移和长度,读取到该记录对应的chunk内容;
9、将chunk的内容根据文件Head中定义的字段定义,将chunk的内容解析成具体的值;
10、对于记录中其他字段,直接置空,形成一个仅包括本列簇字段的记录;
11、读取过程结束。
情况二、需要访问多个列簇,若计算需要访问的字段分布在多个列簇定义中,如需要同时获取qq、age信息,则需要访问多个列簇数据文件。具体的过程如下:
0、访问列簇定义组件,根据需要访问的字段信息,获取需要读取的列簇数据文件名;本例中会需要读取多个数据文件;
1、对返回的所有数据文件,依次打开文件,读取文件Head信息,并直接在文件末尾,读取一级块索引的偏移、长度信息;对每一个文件:
1.1、将全部一级块索引表读入到内存中;
1.2、根据一级块索引表,找到指定key值所属的segment信息,包含起始偏移和长度信息;
1.3、根据该segment的起始偏移和长度,计算出该segment内部二级块索引的位置,并读取到二级块索引表的信息;
1.4、根据二级块索引表,找到指定key值所属的unit信息,包含起始偏移和长度信息;
1.5、根据unit的偏移和长度,读取整个unit的数据块信息;
1.6、遍历该unit,找出所有符合条件的chunk;
1.7、将这些chunk的内容根据文件Head中定义的字段定义,将chunk的内容解析成具体的值;
2、将从多个列簇数据文件中读取的字段拼装在一起,没有读取的字段默认置空,形成一个完整的记录;
3、读取过程结束。
从以上读取(访问)过程可知:1、无论是访问一个列簇文件,还是访问多个列簇文件,访问按列存储的表都不需要读取额外的冗余信息,从而能大大提升系统的数据处理性能;2、通过压缩技术,可以更进一步减少需要访问的数据量;3、通过一个合理定义的列簇,能同时兼顾访问少量字段和访问大量字段时记录拼装的性能,从而保证整个系统的数据处理性能;4、列簇数据是以Segment为单位组织的,可以很方便的在分布式集群中并行处理。
相应的,本发明实施例还提供了一种数据存储装置,如图8所示,该数据存储装置可包括:获取单元80,用于获得需要存储的数据和所述数据的逻辑存储信息;存储单元82,用于根据所述逻辑存储信息将所述数据以段为单位存储在数据文件中,并在所述数据文件中形成数据段和数据段索引,所述数据段索引用于在所述数据文件中定位数据所在的数据段,以便分布式集群并行处理所述数据文件的数据段。
其中,所述需要存储的数据为列簇数据,所述获取单元80还用于获得列簇数据和所述列簇数据的逻辑存储信息,所述列簇数据中包括一个数据表中的多列数据,所述逻辑存储信息用于将所述列簇数据存储在所述数据文件中;
如图9所示,该数据存储装置还可包括定义单元81,用于获得列簇定义信息,所述列簇定义信息中包括所述数据表中各列簇数据的组成信息以及各列簇数据的逻辑存储位置。所述定义单元81还可用于根据数据表结构和业务将所述数据表分为多个列簇数据。
其中,数据段还可包括数据单元,所述数据单元中包括数据块,则如图10所示,存储单元82还可包括:划分子单元820,用于根据所述逻辑存储信息将所述数据格式化为多个数据块;块存储子单元822,用于将所述多个数据块存储在一个数据单元中,再将多个数据单元存储在一个数据段中,并在所述数据段中形成所述数据单元的数据单元索引;段存储子单元824,用于将所述数据段存储在数据文件中,并在所述数据文件中形成所述数据段的数据段索引。所述块存储子单元822还用于将多个数据单元压缩后存储在一个数据段中。
在本装置实施例中的术语和各功能具体涵义与前述方法实施例中的一致,此处不再一一描述。同时对应于前述的数据访问方法,本发明实施例还可提供一种数据访问装置,其功能结构可演变自该数据访问方法,此处也不做赘述。
实施本发明实施例,具有如下有益效果:由于将数据文件中的数据划分为逻辑上的数据段,并形成了数据段的索引,使得该数据文件中的各数据段可同时被分布式集群中的不同处理器访问,即可实现分布式集群对一个数据文件的数据进行并行处理,大大提升了数据处理效率。同时,本发明的具体实施例中还将数据表分成各列簇存储在数据文件中,符合业务处理的惯常逻辑(即一个列簇的数据通常会同时被需要),也一定程度上提高了处理效率。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的程序可存储于一计算机可读取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。其中,所述的存储介质可为磁碟、光盘、只读存储记忆体(Read-Only Memory,ROM)或随机存储记忆体(Random Access Memory,RAM)等。
以上所揭露的仅为本发明一种较佳实施例而已,当然不能以此来限定本发明之权利范围,因此依本发明权利要求所作的等同变化,仍属本发明所涵盖的范围。
Claims (14)
1.一种数据存储方法,其特征在于,所述方法包括:
获得需要存储的数据和所述数据的逻辑存储信息;
根据所述逻辑存储信息将所述数据以段为单位存储在数据文件中,并在所述数据文件中形成数据段和数据段索引,所述数据段索引用于在所述数据文件中定位数据所在的数据段,以便分布式集群并行处理所述数据文件的数据段。
2.如权利要求1所述的数据存储方法,其特征在于,所述需要存储的数据为列簇数据,所述获得需要存储的数据和所述数据的逻辑存储信息包括:
获得列簇数据和所述列簇数据的逻辑存储信息,所述列簇数据中包括一个数据表中的多列数据,所述逻辑存储信息用于将所述列簇数据存储在所述数据文件中;
所述方法还包括获得列簇定义信息,所述列簇定义信息中包括所述数据表中各列簇数据的组成信息以及各列簇数据的逻辑存储位置。
3.如权利要求2所述的数据存储方法,其特征在于,在所述获得列簇数据之前包括:
根据数据表结构和业务将所述数据表分为多个列簇数据。
4.如权利要求1至3中任一项所述的数据存储方法,其特征在于,数据段还包括数据单元,所述数据单元中包括数据块,所述方法还包括:
根据所述逻辑存储信息将所述数据格式化为多个数据块;
将所述多个数据块存储在一个数据单元中,再将多个数据单元存储在一个数据段中,并在所述数据段中形成所述数据单元的数据单元索引。
5.如权利要求4所述的数据存储方法,其特征在于,所述将多个数据单元存储在一个数据段中包括,将多个数据单元压缩后存储在一个数据段中。
6.如权利要求1至3中任一项所述的数据存储方法,其特征在于,所述数据文件为数据仓库中的存储文件。
7.一种数据访问方法,其特征在于,所述方法包括:
获得需要访问的数据的数据文件信息;
根据所述数据文件信息获取所述数据文件中存储的数据段索引信息,所述数据段索引用于在所述数据文件中定位数据所在的数据段,以便分布式集群并行处理所述数据文件的数据段;
根据所述数据段索引信息获取所述数据在所述数据文件的逻辑存储位置;
根据所述逻辑存储位置访问所述数据。
8.如权利要求7所述的数据访问方法,其特征在于,所述数据文件中存储列簇数据,所述列簇数据中包括一个数据表中的多列数据,所述获得需要访问的数据的数据文件信息包括:
判断业务需要的数据是否处于一个列簇数据中;
若判断结果为是,则根据列簇定义信息获得数据文件的信息,所述列簇定义信息中包括所述数据表中各列簇数据的组成信息以及各列簇数据的逻辑存储位置;
若判断结果为否,则根据列簇定义信息获得多个数据文件的信息。
9.一种数据存储装置,其特征在于,所述数据存储装置包括:
获取单元,用于获得需要存储的数据和所述数据的逻辑存储信息;
存储单元,用于根据所述逻辑存储信息将所述数据以段为单位存储在数据文件中,并在所述数据文件中形成数据段和数据段索引,所述数据段索引用于在所述数据文件中定位数据所在的数据段,以便分布式集群并行处理所述数据文件的数据段。
10.如权利要求9所述的数据存储装置,其特征在于,所述需要存储的数据为列簇数据,所述获取单元还用于获得列簇数据和所述列簇数据的逻辑存储信息,所述列簇数据中包括一个数据表中的多列数据,所述逻辑存储信息用于将所述列簇数据存储在所述数据文件中;
所述数据存储装置还包括定义单元,用于获得列簇定义信息,所述列簇定义信息中包括所述数据表中各列簇数据的组成信息以及各列簇数据的逻辑存储位置。
11.如权利要求10所述的数据存储装置,其特征在于,所述定义单元还用于根据数据表结构和业务将所述数据表分为多个列簇数据。
12.如权利要求9至11中任一项所述的数据存储装置,其特征在于,数据段还包括数据单元,所述数据单元中包括数据块,所述存储单元还包括:
划分子单元,用于根据所述逻辑存储信息将所述数据格式化为多个数据块;
块存储子单元,用于将所述多个数据块存储在一个数据单元中,再将多个数据单元存储在一个数据段中,并在所述数据段中形成所述数据单元的数据单元索引;
段存储子单元,用于将所述数据段存储在数据文件中,并在所述数据文件中形成所述数据段的数据段索引。
13.如权利要求12所述的数据存储装置,其特征在于,所述块存储子单元还用于将多个数据单元压缩后存储在一个数据段中。
14.如权利要求9至11中任一项所述的数据存储装置,其特征在于,所述数据文件为数据仓库中的存储文件。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201110198294.XA CN102880615B (zh) | 2011-07-15 | 2011-07-15 | 一种数据存储方法和装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201110198294.XA CN102880615B (zh) | 2011-07-15 | 2011-07-15 | 一种数据存储方法和装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN102880615A true CN102880615A (zh) | 2013-01-16 |
CN102880615B CN102880615B (zh) | 2018-04-27 |
Family
ID=47481943
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201110198294.XA Active CN102880615B (zh) | 2011-07-15 | 2011-07-15 | 一种数据存储方法和装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN102880615B (zh) |
Cited By (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104268225A (zh) * | 2014-09-26 | 2015-01-07 | 山西达鑫核科技有限公司 | 一种多维自由度寻址的文件系统架构及其生成和访问方式 |
CN104268091A (zh) * | 2014-09-19 | 2015-01-07 | 深圳市心讯网络科技有限公司 | 文件储存方法和文件修改方法 |
CN104715039A (zh) * | 2015-03-23 | 2015-06-17 | 星环信息科技(上海)有限公司 | 基于硬盘和内存的列式存储和查询方法及设备 |
CN106326248A (zh) * | 2015-06-23 | 2017-01-11 | 阿里巴巴集团控股有限公司 | 数据库数据的存储方法和装置 |
CN106775997A (zh) * | 2015-11-23 | 2017-05-31 | 阿里巴巴集团控股有限公司 | 一种任务处理方法和设备 |
CN109783021A (zh) * | 2018-12-28 | 2019-05-21 | 北京星际荣耀空间科技有限公司 | 数据存储系统及数据存储、读取方法、装置、电子设备 |
CN110365620A (zh) * | 2018-03-26 | 2019-10-22 | 中移(苏州)软件技术有限公司 | 一种流式数据隐私保护方法及装置 |
CN114443670A (zh) * | 2022-04-07 | 2022-05-06 | 北京奥星贝斯科技有限公司 | 数据的存储、读取方法及装置 |
CN116483916A (zh) * | 2023-02-14 | 2023-07-25 | 中国人民解放军63811部队 | 基于子段拆分的高频实时码流存储和数据同步检索系统 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101145159A (zh) * | 2007-10-16 | 2008-03-19 | 吕利勇 | 提供可分解阅读原版媒体内容的系统、方法及播放装置 |
CN101178693A (zh) * | 2007-12-14 | 2008-05-14 | 沈阳东软软件股份有限公司 | 一种数据缓存方法及系统 |
US20080256143A1 (en) * | 2007-04-11 | 2008-10-16 | Data Domain, Inc. | Cluster storage using subsegmenting |
CN101727456A (zh) * | 2008-10-24 | 2010-06-09 | 国际商业机器公司 | 用于含虚拟机的宿主机系统的磁盘物理块分配方法和设备 |
CN101751406A (zh) * | 2008-12-18 | 2010-06-23 | 赵伟 | 一种实现基于列存储的关系型数据库的方法及装置 |
CN101996250A (zh) * | 2010-11-15 | 2011-03-30 | 中国科学院计算技术研究所 | 一种基于Hadoop的海量流数据存储和查询方法及系统 |
-
2011
- 2011-07-15 CN CN201110198294.XA patent/CN102880615B/zh active Active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20080256143A1 (en) * | 2007-04-11 | 2008-10-16 | Data Domain, Inc. | Cluster storage using subsegmenting |
CN101145159A (zh) * | 2007-10-16 | 2008-03-19 | 吕利勇 | 提供可分解阅读原版媒体内容的系统、方法及播放装置 |
CN101178693A (zh) * | 2007-12-14 | 2008-05-14 | 沈阳东软软件股份有限公司 | 一种数据缓存方法及系统 |
CN101727456A (zh) * | 2008-10-24 | 2010-06-09 | 国际商业机器公司 | 用于含虚拟机的宿主机系统的磁盘物理块分配方法和设备 |
CN101751406A (zh) * | 2008-12-18 | 2010-06-23 | 赵伟 | 一种实现基于列存储的关系型数据库的方法及装置 |
CN101996250A (zh) * | 2010-11-15 | 2011-03-30 | 中国科学院计算技术研究所 | 一种基于Hadoop的海量流数据存储和查询方法及系统 |
Cited By (15)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104268091B (zh) * | 2014-09-19 | 2016-02-24 | 盛杰 | 文件储存方法和文件修改方法 |
CN104268091A (zh) * | 2014-09-19 | 2015-01-07 | 深圳市心讯网络科技有限公司 | 文件储存方法和文件修改方法 |
CN104268225B (zh) * | 2014-09-26 | 2018-05-11 | 山西达鑫核科技有限公司 | 一种多维自由度寻址的文件系统架构及其生成和访问方式 |
CN104268225A (zh) * | 2014-09-26 | 2015-01-07 | 山西达鑫核科技有限公司 | 一种多维自由度寻址的文件系统架构及其生成和访问方式 |
CN104715039A (zh) * | 2015-03-23 | 2015-06-17 | 星环信息科技(上海)有限公司 | 基于硬盘和内存的列式存储和查询方法及设备 |
CN104715039B (zh) * | 2015-03-23 | 2018-10-19 | 星环信息科技(上海)有限公司 | 基于硬盘和内存的列式存储和查询方法及设备 |
CN106326248A (zh) * | 2015-06-23 | 2017-01-11 | 阿里巴巴集团控股有限公司 | 数据库数据的存储方法和装置 |
CN106326248B (zh) * | 2015-06-23 | 2019-08-27 | 阿里巴巴集团控股有限公司 | 数据库数据的存储方法和装置 |
CN106775997A (zh) * | 2015-11-23 | 2017-05-31 | 阿里巴巴集团控股有限公司 | 一种任务处理方法和设备 |
CN106775997B (zh) * | 2015-11-23 | 2020-12-22 | 阿里巴巴集团控股有限公司 | 一种任务处理方法和设备 |
CN110365620A (zh) * | 2018-03-26 | 2019-10-22 | 中移(苏州)软件技术有限公司 | 一种流式数据隐私保护方法及装置 |
CN109783021A (zh) * | 2018-12-28 | 2019-05-21 | 北京星际荣耀空间科技有限公司 | 数据存储系统及数据存储、读取方法、装置、电子设备 |
CN114443670A (zh) * | 2022-04-07 | 2022-05-06 | 北京奥星贝斯科技有限公司 | 数据的存储、读取方法及装置 |
CN114443670B (zh) * | 2022-04-07 | 2022-07-08 | 北京奥星贝斯科技有限公司 | 数据的存储、读取方法及装置 |
CN116483916A (zh) * | 2023-02-14 | 2023-07-25 | 中国人民解放军63811部队 | 基于子段拆分的高频实时码流存储和数据同步检索系统 |
Also Published As
Publication number | Publication date |
---|---|
CN102880615B (zh) | 2018-04-27 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN102880615A (zh) | 一种数据存储方法和装置 | |
CN110019218B (zh) | 数据存储与查询方法及设备 | |
US11494339B2 (en) | Multi-level compression for storing data in a data store | |
CN102411616B (zh) | 一种数据存储方法和系统及数据管理方法 | |
CN111400408A (zh) | 数据同步方法、装置、设备及存储介质 | |
CN101553813A (zh) | 管理可单独访问的数据单元的存储器 | |
CN103177027A (zh) | 获取动态Feed索引的方法和系统 | |
CN107992492B (zh) | 一种数据区块的存储方法、读取方法、其装置及区块链 | |
CN102622434B (zh) | 数据存储方法、查找方法及装置 | |
US11625412B2 (en) | Storing data items and identifying stored data items | |
CN108846021B (zh) | 一种基于用户访问偏好模型的海量小文件存储方法 | |
CN113626431A (zh) | 一种基于lsm树的延迟垃圾回收的键值分离存储方法及系统 | |
CN110727406A (zh) | 一种数据存储调度方法及装置 | |
CN115438114B (zh) | 存储格式转换方法、系统、装置、电子设备及存储介质 | |
CN105630934A (zh) | 一种数据统计方法及系统 | |
CN116244313B (zh) | Json数据存储和访问方法、装置、计算机设备及介质 | |
CN116257523A (zh) | 一种基于非易失存储器的列式存储索引方法及装置 | |
CN113468107A (zh) | 数据处理方法、设备、存储介质及系统 | |
CN110633261A (zh) | 一种图片存储方法、图片查询方法及装置 | |
CN106909623B (zh) | 一种支持高效海量数据分析和检索的数据装置及数据存储方法 | |
WO2022037015A1 (zh) | 一种基于持久性内存的列式存储方法、装置及设备 | |
CN113934713A (zh) | 一种订单数据索引方法、系统、计算机设备以及存储介质 | |
CN108920110A (zh) | 一种基于内存计算模式的并行处理大数据存储系统及方法 | |
CN109446167A (zh) | 一种日志数据存储、提取方法及装置 | |
CN102867023A (zh) | 一种栅格数据的存储、读取方法及装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant | ||
TR01 | Transfer of patent right |
Effective date of registration: 20190805 Address after: Shenzhen Futian District City, Guangdong province 518044 Zhenxing Road, SEG Science Park 2 East Room 403 Co-patentee after: Tencent cloud computing (Beijing) limited liability company Patentee after: Tencent Technology (Shenzhen) Co., Ltd. Address before: Shenzhen Futian District City, Guangdong province 518057 Zhenxing Road, SEG Science Park 2 East Room 403 Patentee before: Tencent Technology (Shenzhen) Co., Ltd. |
|
TR01 | Transfer of patent right |