CN113051225A - 基于块数据的orc优化数据存储格式及数据读写方法 - Google Patents

基于块数据的orc优化数据存储格式及数据读写方法 Download PDF

Info

Publication number
CN113051225A
CN113051225A CN202110385690.7A CN202110385690A CN113051225A CN 113051225 A CN113051225 A CN 113051225A CN 202110385690 A CN202110385690 A CN 202110385690A CN 113051225 A CN113051225 A CN 113051225A
Authority
CN
China
Prior art keywords
data
file
orc
blocklet
storage format
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
Application number
CN202110385690.7A
Other languages
English (en)
Inventor
赵智峰
苏锋
强少卫
丁军峰
王勇强
曹俊亮
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Xi'an Fenghuo Software Technology Co ltd
Original Assignee
Xi'an Fenghuo Software Technology Co ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Xi'an Fenghuo Software Technology Co ltd filed Critical Xi'an Fenghuo Software Technology Co ltd
Priority to CN202110385690.7A priority Critical patent/CN113051225A/zh
Publication of CN113051225A publication Critical patent/CN113051225A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/10File systems; File servers
    • G06F16/13File access structures, e.g. distributed indices
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/10File systems; File servers
    • G06F16/14Details of searching files based on file metadata
    • G06F16/148File search processing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/10File systems; File servers
    • G06F16/17Details of further file system functions
    • G06F16/174Redundancy elimination performed by the file system

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Data Mining & Analysis (AREA)
  • Databases & Information Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Library & Information Science (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本发明公开了一种基于块数据的ORC优化数据存储格式及数据读写方法,本发明在ORC结构中引入Blocklet以减少任务个数,查询分析任务以Blocklet为任务输入数据,在不影响文件读写性能的情况下,减少任务数,从而提升系统并发度;提供多级过滤机制:提供Blocklet级索引和Blocklet内部的CK级细粒度索引,实现通过File级别索引、Blocklet级别索引、CKRouter多级索引,提高过滤效果。其中CK级索引的实现上可以采用多种数据结构,如B+Tree或跳表等其他高效数据结构;提供多优先级的谓词过滤机制,提高了过滤效果。

Description

基于块数据的ORC优化数据存储格式及数据读写方法
技术领域
本发明属于数据存储技术领域,尤其涉及基于块数据的ORC优化数据存储格式及数据读取方法。
背景技术
ORC(Optimized Row Columnar)是一种Hadoop生态圈中的列式存储格式,来源于Apache Hive,是Apache顶级项目。用于降低数据存储空间、加速Hive查询速度,后被Spark、Presto等广泛采用, ORC是一种自描述的列式存储格式,文件元数据采用ProtocolBuffers序列化,其文件格式如图1~3所示。现有ORC数据格式存在以下技术问题:
1、数据按照写入序有序,未按照物理含义聚集,查询时随机读严重,效率较低
现有实现方案是按照数据的写入序有序、聚集存储,未按照数据的实际物理含义、数据间的关联关系聚集存储,会导致:
(1)读取ORC文件数据时,因为数据无序导致分散分布,产生较多随机读,效率低
(2)读取数据时需要读取完整的RowGroup数据,存在IO浪费
2、数据过滤效率低,影响查询性能
带谓词读取ORC文件时,并未使用Stripe级统计信息,而是遍历所有Stripe的Index信息,根据Index中保存的RowGroup统计信息,挑选每个Stripe中需要读取的RowGroup,过滤效率低。
3、缺乏谓词优先级管理
ORC提供谓词下推功能,但是谓词没有优先级,导致无法根据谓词过滤效果指定谓词优先级、优先使用过滤效果较好的谓词进行运算,过滤效率较低。
4、读取数据时返回完整的RowGroup数据,需要客户端再次过滤
ORC返回数据的最小单位是RowGroup,即便满足条件的数据只有几条,也会给客户端返回一个RowGroup的数据(默认10000条),产生不必要的传输消耗,且客户端需要再次进行数据过滤,读取效率低。
5、按Stripe启动查询分析任务,无法较好的支持不同业务需求
SparkTask默认按照Stripe为单位启动任务,但只能按照这一种粒度启动任务,无法较好的支撑不同业务需求的任务输入大小和任务并发度。
发明内容
针对现有技术存在的问题,本发明提供了一种基于块数据的ORC优化数据存储格式及数据读写方法,本发明基于块数据建模、以ORC为存储格式实现块数据方案,以降低存储空间、提高数据读取效率。
为解决上述技术问题,本发明采用了以下技术方案:
一种基于块数据的ORC优化数据存储格式,采用自描述列式存储格式,按依次顺序具有数据结构:
文件头File Header,用于记录文件格式类型;
块数据Blocklet,将ORC文件中具有相同聚集键CK特征的多个数据段Stripe聚集连续存储形成数据块;
元数据Meta Data,用于保存描述文件中所有Blocklet的列统计信息;
文件尾File Footer,用于保存描述文件中Blocklet位置信息、Blocklet的长度,以及该Blocklet包含的Stripe信息,用于实现Blocklet的跳转、以及查询或分析任务的文件切分点;
附言Postscript,用于记录文件的压缩算法、压缩块大小、Flie Footer长度、MetaData长度。
作为优选,所述聚集键CK采用具有真实物理含义或数据关联关系的标识类数据。
作为优选,所述聚集键CK采用手机号或设备号。
作为优选,所述块数据Blocklet由全部具有相同聚集键CK的数据段Stripe聚集连续存储形成,在每个块数据Blocklet的尾部还包括CK路由。
作为优选,所述CK路由指明每个聚集键CK所在的数据段Stripe,以及在数据段Stripe中的首次出现行数和末次出现行数。
作为优选,所述CK路由采用跳表或B+Tree树的数据结构。
作为优选,所述CK路由的数据结构表中包含Region信息、Region存储的设备编号,Region包含的文件路径,以及CK统计信息;其中:所述Region为按照CK的取值范围划分形成的区间,每个区间Region信息包括Region编号、startCK、endCK。
另外,本发明还提供了一种基于上述ORC优化数据存储格式的路由管理方法,查询访问路由模块时,根据待查询的CK值计算其所属的Region以及该Region存储的设备编号,然后访问该设备,根据CK值和Region信息,过滤出符合条件的文件列表。
另外,本发明还提供了一种基于上述ORC优化数据存储格式的数据写入方法,包括以下步骤:首先,对待写入数据按照CK进行排序后按Region分组;然后,遍历获取每行数据,并定位当前数据所属的Region,然后按行写入并更新CK路由,文件达到阈值时关闭旧文件,并打开新文件继续写入。
另外,本发明还提供了一种基于上述ORC优化数据存储格式的数据读取方法,包括以下步骤:首先,解析查询条件,根据谓词优先级管理模块确定CK谓词优先级;然后,对于高优先级的CK谓词,根据索引粒度由粗到细依次访问路由管理模块/文件尾部统计/Blocklet内部CK路由进行数据定位,最后进行数据读取;对于普通优先级的谓词,根据检索条件依次过滤Blocklet/Stripe/RowGroup进行数据定位,最后进行数据读取。
有益效果:相对于现有技术,本发明具有以下优点:
(1)优化数据组织、降低存储占用:数据按CK排序,并聚集成块,在物理上连续存放,可以最大化数据压缩效果,极大降低存储占用。
(2)提供多级过滤机制,加速数据过滤:通过路由模块提供文件级数据过滤;通过Blocklet统计信息、Stripe统计信息、和CK级细粒度索引,加快文件内部数据过滤和定位。通过优先使用CK谓词,可以加快数据过滤速度。
(3)减少不必要的数据出库和传输:通过排序特性的短路读取,不用返回完整的RowGroup数据给客户端,减少无用数据传输。
(4)按Blocklet起任务,减少任务个数,提升系统查询并发度:FRC按Blocklet起查询任务,一个任务等效于ORC的多个任务,以减少任务个数,提升系统并发度。
附图说明
图1为现有技术中ORC文件的整体数据结构示意图;
图2为现有技术中ORC文件的数据段Stripe的结构示意图;
图3为现有技术中ORC文件的文件尾结构示意图;
图4为本发明所述基于ORC优化数据存储格式的文件结构式示意图;
图5为本发明所述基于ORC优化数据存储格式的数据写入流程;
图6为本发明所述基于ORC优化数据存储格式的数据读取流程。
具体实施方式
下面结合附图并以具体实施例,进一步阐明本发明。应理解这些实施例仅用于说明本发明而不用于限制本发明的范围,在阅读了本发明之后,本领域技术人员对本发明的各种等价形式的修改均落于本申请所附权利要求所限定的范围。
如图1~3所示为现有技术中ORC文件的整体结构示意图,文件各部分的含义和功能如下:
Ø File Header
File Header用于存储文件类型,如“ORC”或本发明优化后文件“FRC”,表示是ORC文件或FRC文件。
Ø Stripe
ORC文件中的数据被切分为多个段,每个段称为一个Stripe, Stripe中的数据按列连续存储。
1)Stripe Index
按列连续存储压缩后的每个列RowGroup的统计信息和RowGroup数据位置信息。
2)Raw Data
按列连续存储编码压缩后的原始数据,每列的数据形成一个完整的流,底层用字节数组保存;每个列的RowGroup数据是流中的一个片段。
3)Stripe Footer
记录各个列的完整流数据的位置和长度。
Ø RowGroup
表示一定个数的数据,是ORC读取时的返回基本单元,默认10000。 每个列的数据都按RowGroup建立统计、索引。
Ø Meta Data
Meta Data中保存ORC文件中所有Stripe的所有列的统计信息,列的统计信息通常包括该列min、max、sum、count。
Ø File Footer
记录了数据部分的长度、所有列schema信息、各个Stripe的位置信息、文件级别统计信息。
Ø Postscript
记录了ORC文件的压缩算法、压缩块大小、File Footer长度、Meta Data长度等。ORC支持LZ4、Snappy、ZSTD、ZLIB、LZO等常见压缩算法。 除了Postscript以外的部分都会被压缩。
本发明提供的一种基于块数据的ORC优化数据存储格式及数据读写方法的目的在于基于块数据建模,在ORC基础上进行优化作为存储格式实现块数据方案。ORC结构基础上优化主要包括:(1)在ORC结构中引入Blocklet以减少任务个数,查询分析任务以Blocklet为任务输入数据,在不影响文件读写性能的情况下,减少任务数,从而提升系统并发度;(2)提供多级过滤机制:提供Blocklet级索引和Blocklet内部的CK级细粒度索引。通过File级别索引、Blocklet级别索引、CKRouter多级索引,提高过滤效果。其中CK级索引的实现上可以采用多种数据结构,如B+Tree或跳表等其他高效数据结构;(3)提供多优先级的谓词过滤机制:支持谓词优先级,即支持设置谓词优先级、同时按照谓词优先级进行过滤操作,以提高过滤效果。在现有ORC文件基础上作出以下优化,并对相关概念和术语解释如下:
一、术语解释
Ø 块数据
块数据建模方式指:按照数据的真实物理含义、数据的关联关系,将数据聚集、连续存储,形成数据块。如按照手机号,将同一个手机号的数据连续存储,以实现更好的存储压缩效果、高效的数据读取效率。
Ø 聚集键(ClusterKey, 简称CK)
对数据进行聚集的字段,就是聚集键。通常我们选择标识类数据,如手机号,设备号等,随着时间的推移,这些标识类数据会持续积累数据。
Ø FRC
本专利中基于ORC优化改造后的文件格式,称为FRC
Ø Blocklet
同一个FRC文件中多个连续的Stripe构成一个Blocklet。即在原生ORC只有Stripe的基础上,引入一层逻辑概念,作为查询分析任务的读取单元。可以减少查询分析任务个数,提升系统整体查询并发度。
Ø Region
按照CK的取值形成的区间,每个区间是一个Region。每个Region包含编号、startCK、endCK。其中startCK和endCK值可以是CK列的原始值,也可采用Hash后的值。以原始值为例,如CK是手机号,则我们可以划分如下Region:
region_1:[000***, 137***)
region _2:[137***, 157***)
region _3:[157***, 187***)
region _4:[187***, 999***)
二、文件结构
如图4所示,本发明在ORC基础上新增和修改了优化项,优化后的文件命名为FRC文件,并记录在File Header。
一个Region内包含多个FRC文件,同一个FRC文件中的多个连续的Stripe组成一个Blocklet,每个Blocklet中保存CK级路由,即CK Router,指明每个CK所在的Stripe,以及在Stripe中的首次出现行数和最后一次出现行数
CK级路由在实现上可用跳表、B+Tree树等高效数据结构。以B+Tree为例,中间节点存储部分CK值用于索引,叶子节点存储本Blocklet中所有CK值和其对应的位置信息,如图4中,“12”叶子节点,含义是CK=12的值,存在于Stripe1中的第2行到第12行。
在文件的MetaData部分,保存该Blocklet的列统计信息,用来粗粒度过滤Blocklet。
在文件File Footer中保存每个Blocklet的位置、长度以及该Blocklet包含哪些Stripe,可用于Blocklet跳转,Blocklet的位置和长度可以作为查询或分析任务的文件切分点
三、路由管理
路由管理模块用于文件裁剪,在真正读取FRC文件之前,先访问路由管理模块,快速过滤掉无用的FRC文件,减少IO浪费。 路由管理在实现上可采用分布式模式:每个服务节点管理一部分Region和这部分Region的路由信息。
路由管理的核心数据结构见下表1和2。表1记录了每个Region的基本信息和该Region在哪个机器上。表2记录了每个Region包含的文件,以及每个文件的CK统计信息。
表1 全局路由表
region_id start_CK end_CK RegionServer
001 00000000000 15700000000 Slave1
002 15700000000 18700000000 Slave2
表2 Slave1上的部分路由信息表
region_id file_path ck_min ck_max
001 /hdfs/data/test1.frc 13000000100 13000000199
001 /hdfs/data/test2.frc 13000000200 13000000299
查询过程中访问路由模块,根据待查询的CK值计算其所属的Region以及该Region在哪个机器上;然后访问该机器,根据CK值和Region信息,过滤出符合条件的文件列表
四、数据写入流程
如图5所示,本发明FRC文件写入时先对该批数据按照CK进行排序并按Region分组,然后遍历获取每行数据,并定位当前数据所属的Region,然后按行写入并更新CKRouter,文件达到阈值则关闭旧FRC文件,之后从文件中提取路由信息并上报。
五、数据读取流程
如图6所示,本发明FRC文件数据读取时,首先解析查询条件,再通过谓词优先级管理模块,如果是高优先级谓词(CK谓词)则根据索引粒度由粗到细依次访问路由管理模块/文件尾部统计/Block内部的CK Router,进行数据定位,最后进行数据读取;如果是普通谓词则走原生查询流程。
相比于现有的ORC文件结构,本发明方案的主要优化如下:
1、数据聚集和排序
数据写入FRC文件时,按照CK键排序,相同CK的数据连续存放,这样可以实现更高的存储压缩效果、高效的数据读取。块数据建模方式指:按照数据的真实物理含义、数据的关联关系,按照数据的标识字段(如手机号、设备号)将数据聚集,在物理上连续存储。基于块数据的建模方式,我们尽可能的去反映数据的真实关系,以实现更高的数据压缩效果、更好的数据读取速度。
2、提高数据过滤效率
提供多级过滤机制,加快数据过滤,实现了:(1)路由管理实现了文件级别的过滤和裁剪;(2)FRC文件尾部的Blocklet和Stripe的统计信息,实现了Stripe的快速过滤;(3)Block内部的CK Router,实现了CK具体位置的定位。带CK条件查询时,可以精确读取指定Stripe的指定范围的数据,减少IO交互和无用数据出库。
3、减少无用计算和数据传输
数据按照CK排序,读取RowGroup数据时当发现CK不满足条件时,可以中断读取过程,避免完整RowGroup数据的读取和比较。将查询条件下推到FRC端,只返回符合条件的数据,减少数据传输。
4、提供多级任务粒度、提升系统并发度
基于原生ORC的Stripe引入Blocklet,支持基于Blocklet的任务划分和启动,使得业务可以有更多的任务粒度的选择、按照Blocklet可以减少任务个数、提升系统整体并发度。
本发明基于ORC提供了新的存储格式,核心在于通过CK使得数据在文件中“聚集成块,有序摆放”:即相同CK的数据在物理上连续存储,并在文件内按CK键排序。
最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换,但这些修改或者替换的技术本质仍在本实施例的保护范围内。

