WO2017161540A1 - 数据查询的方法、数据对象的存储方法和数据系统 - Google Patents
数据查询的方法、数据对象的存储方法和数据系统 Download PDFInfo
- Publication number
- WO2017161540A1 WO2017161540A1 PCT/CN2016/077247 CN2016077247W WO2017161540A1 WO 2017161540 A1 WO2017161540 A1 WO 2017161540A1 CN 2016077247 W CN2016077247 W CN 2016077247W WO 2017161540 A1 WO2017161540 A1 WO 2017161540A1
- Authority
- WO
- WIPO (PCT)
- Prior art keywords
- data
- row
- column
- value
- file
- Prior art date
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
-
- 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/18—File system types
- G06F16/182—Distributed file systems
-
- 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
- G06F16/152—File search processing using file content signatures, e.g. hash values
Abstract
一种文件系统中数据查询的方法、数据对象的存储方法和数据系统。该文件系统包括键文件和值文件,该键文件用于存储数据对象的条件列的数据和行标识,该值文件用于存储该数据对象的查询列的数据。该方法包括:接收查询数据对象的数据的查询请求,该查询请求包括条件列值和待查询的查询列的信息(S610);根据该条件列值,在该键文件中获取第一行标识,该第一行标识为与该条件列值匹配的条件列的数据对应的行标识(S620);根据该第一行标识和该待查询的查询列的信息,在该值文件中读取数据(S630)。其能够提高数据查询的效率。
Description
本发明涉及信息技术领域,并且更具体地,涉及文件系统中数据查询的方法、数据对象的存储方法和数据系统。
随着社会信息化程度的加深,互联网特别是移动互联网的火热,人类产生的数据正以几何级数增长。另一方面互联网行业应用数据的成功案例,也推动着企业对数据的重视,甚至数据将作为一种资产出现在企业资产负债表内。这些催生了一种新的领域:大数据。
大数据并不仅仅指拥有的数据量庞大,其重点更在于对数据的专业化处理,从中提取有益信息。大数据是需要新处理模式才能具有更强的决策力、洞察发现力和流程优化能力的海量、高增长率和多样化的信息资产。
目前应用于大数据系统的数据存储格式有行存储格式和行列混合存储格式。对于行存储格式,查询数据时需要读取所有条件列和查询列的数据进行遍历匹配,读取的数据量大,查询效率较低;对于行列混合存储格式,查询数据时也要读取条件列和待查询的查询列的数据,读取的数据量也较大,因而影响查询效率。
发明内容
本申请提供了一种文件系统中数据查询的方法、数据对象的存储方法和数据系统,能够提高数据查询的效率。
第一方面,提供了一种查询文件系统中数据的方法,该文件系统包括键文件和值文件,该键文件用于存储数据对象的条件列的数据和行标识,该值文件用于存储该数据对象的查询列的数据,该方法包括:
接收查询该数据对象的数据的查询请求,该查询请求包括条件列值和待查询的查询列的信息;
根据该条件列值,在该键文件中获取第一行标识,该第一行标识为与该条件列值匹配的条件列的数据对应的行标识;
根据该第一行标识和该待查询的查询列的信息,在该值文件中读取数
据。
本发明实施例的文件系统中数据查询的方法,先根据条件列值,在键文件中获取与该条件列值匹配的条件列的数据对应的行标识,再根据该行标识和待查询的查询列的信息,在值文件中读取该待查询的查询列的数据,在查询过程中可以只读取键文件中的数据块,减少了数据的读取量,从而能够提高数据查询的效率。
在一些可能设计中,该键文件的存储格式为行存储格式,该键文件的每行中的键与值一一对应,该键文件的每行的键对应该数据对象的条件列的数据,该键文件的每行的值对应行标识。
在一些可能设计中,该值文件的存储格式为行列混合存储格式,该值文件包括多个行组,该值文件的行组与行标识区间对应,该值文件的每个行组内的数据按列式存储。
在一些可能设计中,该键文件包括多个数据块,多个数据块分别对应不同的条件列值范围;根据该条件列值,在该键文件中获取第一行标识,包括:
根据该条件列值,确定该条件列值所属条件列值范围所对应的第一数据块;
读取该第一数据块,在该第一数据块中匹配该条件列值,获取该第一行标识。
这样,可以只需读键文件中的一个数据块,减少数据的读取量。
在一些可能设计中,该文件系统包括多个分区,该多个分区中的每个分区包括多个子分区,该键文件和该值文件包括在子分区中;
根据该条件列值,确定第一数据块,包括:
根据该条件列值,在该文件系统中确定待查询的分区;
在该待查询的分区中确定待查询的子分区;
在该待查询的子分区中确定该第一数据块。
在一些可能设计中,根据该第一行标识和该待查询的查询列的信息,在该值文件中读取该待查询的查询列的数据,包括:
根据该第一行标识,确定第一行组以及行偏移量,该第一行组为该值文件中该第一行标识对应的查询列的数据所在的行组,该行偏移量为该第一行标识对应的查询列的数据所在的行在第一行组的偏移量;
根据该行偏移量和该待查询的查询列的信息确定待查询数据的存储地
址;
根据该存储地址,从该第一行组读取数据。
在一些可能设计中,同一行标识对应的该数据对象的条件列的数据和查询列的数据存储于同一节点。
这样,在查询时能够避免数据在节点间的传递。
第二方面,提供了一种文件系统中数据对象的存储方法,该文件系统包括键文件和值文件,该数据对象按列分为条件列和查询列,该方法包括:
确定该数据对象的每行数据的行标识,该行标识与该行标识指示的行数据中属于条件列的数据和属于查询列的数据分别对应;
根据该行标识和该数据对象中该行标识指示的行数据中属于条件列的数据的对应关系,将该行标识以及该数据对象中该行标识指示的行数据中属于条件列的数据存储在该键文件中;
根据该行标识和该数据对象中该行标识指示的行数据中属于查询列的数据的对应关系,将该数据对象中查询列的数据存储至该值文件中。
通过上述方法,可以将数据对象的条件列的数据和查询列的数据分别存储在键文件和值文件中,并且通过键文件中的行标识关联,这样,在访问数据对象的数据时,可以减少数据的读取量,从而提高数据访问的效率。
在一些可能设计中,该键文件的存储格式为行存储格式,该键文件的每行中的键与值一一对应,该键文件的每行的键为该数据对象中条件列的数据,该键文件的每行的值为行标识。
在一些可能设计中,该值文件的存储格式为行列混合存储格式,该值文件包括多个行组,所有行组分别对应一个不同行标识区间,每个行组内按列式存储该个行组对应的行标识区间所指定的多行数据中属于查询列的数据。
第三方面,提供了一种文件系统,该文件系统包括键文件和值文件,该键文件用于存储数据对象的条件列的数据和行标识,该值文件用于存储该数据对象的查询列的数据。
在一些可能设计中,该行标识可以为行号。
在一些可能设计中,该文件系统包括多个分区,该多个分区中的每个分区包括多个子分区,该键文件和该值文件包括在子分区中。
这样,在进行条件查询检索时,可首先过滤掉一些分区,再基于子分区字段过滤掉些子分区,大量降低检索的数据量。
在一些可能设计中,该键文件的存储格式为行存储格式,该键文件的每行中的键与值一一对应,该键文件的每行的键对应该数据对象的条件列的数据,该键文件的每行的值对应行标识。
在一些可能设计中,该值文件的存储格式为行列混合存储格式,该值文件包括多个行组,该值文件的行组与行标识区间对应,该值文件的每个行组内的数据按列式存储。
第四方面,提供了一种数据系统,该数据系统包括第三方面或第三方面的任意可能设计中的文件系统,以及
存储引擎,用于执行第一方面或第一方面的任意可能设计中的方法。
第五方面,提供了一种数据系统,该数据系统包括第三方面或第三方面的任意可能设计中的文件系统,以及
存储引擎,用于执行第二方面或第二方面的任意可能设计中的方法。
第六方面,提供了一种数据查询的装置,包括执行第一方面或第一方面的任意可能设计中的方法的模块,或执行第二方面或第二方面的任意可能设计中的方法的模块。
第七方面,提供了一种数据查询的装置。该装置包括处理器、存储器和通信接口。处理器与存储器和通信接口连接。存储器用于存储指令,处理器用于执行该指令,通信接口用于在处理器的控制下与其他网元进行通信。该处理器执行该存储器存储的指令时,该执行使得该处理器执行第一方面或第一方面的任意可能设计中的方法,或执行第二方面或第二方面的任意可能设计中的方法。
第八方面,提供了一种计算机可读介质,用于存储计算机程序,该计算机程序包括用于执行第一方面或第一方面的任意可能设计中的方法的指令,或用于执行第二方面或第二方面的任意可能设计中的方法的指令。
为了更清楚地说明本发明实施例的技术方案,下面将对本发明实施例中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本发明实施例的数据系统的架构图。
图2是本发明实施例的数据系统的一个示意图。
图3是本发明实施例的数据系统的又一个示意图。
图4是本发明实施例的文件系统的一个示意图。
图5是本发明实施例的文件系统的结构示意图。
图6是本发明实施例的文件系统中数据查询的方法的示意性流程图。
图7是本发明实施例的文件系统中数据对象的存储方法的示意性流程图。
图8是本发明一个实施例的数据系统中创建表和数据加载的流程图。
图9是本发明一个实施例的数据系统中数据查询的流程图。
图10是本发明另一实施例的数据系统中创建表和数据加载的流程图。
图11是本发明另一实施例的数据系统中数据查询的流程图。
图12是本发明一个实施例的数据系统的示意性框图。
图13是本发明另一实施例的数据系统的示意性框图。
图14是本发明一个实施例的数据查询的装置的示意性框图。
图15是本发明另一实施例的数据查询的装置的示意性框图。
图16是本发明又一实施例的数据查询的装置的结构示意图。
图1是可应用本发明实施例的技术方案的数据系统的架构图。如图1所示,底层的文件系统按照一定的数据存储组织方式组建和管理多个节点(即物理节点)上的数据。在进行数据查询时,存储引擎(也称为执行引擎)使用该文件系统从节点查找和读取数据。
多个节点可以为物理上分开的节点。对于分布式文件系统,多个物理节点按照分布式方式存储数据,存储引擎按照分布式系统中的访问方式,例如映射/归约(Map/Reduce)方式,访问数据。
多个节点可以是从磁盘或者磁盘阵列中划分出来的。对于非分布式文件系统,各个节点上的存储引擎访问各节点上的数据。
数据存储组织方式会影响数据的读取量和传递量等,从而影响数据系统的查询性能。例如,目前的Hive数据系统中的数据文件采用行存储格式或行列混合存储格式。行存储格式为:将表数据按一行接一行方式存储,行内各列值也是紧挨着存储。对于行存储格式,查询数据时需要读取所有条件列
和查询列的数据进行遍历匹配,读取的数据量大。行列混合存储格式为:将表中数据先水平切分成行组,行组内再垂直划分,以便每列单独存储。对于行列混合存储格式,查询数据时也要读取条件列和待查询的查询列的数据,读取的数据量也较大。鉴于此,本发明实施例对文件系统的数据存储组织方式进行了改进。
图2是本发明实施例的数据系统的一个示意图。图2中的数据系统为图1所示数据系统的架构的一种示例。在图2中文件系统为分布式文件系统。服务器统一接收访问数据对象的访问请求,在每接收到一个访问请求时通过存储引擎访问数据对象的元数据,根据元数据为访问请求建立多个任务,各个任务通过存储引擎访问分布式文件系统管理的各节点存储的数据。可选地,图2可以为数据仓库组件Hive的数据系统,相应地,服务器可以为HiveServer。
图3是本发明实施例的数据系统的一个示意图。图3中的数据系统为图1所示数据系统的架构的又一种示例。在图3中文件系统为非分布式文件系统,在图3中数据直接存储在本地盘上。协调器统一接收访问数据对象的访问请求,在每接收到一个访问请求便访问数据对象的元数据,根据元数据对访问请求解析成至少一个用于访问数据节点的子请求,将子请求发送至对应的数据节点,数据节点通过其存储引擎对其管理的本地磁盘上的数据进行访问。可选地,图3可以为大规模并行计算(Massively Parallel Process,MPP)数据库系统,其中的协调器(Coordinator)也可以称为服务器。
在本发明实施例中,数据对象为数据表(也简称为表)或者具有数据表格式的一类数据。为了描述方便,下述实施例将以数据表为例进行说明。
数据对象按列划分为条件列和查询列。
条件列中的数据具体为条件列值,在数据查询时该条件列值作为匹配过滤条件,用于在数据对象中定位到条件匹配的行;具体的,根据查询请求携带的条件列值与条件列中的条件列值进行匹配,在数据对象中确定匹配成功的条件列值所在的行。
查询列中的数据为待访问的数据。在数据查询时根据查询请求携带的条件列值在数据对象中确定该条件列值所在的行,目的在于进一步确定该行的行数据中属于查询列的数据,以便基于该行数据中属于查询列的数据进行数据查询。
例如,在表1中,条件列包括A列和B列,查询列包括C列、D列、E列和F列。其中,B列的数据包括“111,112,……,117”,以此类推可得知A列、C列、D列、E列和F列各自包括的数据。
数据对象中的数据按行划分为行数据,即行数据是指数据对象中的每行数据。在数据查询时根据查询请求携带的条件列值在数据对象中确定该条件列值所在的行,就定位到了该行的行数据,该行数据包括属于条件列的数据和属于查询列的数据。
例如,表1中第5000行的行数据包括“100,111,120,130,140,150”,其中,“100”、“111”、“120”、“130”、“140”和“150”依次属于A列的数据、B列的数据、C列的数据、D列的数据、E列的数据和F列的数据;再例如,第5003行的数据包括“102,112,123,133,143,153”,其中,“102”、“112”、“123”、“133”、“143”和“153”依次属于A列的数据、B列的数据、C列的数据、D列的数据、E列的数据和F列的数据。
本实施例采用行标识定位数据对象的行数据。
行标识具体可以为数据对象中每行数据的行号,即行号表示行数据位于数据记录中的第几行。
表1
以表1为例,“100,111,120,130,140,150”在表1中属于第5000行的行数据,对应的行号为5000,即用于定位该行数据的行标识为5000;再例如,“102,112,123,133,143,153”在表1中属于第5003行的行数据,对应的行号
为5003,即用于定位该行数据的行标识为5003。可选地,行标识也可以为其他表示行数据的位置的数值,该数值可以基于行号根据一定规则生成。本实施例为了描述方便,以行标识为行号为例进行说明。
在本发明实施例中,文件系统包括键文件(Key File)和值文件(Value File),该键文件用于存储数据对象的条件列的数据和行标识,该值文件用于存储该数据对象的查询列的数据。
如图4所示,可以在键文件中存储行标识和表1中的条件列(A列和B列)的数据;在值文件中存储表1中的查询列(C列、D列、E列和F列)的数据。
图5示出了文件系统中数据对象的存储方法500的示意性流程图。该方法500可以由数据系统执行,例如图1至图3中的数据系统,具体可以由数据系统中的存储引擎(也可称为执行引擎)执行。该存储方法500可用于将表1中的数据存储至本发明实施例提供的键文件和值文件中。
该存储方法500包括S510,S520和S530。
S510,确定该数据对象的每行数据的行标识,该行标识与该行标识指示的行数据中属于条件列的数据和属于查询列的数据分别对应。
例如,在存储上述表1时,表1中“100”、“111”、“120”、“130”、“140”、“150”为第5000行的行数据,确定该行数据的行标识为5000。因此,第5000行的行数据中属于条件列的数据“100”、“111”与行标识“5000”对应,第5000行的行数据中属于查询列的数据“120”、“130”、“140”、“150”与行标识“5000”对应。以此类推,可以确定表1中其他行数据的行标识,以及其他行标识指示的行数据所包括的属于条件列的数据和属于查询列的数据。
S520,根据该行标识和该数据对象中该行标识指示的行数据中属于条件列的数据的对应关系,将该行标识以及该数据对象中该行标识指示的行数据中属于条件列的数据存储在该键文件中。
例如,将行标识“5000”存储在键文件中,将表1中行标识“5000”对应的行数据中属于条件列的数据“100”、“111”存储在键文件中;并且,条件列的数据“100”、“111”和行标识“5000”是对应地存储在键文件中,使得在数据查询时在键文件中匹配到A列中的“100”和/或匹配到B列中的“111”,能够确定行标识为5000。以此类推,可以将其他行标识以及该其他
行标识指示的行数据所包括的属于条件列的数据,一一对应地存储至键文件中。
S530,根据该行标识和该数据对象中该行标识指示的行数据中属于查询列的数据的对应关系,将该数据对象中查询列的数据存储至该值文件中。
例如,将表1中行标识“5000”对应的行数据中属于查询列的数据“120”、“130”、“140”、“150”存储在值文件中,使得根据标识“5000”能够从值文件读取到数据“120”、“130”、“140”、“150”。以此类推,可以将其他行标识指示的行数据所包括的属于查询列的数据存储至值文件中,值文件中其他行标识指示的行数据所包括的属于查询列的数据与该其他行标识一一对应。
通过上述方法,可以将数据对象的条件列的数据和查询列的数据分别存储在键文件和值文件中,并且通过键文件中的行标识关联,这样,在访问数据对象的数据时,是先读取键文件以便从键文件中匹配查找到行标识,相对于现有技术减少了可以减少数据的读取量,从而提高数据访问的效率。
可选地,参见图6,该文件系统可包括多个分区(Partition),该多个分区中的每个分区还可以包括多个子分区(SubPartition),键文件和值文件可包括在子分区中。即,表(数据对象)中的数据被按照分区划分,并进一步按照子分区划分,本发明实施例将划分到每个子分区的数据分别存储至不同的键文件和值文件中;针对表中被划分到每个子分区的数据,均各自采用键文件和值文件存储,如图6所示。
可选的划分分区的方式,将文件系统按条件列全域空间划分为多个分区,该条件列全域空间可以是以条件列中每列为一个维度的空间;如果条件列仅包括一列,则该条件列全域空间为一维空间;如果条件列包括多列,则该条件列全域空间为多维空间。以表1为例,表1的条件列包括A列和B列,那么该条件列全域空间为二维空间(A列和B列分别作为一个维度)。
分区内部可根据某列(可以是条件列和查询列中的任一列)的哈希值做子分区,该哈希值根据哈希函数(hash function)处理该列得到。例如,文件系统的结构可以如图6所示。
举例说明,在条件列有多个时,可以将条件列的数据复合编码为字节(byte)数组。在这种情况下,可以根据byte数组的大小分成多个分区。例如,假设条件列为A列和B列;A列占3个字节,B占1个字节。编码后的
byte数组全域空间为[00000000,ffffffff],可分为四个分区,取值范围如下:
第一个分区:[00000000,5fffffff]
第二个分区:[60000000,7fffffff]
第三个分区:[80000000,9fffffff]
第四个分区:[a0000000,ffffffff]
例如,假设某一行A列值为0x621100,B列值0xf2,则编码后byte数组为0x621100f2,对应在第二个分区。
在分区内部,可以再按照某列划分子分区。某列可以为条件列中的一个列,也可以是查询列中的一个列。假设按照B列(属于条件列)划分子分区,其取值范围110~119,划分为5个子分区;则某行B列值为113时被分在第二个子分区内。
在进行数据查询时,可首先根据查询请求携带的条件列值过滤掉一些分区,再基于子分区字段过滤掉一些子分区。以上述分区划分为例,若查询请求中的A列值为0x621100,则可以过滤掉其他分区,只在第二分区中进行数据查询。类似地,若查询请求中还包括子分区划分所基于的条件列的值,例如B列的值,还可以进一步在第二分区中过滤掉其他子分区,只在根据B列的值确定的子分区中进行数据查询。这样能够大量降低数据查询所需访问的数据量。
可选地,该键文件的存储格式为行存储格式,该键文件的每行中的键(key)与值(value)一一对应,该键文件的每行的键为该数据对象的条件列的数据,该键文件的每行的值为行标识。例如,存储该键文件的行存储格式具体可以是HFile行存储格式。
举例说明,在键文件中采用如图4中所示的行存储格式存储表1中A列的数据和B列的数据,其中,键文件中每行的key为A列的数据和B列的数据,键文件中每行的value为行标识,并且键文件中每行中属于A列的数据和B列的数据与该行中的行标识对应。例如,键文件中行标识为5000的一行中,该行中属于A列的数据为“100”,该行中属于B列的数据为“111”。
可选地,该值文件的存储格式为行列混合存储格式,该值文件包括多个行组,该值文件的行组与行标识区间对应,具体地,该值文件中所有行组分别对应一个不同行标识区间。该值文件的每个行组内的数据按列式存储,具体地,该值文件中每个行组内按列式存储该个行组对应的行标识区间所指定
的多行数据中属于查询列的数据。例如,存储该值文件的行列混合存储格式具体可以是ORCFile行列混合存储格式。
举例说明,值文件可先分为多个行组,例如,值文件中5000行为一行组;行组内再按列式存储,便于按列读取。例如,在值文件中采用如图4中所示的行列混合存储格式存储表1中的查询列的数据,值文件按5000行一个行组分为多个行组,例如,行标识区间[0000,4999]对应第一个行组,行标识区间[5000,9999]对应第二个行组,图4中的行组标识为RowGroup;在每个行组内的数据按列式存储,例如,将表1中行标识“5000”对应的行数据中属于查询列的数据“120”、“130”、“140”、“150”按列式存储存储在值文件中的第二个行组,如图4所示。
可选地,同一行标识对应的数据对象的条件列的数据和查询列的数据存储于同一节点。具体地,键文件中该同一行标识以及该同一行标识对应的条件列的数据,和值文件中该同一行标识对应的查询列的数据,存储在同一节点上;例如在图4中,行标识“5003”,行标识“5003”对应的条件列的数据“102”、“112”,行标识“5003”对应的查询列的数据“123”、“133”、“143”、“153”,均存储在同一节点上。这样能够避免跨界点进行数据查询,从而避免数据在节点间的传递。
实现举例,可以按照行标识与数据对象中行数据的对应关系将同一行数据中条件列的数据和查询列的数据存储在同一节点上。例如,在存储上述行标识“5003”对应的行数据时,先将行标识“5003”对应的条件列的数据“102”、“113”和行标识“5003”根据该对应关系存储到某一节点的键文件中;在存储行标识“5003”对应的查询列的数据“123”、“133”、“143”、“153”时,根据该对应关系定位到同一节点,在该节点的值文件中存储行标识“5003”对应的查询列的数据“123”、“133”、“143”、“153”。
图7示出了本发明实施例的文件系统中数据查询的方法600的示意性流程图。该文件系统为上述本发明实施例的文件系统。该方法600可以由数据系统执行,例如图1至图3中的数据系统,具体可以由数据系统中的存储引擎(也可称为执行引擎)执行。
S610,接收查询数据对象的数据的查询请求,该查询请求包括条件列值和待查询的查询列的信息。
该查询请求用于查询数据对象的数据,该查询请求包括查询条件,即条
件列值和待查询的查询列的信息。待查询的查询列的信息表示查询哪一列或哪些列。例如,待查询的查询列的信息可以为待查询的查询列的列属性名称,例如在图4中列属性名称包括:C列、D列、E列和F列。
以查询上述表1的数据为例,查询条件可以为:查询A列值为“102”时D列的值、F列的值。查询请求中可包括条件列值:A列值“102”,待查询的查询列的信息:D列、F列。另外,查询表1的数据的查询请求中还会携带表1的标识信息,用于根据该标识信息获取表1的元数据。
S620,根据该条件列值,在键文件中获取第一行标识,该第一行标识为与该条件列值匹配的条件列的数据对应的行标识。
据上述,键文件存储有数据对象的条件列的数据和行标识。
根据查询请求,先查询键文件,在键文件中查找出与该条件列值匹配的条件列的数据。例如,在键文件中的A列匹配“102”,再获取与该条件列值“102”匹配的A列的数据所对应的行标识,即在键文件中的A列匹配到“102”时获取A列“102”对应的行标识“5003”。也就是说,在键文件中匹配查询请求中的条件列值,得到该第一行标识。
可选地,该键文件包括多个数据块,多个数据块分别对应不同的条件列值范围,该步骤S620可以包括:
根据该条件列值,确定该条件列值所属条件列值范围所对应的第一数据块;
读取该第一数据块,在该第一数据块中匹配该条件列值,获取该第一行标识。
具体而言,键文件可以包括多个数据块,例如在图4中,数据块标识为Data Block,键文件包括多个数据块Data Block。
在数据查询时,先按照条件列值,确定该条件列值所属条件列值范围所对应的数据块,作为待查询的数据块,即该第一数据块;读取该第一数据块,即将该第一数据块包含的数据读到内存,再在该第一数据块中按照该条件列值进行匹配,得到与该条件列值对应的第一行标识。这样,可以只需读键文件中的一个数据块,减少数据的读取量,并且缩小了需要匹配的条件列值的范围,加快了确定该条件列值对应的第一行标识的查询速度。
例如,结合图4,根据A列值“102”,确定数据块“Data Block 2”为待查询的第一数据块;将数据块“Data Block 2”中的数据读到内存,再将A
列值“102”在读取的数据进行匹配,根据匹配结果确定第一行标识为“5003”。
可选地,在该文件系统包括多个分区,并且该多个分区中的每个分区包括多个子分区的情况下,根据该条件列值,确定第一数据块,包括:
根据该条件列值,在该文件系统中确定待查询的分区;
在该待查询的分区中确定待查询的子分区;
在该待查询的子分区中确定该第一数据块。
具体而言,先根据该条件列值过滤掉不满足条件的分区,例如,若根据条件列值确定属于第二分区,则可以过滤掉其他分区,只在第二分区中查询,减少数据读取量;再过滤掉不满足条件的子分区,例如,若查询请求中还包括子分区划分所基于的条件列的值,还可以根据该条件列的值进一步在第二分区中确定子分区,过滤掉其他子分区,只在确定的子分区中进行查询,进一步减少数据读取量;然后再在该确定的子分区内查询。
S630,根据该第一行标识和该待查询的查询列的信息,在该值文件中读取数据。
在键文件中获取了该第一行标识后,再根据该待查询的查询列的信息确定待查询的查询列,并在值文件中获取待查询的查询列的数据。
可选地,该步骤S630可以包括:
根据该第一行标识,确定第一行组以及行偏移量,该第一行组为该值文件中该第一行标识对应的查询列的数据所在的行组,该行偏移量为该第一行标识对应的查询列的数据所在的行在第一行组的偏移量;
根据该行偏移量和该待查询的查询列的信息确定待查询数据的存储地址;
根据该存储地址,从该第一行组读取数据。
具体而言,先根据获取的第一行标识,在该值文件中确定行组,然后在行组中,根据该第一行标识和待查询的查询列的信息定位待查询的数据,进而读取定位到的数据。
例如,结合图4,值文件包括多个行组“RowGroup”,每个行组“RowGroup”包含5000行数据。根据A列值“102”,在数据块“Data Block 2”确定第一行标识为“5003”,第一行标识“5003”对应的查询列的数据属于行组“RowGroup 2”,第一行标识“5003”对应的查询列的数据在行组“RowGroup 2”中对应的行偏移量为3。
若需进一步读取D列、F列的值,则在行组“RowGroup 2”中,根据行偏移量为3和D列、F列,定位到第一行标识“5003”对应的查询列的数据中的D列、F列,读取定位到的D列的值为“133”,读取定位到的F列的值为“153”。
作为文件系统中数据查询的方法的一个实现举例,假设查询图4所示的表1中A列值为“102”时D列、F列的值,实现步骤如下:
1、在A列值为“102”时,确认A列值“102”属于条件列值范围“102”到“104”,条件列值范围“102”到“104”在键文件中属于数据块DataBlock 2;则跳过数据块DataBlock1,直接读取数据块DataBlock2。
2、数据块DataBlock2中第一行中的A列值为102,因此匹配成功得出行号5003;而第二行中A的取值103已大于102,则不再后续匹配。
3、由行号5003算出在值文件中属于行组RowGroup 2(假设每个RowGroup包含5000行),则跳过行组RowGroup 1。
4、在行组RowGroup 2中,根据行号“5003”(行偏移量为3)定位到D列第四(5003%5000+1)个数据,读取出A列值为“102”时D列的值为“133”;根据行号“5003”(行偏移量为3)定位到F列第四(5003%5000+1)个数据,读取出A列值为“102”时F列的值为“153”。
5、得到在A列值为“102”时,D列的值为“133”,F列的值为“153”。
因此,本发明实施例的文件系统中数据查询的方法,先根据条件列值,在键文件中获取与该条件列值匹配的条件列的数据对应的行标识,再根据该行标识和待查询的查询列的信息,在值文件中读取数据,在查询过程中可以只读取键文件中的包括与该条件列值匹配的条件列的数据所在的数据块,减少了数据的读取量,从而能够提高数据查询的效率。
下面以图2和图3的数据系统为例详细描述本发明实施例。应注意,这只是为了帮助本领域技术人员更好地理解本发明实施例,而非限制本发明实施例的范围。
在图2所示的数据系统中,底层的分布式文件系统采用本发明实施例提供的文件系统的组织形式。为了达到更好的数据访问效果,存储数据的键文件(Key File)和值文件(Value File)采用搭配(Collocation)存放,即Key File和Value File两文件中与相同行标识区间对应的数据均存放在同一物理节点上,避免数据查询时在节点间的传递数据。
服务器,例如HiveServer,负责查询请求解析、查询优化、任务(Task)构建。数据组织上服务器仅负责到分区(Partition)一级,根据Partition创建任务(Task);Partition内的数据组织与数据存储由Task完成。
图2所示数据系统中创建表和数据加载流程如图8所示:
701,服务器接收创建表请求。
创建表请求中可以包括条件字段、查询字段、分区等信息。
702,服务器根据创建表请求记录表的元数据信息。
703,服务器通过存储引擎按照本发明的文件系统的数据组织方式在文件系统(例如Hadoop分布式文件系统(Hadoop Distributed File System,HDFS)上创建表目录、分区目录。
704,服务器接收数据加载请求。
705,服务器读取表的元数据。
706,服务器根据表的元数据中的表分区信息构建加载任务,并请求调度到各节点上执行每个任务,每个任务仅处理单个分区的数据,数据量较大时对单个分区也可创建多个任务。
707,任务在节点上执行时读取分配的原始数据(即待加载到文件系统的数据),然后交由存储引擎完成数据加载。
708,存储引擎加载数据时先根据子分区列(可以是数据对象中,条件列中的一列或者是查询列中的一列)所属来计算子分区,并在文件系统上创建子分区目录,然后再把表的条件列的数据写入KeyFile,把查询列的数据写入Value File。
例如,把条件列的数据编码成byte数组,并将该byte数组作为KeyFile中的key,行号作为value,以HFile格式写入KeyFile内;对查询列数据按照ORCFile格式写入Value File。
709,文件系统在磁盘上写入Key File、Value File时采用同分布机制,使得Key File和Value File两文件中与相同行标识区间对应的数据存储在同一物理节点上。
图2所示数据系统中数据查询流程如图9所示:
801,服务器接收查询请求。
查询请求可以包括查询条件,,例如请求查询的表的条件列值和待查询的查询列的信息。
802,服务器读取请求查询的表的元数据。服务器从元数据中获取表的分区等信息。
803,服务器根据查询条件中条件列值请求存储引擎过滤掉些不满足条件的分区,即只查询满足条件的分区,减少数据读取量。
804,服务器针对满足条件的分区创建查询任务,并请求调度到分区数据所在的物理节点上执行任务。
805,执行任务时首先根据查询条件中的子分区划分所基于的条件列的值匹配子分区,过滤掉不满足条件的子分区,进一步减少数据读取量,然后再在子分区内部查询。
806,在子分区内查询时存储引擎根据查询条件中的条件列值在Key File中直接定位到待读取的数据块,只读取定位的数据块,减少了需读取的数据量和需匹配计算的数据量;从数据块匹配确定条件列值对应的行标识后,在Value File中对行标识和待查询的查询列进行匹配,匹配定位到待查询的数据,读取匹配定位到的数据。这样在响应每个查询请求进行数据查询时,条件列值匹配是在Key File中进行,相对于现有技术减少了数据读取量;并且,根据行标识和待查询的查询列可以直接从Value File中定位到待查询的数据并读取,相对于现有技术减少了数据读取量;另外,两文件中与相同行标识区间对应的数据存储在同一物理节点上,不会跨节点读取数据,网络上的数据传输量也相应减少。
在图3所示的数据系统中,数据直接存储在本地盘上,而不经过分布式文件系统。
协调器(Coordinator)解析查询请求,进行查询优化、请求分发,并汇总查询结果。元数据则维护了表定义、分区及分区在数据节点(DataNode)上的分布。DataNode内嵌存储引擎,用于对表包含的数据进行数据管理和数据查询,并在数据查询时执行查询计算。DataNode把表包括的数据直接存储在本地盘内,为保障数据可靠性,同一份数据在多个DataNode上备份。
图3所示的数据系统中数据加载流程如图10所示:
901,协调器接收创建表请求。
创建表请求中可以包括字段、分区等信息。
902,协调器给分区分配数据节点(DataNode),并在元数据中记录表信息。
903,协调器接收数据加载请求。
904,协调器从元数据中读取表信息。
905,协调器根据表信息中的表的分区情况请求相应的DataNode进行数据加载。
906,DataNode读取原始数据,并请求存储引擎进行数据的加载写入。
907,存储引擎根据子分区列(可以是数据对象中,条件列中的一列或者是查询列中的一列)计算待加载数据的子分区,并在本地磁盘上创建子分区目录;然后分别写Key File和Value File。例如,将编码表的条件列的数据以字节(byte)数组的形式作为KeyFile中的key,行号作为value,以HFile格式写入KeyFile内;对查询列数据按照ORCFile格式写入Value File。Key File和Value File在本地磁盘的子分区目录内。
图3所示的数据系统中数据查询流程如图11所示:
1001,协调器接收查询请求。
查询请求可以包括查询条件,例如请求查询的表的条件列值和待查询的查询列的信息。
1002,协调器从元数据中读取表信息。
1003,协调器根据查询条件中的条件列值,过滤掉不满足条件的分区,即只查询满足条件的分区,这样减少了不必要数据的读取计算;然后再请求相应的DataNode执行查询。
1004,DataNode在查询时依据查询条件中的子分区划分所基于的条件列的值计算子分区,进而屏蔽不满足条件的子分区,这也减少了数据的读取计算量;然后请求存储引擎在子分区内进行查询。
1005,在子分区内查询时存储引擎根据查询条件,根据查询条件中的条件列值在Key File中直接定位到待读取的数据块,读取定位的数据块。从数据块匹配确定条件列值对应的行标识后,根据行标识在Value File中确定行偏移(RowOffset),再根据RowOffset和待查询的查询列从Value File中直接读取待查询的数据。这样在响应每个查询请求进行数据查询时,条件列值匹配是在Key File中进行,相对于现有技术减少了数据读取量;并且,根据行标识(或者RowOffset)和待查询的查询列可以直接从Value File中定位到待查询的数据并读取,相对于现有技术减少了数据读取量;另外,两文件中与相同行标识区间对应的数据存储在同一物理节点上,不会跨节点读取数
据,网络上的数据传输量也相应减少。
因此,采用本发明的存储组织格式,首先通过分区过滤、子分区过滤,避免了不必要数据的读取,降低了读取的数据量;在查询时先匹配Key File,根据从Key File匹配所得的行标识和待查询的查询列直接从Value File精确读取到待查询的数据,又进一步减少了文件内数据读取,也减少了匹配计算量。因此,本发明实施例的技术方案能够支撑海量数据的高性能查询。
应理解,在本发明的各种实施例中,上述各过程的序号的大小并不意味着执行顺序的先后,各过程的执行顺序应以其功能和内在逻辑确定,而不应对本发明实施例的实施过程构成任何限定。
上文中详细描述了根据本发明实施例的数据查询的方法和数据对象的存储方法,下面将描述根据本发明实施例的数据系统和数据查询的装置。
图12示出了根据本发明实施例的数据系统1200的示意性框图。如图12所示,该数据系统1200包括:
文件系统1210,该文件系统包括键文件和值文件,该键文件用于存储数据对象的条件列的数据和行标识,该值文件用于存储该数据对象的查询列的数据;
存储引擎1220,也可以称为执行引擎(如图2或图3所示),用于:
接收查询该数据对象的数据的查询请求,该查询请求包括条件列值和待查询的查询列的信息;
根据该条件列值,在该键文件中获取第一行标识,该第一行标识为与该条件列值匹配的条件列的数据对应的行标识;
根据该第一行标识和该待查询的查询列的信息,在该值文件中读取数据。
本发明实施例的数据系统,在查询数据时,先根据条件列值,在键文件中获取与该条件列值匹配的条件列的数据对应的行标识,再根据该行标识和待查询的查询列的信息,在值文件中读取该待查询的查询列的数据,在查询过程中可以只读取键文件中的数据块,减少了数据的读取量,从而能够提高数据查询的效率。
在本发明实施例中,可选地,该键文件的存储格式为行存储格式,该键文件的每行中的键与值一一对应,该键文件的每行的键对应该数据对象的条件列的数据,该键文件的每行的值对应行标识。
在本发明实施例中,可选地,该值文件的存储格式为行列混合存储格式,该值文件包括多个行组,该值文件的行组与行标识区间对应,该值文件的每个行组内的数据按列式存储。
在本发明实施例中,可选地,该键文件包括多个数据块,多个数据块分别对应不同的条件列值范围;该存储引擎1220具体用于:
根据该条件列值,确定该条件列值所属条件列值范围所对应的第一数据块;
读取该第一数据块,在该第一数据块中匹配该条件列值,获取该第一行标识。
在本发明实施例中,可选地,该文件系统包括多个分区,该多个分区中的每个分区包括多个子分区,该键文件和该值文件包括在子分区中;
该存储引擎1220具体用于:
根据该条件列值,在该文件系统中确定待查询的分区;
在该待查询的分区中确定待查询的子分区;
在该待查询的子分区中确定该第一数据块。
在本发明实施例中,可选地,该存储引擎1220具体用于:
根据该第一行标识,确定第一行组以及行偏移量,该第一行组为该值文件中该第一行标识对应的查询列的数据所在的行组,该行偏移量为该第一行标识对应的查询列的数据所在的行在第一行组的偏移量;
根据该行偏移量和该待查询的查询列的信息确定待查询数据的存储地址;
根据该存储地址,从该第一行组读取数据。
在本发明实施例中,可选地,同一行标识对应的该数据对象的条件列的数据和查询列的数据存储于同一节点。
根据本发明实施例的数据系统1200可执行根据本发明实施例的文件系统中数据查询的方法,并且数据系统1200中的各个模块的上述和其它操作和/或功能分别为了实现前述各个方法的相应流程,为了简洁,在此不再赘述。
图13示出了根据本发明实施例的数据系统1300的示意性框图。如图13所示,该数据系统1300包括:
文件系统1310,该文件系统包括键文件和值文件;
存储引擎1320,用于:
确定数据对象的每行数据的行标识,该数据对象按列分为条件列和查询列,该行标识与该行标识指示的行数据中属于条件列的数据和属于查询列的数据分别对应;
根据该行标识和该数据对象中该行标识指示的行数据中属于条件列的数据的对应关系,将该行标识以及该数据对象中该行标识指示的行数据中属于条件列的数据存储在该键文件中;
根据该行标识和该数据对象中该行标识指示的行数据中属于查询列的数据的对应关系,将该数据对象中查询列的数据存储至该值文件中。
本发明实施例的数据系统,可以将数据对象的条件列的数据和查询列的数据分别存储在键文件和值文件中,并且通过键文件中的行标识关联,这样,在访问数据对象的数据时,可以减少数据的读取量,从而提高数据访问的效率。
在本发明实施例中,可选地,该键文件的存储格式为行存储格式,该键文件的每行中的键与值一一对应,该键文件的每行的键为该数据对象中条件列的数据,该键文件的每行的值为行标识。
在本发明实施例中,可选地,该值文件的存储格式为行列混合存储格式,该值文件包括多个行组,所有行组分别对应一个不同行标识区间,每个行组内按列式存储该个行组对应的行标识区间所指定的多行数据中属于查询列的数据。
根据本发明实施例的数据系统1300可执行根据本发明实施例的文件系统中数据对象的存储方法,并且数据系统1300中的各个模块的上述和其它操作和/或功能分别为了实现前述各个方法的相应流程,为了简洁,在此不再赘述。
图14示出了本发明一个实施例的数据查询的装置1400的示意性框图。该装置1400可以用于查询上述本发明实施例的文件系统中的数据。如图14所示,该装置1400包括:
接收模块1410,用于接收查询数据对象的数据的查询请求,该查询请求包括条件列值和待查询的查询列的信息;
键文件查询模块1420,用于根据该条件列值,在键文件中获取第一行标识,该第一行标识为与该条件列值匹配的条件列的数据对应的行标识;
值文件查询模块1430,用于根据该第一行标识和该待查询的查询列的信
息,在值文件中读取数据。
本发明实施例的数据查询的装置,先根据条件列值,在键文件中获取与该条件列值匹配的条件列的数据对应的行标识,再根据该行标识和待查询的查询列的信息,在值文件中读取该待查询的查询列的数据,在查询过程中可以只读取键文件中的数据块,减少了数据的读取量,从而能够提高数据查询的效率。
可选地,该键文件的存储格式为行存储格式,该键文件的每行中的键与值一一对应,该键文件的每行的键为该数据对象的条件列的数据,该键文件的每行的值为行标识。
可选地,该值文件的存储格式为行列混合存储格式,该值文件包括多个行组,该值文件的行组与行标识区间对应,该值文件的每个行组内的数据按列式存储。
可选地,该键文件包括多个数据块,多个数据块分别对应不同的条件列值范围;该键文件查询模块1420具体用于:
根据该条件列值,确定该条件列值所属条件列值范围所对应的第一数据块;
读取该第一数据块,在该第一数据块中匹配该条件列值,获取该第一行标识。
可选地,该值文件查询模块1430具体用于:
根据该第一行标识,确定第一行组以及行偏移量,该第一行组为该值文件中该第一行标识对应的查询列的数据所在的行组,该行偏移量为该第一行标识对应的查询列的数据所在的行在第一行组的偏移量;
根据该行偏移量和该待查询的查询列的信息确定待查询数据的存储地址;
根据该存储地址,从该第一行组读取数据。
可选地,同一行标识对应的该数据对象的条件列的数据和查询列的数据存储于同一节点。
本发明实施例的数据查询的装置1400可对应于本发明实施例的数据查询的方法600的执行主体,并且装置1400中的各个模块的上述和其它操作和/或功能分别为了实现前述各个方法的相应流程,为了简洁,在此不再赘述。
图15示出了本发明另一个实施例的数据查询的装置1500的示意性框
图。该装置1500可以用于存储上述本发明实施例的文件系统中的数据对象。该数据对象按列分为条件列和查询列。如图15所示,该装置1500包括:
确定模块1510,用于确定该数据对象的每行数据的行标识,该行标识与该行标识指示的行数据中属于条件列的数据和属于查询列的数据分别对应;
键文件存储模块1520,用于根据该行标识和该数据对象中该行标识指示的行数据中属于条件列的数据的对应关系,将该行标识以及该数据对象中该行标识指示的行数据中属于条件列的数据存储在该键文件中;
值文件存储模块1530,用于根据该行标识和该数据对象中该行标识指示的行数据中属于查询列的数据的对应关系,将该数据对象中查询列的数据存储至该值文件中。
本发明实施例的数据查询的装置,可以将数据对象的条件列的数据和查询列的数据分别存储在键文件和值文件中,并且通过键文件中的行标识关联,这样,在访问数据对象的数据时,是先读取键文件以便从键文件中匹配查找到行标识,相对于现有技术减少了可以减少数据的读取量,从而提高数据访问的效率。
可选地,该键文件的存储格式为行存储格式,该键文件的每行中的键与值一一对应,该键文件的每行的键为该数据对象中条件列的数据,该键文件的每行的值为行标识。
可选地,该值文件的存储格式为行列混合存储格式,该值文件包括多个行组,所有行组分别对应一个不同行标识区间,每个行组内按列式存储该个行组对应的行标识区间所指定的多行数据中属于查询列的数据。
本发明实施例的数据查询的装置1500可对应于本发明实施例的数据对象的存储方法500的执行主体,并且装置1500中的各个模块的上述和其它操作和/或功能分别为了实现前述各个方法的相应流程,为了简洁,在此不再赘述。
图16示出了本发明的又一实施例提供的数据查询的装置的结构,包括至少一个处理器1602(例如CPU),至少一个网络接口1605或者其他通信接口,存储器1606,和至少一个通信总线1603;通信总线1603用于实现这些装置之间的连接通信。处理器1602用于执行存储器1606中存储的可执行模块,例如计算机程序。存储器1606可能包含高速随机存取存储器(Random Access Memory,RAM),也可能还包括非不稳定的存储器(non-volatile
memory),例如至少一个磁盘存储器。通过至少一个网络接口1605(可以是有线或者无线)实现与至少一个其他网元之间的通信连接。
在一些实施方式中,存储器1606存储了程序16061,处理器1602执行程序16061,用于执行前述本发明实施例的各个方法,例如数据查询的方法和数据对象的存储方法。
所属领域的技术人员可以清楚地了解到,为了描述的方便和简洁,上述描述的系统和装置的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
应理解,在本发明实施例中,术语“和/或”仅仅是一种描述关联对象的关联关系,表示可以存在三种关系。例如,A和/或B,可以表示:单独存在A,同时存在A和B,单独存在B这三种情况。另外,本文中字符“/”,一般表示前后关联对象是一种“或”的关系。
本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各示例的系统、设备及算法步骤,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各示例的组成及步骤。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。
以上所描述的装置实施例仅仅是示意性的。一个可能设计中,可以对存储引擎进行功能单元的划分,划分方式可以是逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另外,多个功能单元相互之间的耦合或直接耦合或通信连接可以是通过一些接口、装置或单元的间接耦合或通信连接,也可以是电的,机械的或其它的形式连接。
各个功能单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:USB闪存驱动器(USB flash drive)、移动
硬盘、只读存储器(Read-Only Memory,ROM)、随机存取存储器(Random Access Memory,RAM)、磁碟或者光盘等各种可以存储程序代码的介质。
以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到各种等效的修改或替换,这些修改或替换都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以权利要求的保护范围为准。
Claims (18)
- 一种文件系统中数据查询的方法,其特征在于,所述文件系统包括键文件和值文件,所述键文件用于存储数据对象的条件列的数据和行标识,所述值文件用于存储所述数据对象的查询列的数据,所述方法包括:接收查询所述数据对象的数据的查询请求,所述查询请求包括条件列值和待查询的查询列的信息;根据所述条件列值,在所述键文件中获取第一行标识,所述第一行标识为与所述条件列值匹配的条件列的数据对应的行标识;根据所述第一行标识和所述待查询的查询列的信息,在所述值文件中读取数据。
- 根据权利要求1所述的方法,其特征在于,所述键文件的存储格式为行存储格式,所述键文件的每行中的键与值一一对应,所述键文件的每行的键为所述数据对象的条件列的数据,所述键文件的每行的值为行标识。
- 根据权利要求1或2所述的方法,其特征在于,所述值文件的存储格式为行列混合存储格式,所述值文件包括多个行组,所述值文件的行组与行标识区间对应,所述值文件的每个行组内的数据按列式存储。
- 根据权利要求1至3中任一项所述的方法,其特征在于,所述键文件包括多个数据块,多个数据块分别对应不同的条件列值范围;所述根据所述条件列值,在所述键文件中获取第一行标识,包括:根据所述条件列值,确定所述条件列值所属条件列值范围所对应的第一数据块;读取所述第一数据块,在所述第一数据块中匹配所述条件列值,获取所述第一行标识。
- 根据权利要求3所述的方法,其特征在于,所述根据所述第一行标识和所述待查询的查询列的信息,在所述值文件中读取数据,包括:根据所述第一行标识,确定第一行组以及行偏移量,所述第一行组为所述值文件中所述第一行标识对应的查询列的数据所在的行组,所述行偏移量为所述第一行标识对应的查询列的数据所在的行在第一行组的偏移量;根据所述行偏移量和所述待查询的查询列的信息确定待查询数据的存储地址;根据所述存储地址,从所述第一行组读取数据。
- 根据权利要求1至5中任一项所述的方法,其特征在于,同一行标识对应的所述数据对象的条件列的数据和查询列的数据存储于同一节点。
- 一种文件系统中数据对象的存储方法,其特征在于,所述文件系统包括键文件和值文件,所述数据对象按列分为条件列和查询列,所述方法包括:确定所述数据对象的每行数据的行标识,所述行标识与所述行标识指示的行数据中属于条件列的数据和属于查询列的数据分别对应;根据所述行标识和所述数据对象中所述行标识指示的行数据中属于条件列的数据的对应关系,将所述行标识以及所述数据对象中所述行标识指示的行数据中属于条件列的数据存储在所述键文件中;根据所述行标识和所述数据对象中所述行标识指示的行数据中属于查询列的数据的对应关系,将所述数据对象中查询列的数据存储至所述值文件中。
- 根据权利要求7所述的方法,其特征在于,所述键文件的存储格式为行存储格式,所述键文件的每行中的键与值一一对应,所述键文件的每行的键为所述数据对象中条件列的数据,所述键文件的每行的值为行标识。
- 根据权利要求7或8所述的方法,其特征在于,所述值文件的存储格式为行列混合存储格式,所述值文件包括多个行组,所有行组分别对应一个不同行标识区间,每个行组内按列式存储该个行组对应的行标识区间所指定的多行数据中属于查询列的数据。
- 一种数据系统,其特征在于,包括:文件系统,所述文件系统包括键文件和值文件,所述键文件用于存储数据对象的条件列的数据和行标识,所述值文件用于存储所述数据对象的查询列的数据;存储引擎,用于:接收查询所述数据对象的数据的查询请求,所述查询请求包括条件列值和待查询的查询列的信息;根据所述条件列值,在所述键文件中获取第一行标识,所述第一行标识为与所述条件列值匹配的条件列的数据对应的行标识;根据所述第一行标识和所述待查询的查询列的信息,在所述值文件中读取数据。
- 根据权利要求10所述的数据系统,其特征在于,所述键文件的存储格式为行存储格式,所述键文件的每行中的键与值一一对应,所述键文件的每行的键为所述数据对象的条件列的数据,所述键文件的每行的值为行标识。
- 根据权利要求10或11所述的数据系统,其特征在于,所述值文件的存储格式为行列混合存储格式,所述值文件包括多个行组,所述值文件的行组与行标识区间对应,所述值文件的每个行组内的数据按列式存储。
- 根据权利要求10至12中任一项所述的数据系统,其特征在于,所述键文件包括多个数据块,多个数据块分别对应不同的条件列值范围;所述存储引擎具体用于:根据所述条件列值,确定所述条件列值所属条件列值范围所对应的第一数据块;读取所述第一数据块,在所述第一数据块中匹配所述条件列值,获取所述第一行标识。
- 根据权利要求12所述的数据系统,其特征在于,所述存储引擎具体用于:根据所述第一行标识,确定第一行组以及行偏移量,所述第一行组为所述值文件中所述第一行标识对应的查询列的数据所在的行组,所述行偏移量为所述第一行标识对应的查询列的数据所在的行在第一行组的偏移量;根据所述行偏移量和所述待查询的查询列的信息确定待查询数据的存储地址;根据所述存储地址,从所述第一行组读取数据。
- 根据权利要求10至14中任一项所述的数据系统,其特征在于,同一行标识对应的所述数据对象的条件列的数据和查询列的数据存储于同一节点。
- 一种数据系统,其特征在于,包括:文件系统,所述文件系统包括键文件和值文件;存储引擎,用于:确定数据对象的每行数据的行标识,所述数据对象按列分为条件列和查询列,所述行标识与所述行标识指示的行数据中属于条件列的数据和属于查询列的数据分别对应;根据所述行标识和所述数据对象中所述行标识指示的行数据中属于条件列的数据的对应关系,将所述行标识以及所述数据对象中所述行标识指示的行数据中属于条件列的数据存储在所述键文件中;根据所述行标识和所述数据对象中所述行标识指示的行数据中属于查询列的数据的对应关系,将所述数据对象中查询列的数据存储至所述值文件中。
- 根据权利要求16所述的数据系统,其特征在于,所述键文件的存储格式为行存储格式,所述键文件的每行中的键与值一一对应,所述键文件的每行的键为所述数据对象中条件列的数据,所述键文件的每行的值为行标识。
- 根据权利要求16或17所述的数据系统,其特征在于,所述值文件的存储格式为行列混合存储格式,所述值文件包括多个行组,所有行组分别对应一个不同行标识区间,每个行组内按列式存储该个行组对应的行标识区间所指定的多行数据中属于查询列的数据。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201680001578.6A CN106471501B (zh) | 2016-03-24 | 2016-03-24 | 数据查询的方法、数据对象的存储方法和数据系统 |
PCT/CN2016/077247 WO2017161540A1 (zh) | 2016-03-24 | 2016-03-24 | 数据查询的方法、数据对象的存储方法和数据系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
PCT/CN2016/077247 WO2017161540A1 (zh) | 2016-03-24 | 2016-03-24 | 数据查询的方法、数据对象的存储方法和数据系统 |
Publications (1)
Publication Number | Publication Date |
---|---|
WO2017161540A1 true WO2017161540A1 (zh) | 2017-09-28 |
Family
ID=58230937
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
PCT/CN2016/077247 WO2017161540A1 (zh) | 2016-03-24 | 2016-03-24 | 数据查询的方法、数据对象的存储方法和数据系统 |
Country Status (2)
Country | Link |
---|---|
CN (1) | CN106471501B (zh) |
WO (1) | WO2017161540A1 (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111399759A (zh) * | 2019-11-07 | 2020-07-10 | 杭州海康威视系统技术有限公司 | 读数据、写数据的方法、以及对象文件系统 |
EP4030312A4 (en) * | 2019-09-24 | 2022-11-02 | Huawei Cloud Computing Technologies Co., Ltd. | METHOD AND APPARATUS FOR QUERYING DATA, COMPUTER DEVICE AND STORAGE MEDIA |
Families Citing this family (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110019014A (zh) * | 2017-12-19 | 2019-07-16 | 华为技术有限公司 | 向文件系统写入数据记录的方法和装置 |
CN108491163B (zh) * | 2018-03-19 | 2022-01-04 | 腾讯科技(深圳)有限公司 | 一种大数据处理方法、装置和存储介质 |
CN109164977B (zh) * | 2018-07-23 | 2022-01-11 | 中国建设银行股份有限公司 | 一种数据存储系统和方法、存储介质 |
CN109800336B (zh) * | 2019-01-30 | 2020-12-25 | 百度在线网络技术(北京)有限公司 | 基于键值对存储系统的表格实现方法、装置、设备和介质 |
CN111488386B (zh) * | 2020-04-14 | 2023-09-29 | 北京易数科技有限公司 | 数据查询方法和装置 |
CN115617878B (zh) * | 2022-11-17 | 2023-03-10 | 浪潮电子信息产业股份有限公司 | 一种数据查询方法、系统、装置、设备及计算机存储介质 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101727465A (zh) * | 2008-11-03 | 2010-06-09 | 中国移动通信集团公司 | 分布式列存储数据库索引建立、查询方法及装置与系统 |
CN102521303A (zh) * | 2011-11-30 | 2012-06-27 | 北京人大金仓信息技术股份有限公司 | 一种用于列数据库的单表多列序存储方法 |
CN102682108A (zh) * | 2012-05-08 | 2012-09-19 | 同方光盘股份有限公司 | 一种行列混合的数据库存储方法 |
US20150006485A1 (en) * | 2013-06-26 | 2015-01-01 | Eric Alan Christiansen | High Scalability Data Management Techniques for Representing, Editing, and Accessing Data |
CN104574159A (zh) * | 2015-01-30 | 2015-04-29 | 华为技术有限公司 | 数据存储、查询方法和装置 |
Family Cites Families (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103366015B (zh) * | 2013-07-31 | 2016-04-27 | 东南大学 | 一种基于Hadoop的OLAP数据存储与查询方法 |
CN104516912B (zh) * | 2013-09-29 | 2018-06-26 | 中国移动通信集团黑龙江有限公司 | 一种动态的数据存储方法及装置 |
CN104536959B (zh) * | 2014-10-16 | 2018-03-06 | 南京邮电大学 | 一种Hadoop存取海量小文件的优化方法 |
CN105426442B (zh) * | 2015-11-06 | 2020-01-14 | 广东湛数大数据有限公司 | 一种基于分布式数据库消息数据管理方法及系统 |
-
2016
- 2016-03-24 WO PCT/CN2016/077247 patent/WO2017161540A1/zh active Application Filing
- 2016-03-24 CN CN201680001578.6A patent/CN106471501B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101727465A (zh) * | 2008-11-03 | 2010-06-09 | 中国移动通信集团公司 | 分布式列存储数据库索引建立、查询方法及装置与系统 |
CN102521303A (zh) * | 2011-11-30 | 2012-06-27 | 北京人大金仓信息技术股份有限公司 | 一种用于列数据库的单表多列序存储方法 |
CN102682108A (zh) * | 2012-05-08 | 2012-09-19 | 同方光盘股份有限公司 | 一种行列混合的数据库存储方法 |
US20150006485A1 (en) * | 2013-06-26 | 2015-01-01 | Eric Alan Christiansen | High Scalability Data Management Techniques for Representing, Editing, and Accessing Data |
CN104574159A (zh) * | 2015-01-30 | 2015-04-29 | 华为技术有限公司 | 数据存储、查询方法和装置 |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP4030312A4 (en) * | 2019-09-24 | 2022-11-02 | Huawei Cloud Computing Technologies Co., Ltd. | METHOD AND APPARATUS FOR QUERYING DATA, COMPUTER DEVICE AND STORAGE MEDIA |
CN111399759A (zh) * | 2019-11-07 | 2020-07-10 | 杭州海康威视系统技术有限公司 | 读数据、写数据的方法、以及对象文件系统 |
CN111399759B (zh) * | 2019-11-07 | 2023-02-10 | 杭州海康威视系统技术有限公司 | 读数据、写数据的方法、以及对象文件系统 |
Also Published As
Publication number | Publication date |
---|---|
CN106471501B (zh) | 2020-04-14 |
CN106471501A (zh) | 2017-03-01 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
WO2017161540A1 (zh) | 数据查询的方法、数据对象的存储方法和数据系统 | |
US10789231B2 (en) | Spatial indexing for distributed storage using local indexes | |
TWI603211B (zh) | Construction of inverted index system based on Lucene, data processing method and device | |
US10970300B2 (en) | Supporting multi-tenancy in a federated data management system | |
WO2017096892A1 (zh) | 索引构建方法、查询方法及对应装置、设备、计算机存储介质 | |
US11132383B2 (en) | Techniques for processing database tables using indexes | |
WO2019105420A1 (zh) | 数据查询 | |
US11030196B2 (en) | Method and apparatus for processing join query | |
WO2013078583A1 (zh) | 优化数据访问的方法及装置、优化数据存储的方法及装置 | |
CN112287182A (zh) | 图数据存储、处理方法、装置及计算机存储介质 | |
US8812489B2 (en) | Swapping expected and candidate affinities in a query plan cache | |
CN111221791A (zh) | 一种多源异构数据导入数据湖的方法 | |
CN102955792A (zh) | 一种实时全文搜索引擎事务处理的实现方法 | |
CN112015820A (zh) | 分布式图数据库实现的方法、系统、电子装置和存储介质 | |
US10762068B2 (en) | Virtual columns to expose row specific details for query execution in column store databases | |
CN104778182A (zh) | 基于HBase的数据导入方法和系统 | |
US20180349422A1 (en) | Database management system, database server, and database management method | |
US20220342888A1 (en) | Object tagging | |
US20170316042A1 (en) | Index page with latch-free access | |
CN112347055A (zh) | 一种基于云计算的医疗数据处理方法及系统 | |
US20220215021A1 (en) | Data Query Method and Apparatus, Computing Device, and Storage Medium | |
CN116010345A (zh) | 一种实现流批一体数据湖的表服务方案的方法、装置及设备 | |
CN110990394B (zh) | 分布式面向列数据库表的行数统计方法、装置和存储介质 | |
CN108984720B (zh) | 基于列存储的数据查询方法、装置、服务器及存储介质 | |
US9442948B2 (en) | Resource-specific control blocks for database cache |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
NENP | Non-entry into the national phase |
Ref country code: DE |
|
121 | Ep: the epo has been informed by wipo that ep was designated in this application |
Ref document number: 16894895 Country of ref document: EP Kind code of ref document: A1 |
|
122 | Ep: pct application non-entry in european phase |
Ref document number: 16894895 Country of ref document: EP Kind code of ref document: A1 |