Claims (10)

1.一种基于块数据的ORC优化数据存储格式,采用自描述列式存储格式,按依次顺序具有数据结构:
文件头File Header,用于记录文件格式类型;
块数据Blocklet,将ORC文件中具有相同聚集键CK特征的多个数据段Stripe聚集连续存储形成数据块;
元数据Meta Data,用于保存描述文件中所有Blocklet的列统计信息;
文件尾File Footer,用于保存描述文件中Blocklet位置信息、Blocklet的长度,以及该Blocklet包含的Stripe信息;
附言Postscript,用于记录文件的压缩算法、压缩块大小、Flie Footer长度、MetaData长度。
2.根据权利要求1所述基于块数据的ORC优化数据存储格式,其特征在于:所述聚集键CK采用具有真实物理含义或数据关联关系的标识类数据。
3.根据权利要求2所述基于块数据的ORC优化数据存储格式,其特征在于:所述聚集键CK采用手机号或设备号。
4.根据权利要求1所述基于块数据的ORC优化数据存储格式,其特征在于:所述块数据Blocklet由全部具有相同聚集键CK的数据段Stripe聚集连续存储形成,在每个块数据Blocklet的尾部还包括CK路由。
5.根据权利要求4所述基于块数据的ORC优化数据存储格式,其特征在于:所述CK路由指明每个聚集键CK所在的数据段Stripe,以及在数据段Stripe中的首次出现行数和末次出现行数。
6.根据权利要求4所述基于块数据的ORC优化数据存储格式,其特征在于:所述CK路由采用跳表或B+Tree树的数据结构。
7.根据权利要求4所述基于块数据的ORC优化数据存储格式,其特征在于:所述CK路由的数据结构表中包含Region信息、Region存储的设备编号,Region包含的文件路径,以及CK统计信息;其中:所述Region为按照CK的取值范围划分形成的区间,每个区间Region信息包括Region编号、startCK、endCK。
8.一种基于权利要求7所述ORC优化数据存储格式的路由管理方法,其特征在于:查询访问路由模块时,根据待查询的CK值计算其所属的Region以及该Region存储的设备编号,然后访问该设备,根据CK值和Region信息,过滤出符合条件的文件列表。
9.一种基于权利要求1~7任一所述ORC优化数据存储格式的数据写入方法,其特征在于包括以下步骤:首先,对待写入数据按照CK进行排序后按Region分组;然后,遍历获取每行数据,并定位当前数据所属的Region,然后按行写入并更新CK路由,文件达到阈值时关闭旧文件,并打开新文件继续写入。
10.一种基于权利要求1~7任一所述ORC优化数据存储格式的数据读取方法,其特征在于包括以下步骤:首先,解析查询条件,根据谓词优先级管理模块确定CK谓词优先级;然后,对于高优先级的CK谓词,根据索引粒度由粗到细依次访问路由管理模块/文件尾部统计/Blocklet内部CK路由进行数据定位,最后进行数据读取;对于普通优先级的谓词,根据检索条件依次过滤Blocklet/Stripe/RowGroup进行数据定位,最后进行数据读取。
CN202110385690.7A 2021-04-10 2021-04-10 基于块数据的orc优化数据存储格式及数据读写方法 Pending CN113051225A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202110385690.7A CN113051225A (zh) 2021-04-10 2021-04-10 基于块数据的orc优化数据存储格式及数据读写方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202110385690.7A CN113051225A (zh) 2021-04-10 2021-04-10 基于块数据的orc优化数据存储格式及数据读写方法

Publications (1)

Publication Number Publication Date
CN113051225A true CN113051225A (zh) 2021-06-29

Family

ID=76519006

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202110385690.7A Pending CN113051225A (zh) 2021-04-10 2021-04-10 基于块数据的orc优化数据存储格式及数据读写方法

Country Status (1)

Country Link
CN (1) CN113051225A (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN117725096A (zh) * 2024-02-07 2024-03-19 北京四维纵横数据技术有限公司 关系型数据库的数据存储和查询方法、装置、设备及介质

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN117725096A (zh) * 2024-02-07 2024-03-19 北京四维纵横数据技术有限公司 关系型数据库的数据存储和查询方法、装置、设备及介质
CN117725096B (zh) * 2024-02-07 2024-05-03 北京四维纵横数据技术有限公司 关系型数据库的数据存储和查询方法、装置、设备及介质

Similar Documents

Publication Publication Date Title
Dai et al. From {WiscKey} to Bourbon: A Learned Index for {Log-Structured} Merge Trees
US11238098B2 (en) Heterogenous key-value sets in tree database
CN105912687B (zh) 海量分布式数据库存储单元
WO2020024799A1 (zh) 一种时序数据的聚合优化处理方法
CN103473239B (zh) 一种非关系型数据库数据更新方法和装置
CN104679778B (zh) 一种搜索结果的生成方法及装置
CN100458779C (zh) 扩展索引的方法
JP6025149B2 (ja) データを管理するシステムおよび方法
EP2724269B1 (en) System, method and data structure for fast loading, storing and access to huge data sets in real time
CN103020204B (zh) 一种对分布式顺序表进行多维区间查询的方法及其系统
CN103902544B (zh) 一种数据处理方法及系统
US20120323867A1 (en) Systems and methods for querying column oriented databases
EP3238106A1 (en) Compaction policy
CN108089816B (zh) 一种基于负载均衡的查询式重复数据删除方法及装置
CN110299187A (zh) 一种基于Hadoop的并行化基因数据压缩方法
CN104424219B (zh) 一种数据文件的管理方法及装置
US20150186453A1 (en) Tiered index management
CN108021702A (zh) 基于LSM-tree的分级存储方法、装置、OLAP数据库系统及介质
US8719235B2 (en) Controlling tape layout for de-duplication
CN113051225A (zh) 基于块数据的orc优化数据存储格式及数据读写方法
Larson Grouping and duplicate elimination: Benefits of early aggregation
CN113268459A (zh) 基于fastq基因大数据的批量分布式压缩方法
CN106909623B (zh) 一种支持高效海量数据分析和检索的数据装置及数据存储方法
CN117370414A (zh) 时序数据库的应用方法和装置
JP6006740B2 (ja) インデックス管理装置

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