CN111190895A - 列式存储数据的组织方法、装置及存储介质 - Google Patents
列式存储数据的组织方法、装置及存储介质 Download PDFInfo
- Publication number
- CN111190895A CN111190895A CN201811362021.2A CN201811362021A CN111190895A CN 111190895 A CN111190895 A CN 111190895A CN 201811362021 A CN201811362021 A CN 201811362021A CN 111190895 A CN111190895 A CN 111190895A
- Authority
- CN
- China
- Prior art keywords
- organization
- file
- data
- files
- spliced
- 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
技术领域
本发明涉及信息技术领域,尤其涉及一种列式存储数据的组织方法、装置及计算机可读存储介质。
背景技术
关系型数据是指以关系数学模型来表示的数据,其中,关系数学模型中以二维表的形式来描述数据。关系型数据的数据结构中,通常一行数据由多个属性组成,每个属性是关系表结构中的一列数据。关系型数据库是存储在计算机上的、可共享的、有组织的关系型数据的集合。不同的写文件顺序对应了关系型数据库的不同的存储方式。传统关系型数据库通常采用行式存储。行式存储是将各行放入连续的物理位置,即先存一行数据,再存下一行数据。列式存储是相对于传统关系型数据库的行式存储来说的。列式存储通常将不同数据的同一个属性值存在一起,因为每一个属性在表中是一列数据,所以很直观地将这种存储模型称为列式存储。列存储法的方式主要适合于批量数据处理和即时查询。
对于列式存储文件格式,在数据处理过程中,会产生大量的小文件,进而会导致数据分析查询时间增长。parquet是一种列式存储文件格式,以parquet文件为例,在数据ETL(Extract-Transform-Load,中文名称为数据抽取、交互转换和加载)过程中,为了加快数据产出,会使用多个线程并行产出parquet文件。因此并发越高,产出的文件数量也越多,单个文件大小也越小。如何组织种列式存储数据,以提高数据分析查询的效率,是目前亟待解决的问题。
发明内容
本发明实施例提供一种列式存储数据的组织方法、装置及计算机可读存储介质,以至少解决现有技术中的一个或多个技术问题。
第一方面,本发明实施例提供了一种列式存储数据的组织方法,包括:创建列式存储格式的第一组织文件,所述第一组织文件中包括一个行组;获取多个列式存储格式的待拼接文件的数据;将所述待拼接文件的数据,采用重编码组织方式在所述第一组织文件的所述一个行组中进行拼接。
在一种实施方式中,获取多个列式存储格式的待拼接文件的数据之前,还包括:创建列式存储格式的第二组织文件,所述第二组织文件中包括多个行组。
在一种实施方式中,所述方法还包括:将所述待拼接文件的数据,采用二进制流组织方式在所述第二组织文件中进行拼接;在所述第二组织文件拼接完成后,利用所述第二组织文件作为查询文件;在所述第一组织文件拼接完成后,利用所述第一组织文件替换所述第二组织文件作为查询文件。
在一种实施方式中,获取多个列式存储格式的待拼接文件的数据,包括:将所述待拼接文件的数据读入内存;将所述待拼接文件的数据,采用重编码组织方式在所述第一组织文件的所述一个行组中进行拼接,包括:从内存中调取所述待拼接文件的数据,并将所述待拼接文件的数据在所述第一组织文件的所述一个行组中进行拼接;和/或,将所述待拼接文件的数据,采用二进制流组织方式在所述第二组织文件中进行拼接,包括:从内存中调取所述待拼接文件的数据,并将所述待拼接文件的数据在所述第二组织文件中进行拼接。
在一种实施方式中,将多个所述待拼接文件的数据,采用二进制流组织方式在所述第二组织文件中进行拼接,包括:读取所述待拼接文件的行组,并将所述待拼接文件的行组追加到所述第二组织文件的行组中;更新所述第二组织文件中的底部数据。
在一种实施方式中,更新所述第二组织文件中的底部数据,包括:读取所述待拼接文件的底部数据中的元数据,将所述元数据追加到所述第二组织文件的底部数据的元数据中;更新追加的元数据中的偏移量信息;更新所述第二组织文件的底部数据的长度信息。
在一种实施方式中,所述方法还包括:在拼接后的组织文件大于预先设置的文件大小阈值的情况下,重新创建一个列式存储格式的组织文件,用于对所述待拼接文件进行拼接,其中,所述组织文件包括所述第一组织文件和/或所述第二组织文件。
第二方面,本发明实施例提供了一种列式存储数据的组织装置,包括:第一创建单元,用于创建列式存储格式的第一组织文件,所述第一组织文件中包括一个行组;获取单元,用于获取多个列式存储格式的待拼接文件的数据;第一拼接单元,用于将所述待拼接文件的数据,采用重编码组织方式在所述第一组织文件的所述一个行组中进行拼接。
在一种实施方式中,所述装置还包括:第二创建单元,用于创建列式存储格式的第二组织文件,所述第二组织文件中包括多个行组。
在一种实施方式中,所述装置还包括:第二拼接单元,用于将多个所述待拼接文件的数据,采用二进制流组织方式在所述第二组织文件中进行拼接;第一数据组织管理单元,用于:在所述第二组织文件和所述第一组织文件分别对多个所述待拼接文件进行拼接;在所述第二组织文件拼接完成后,利用所述第二组织文件作为查询文件;在所述第一组织文件拼接完成后,利用所述第一组织文件替换所述第二组织文件作为查询文件。
在一种实施方式中,所述获取单元还用于:将所述待拼接文件的数据读入内存;所述第一拼接单元还用于:从内存中调取所述待拼接文件的数据,并将所述待拼接文件的数据在所述第一组织文件的所述一个行组中进行拼接;和/或,所述第二拼接单元还用于:从内存中调取所述待拼接文件的数据,并将所述待拼接文件的数据在所述第二组织文件中进行拼接。
在一种实施方式中,所述第二拼接单元包括:行组追加子单元,用于读取所述待拼接文件的行组,并将所述待拼接文件的行组追加到所述第二组织文件的行组中;底部数据更新子单元,用于更新所述第二组织文件中的底部数据。
在一种实施方式中,所述底部数据更新子单元还用于:读取所述待拼接文件的底部数据中的元数据,将所述元数据追加到所述第二组织文件的底部数据的元数据中;更新追加的元数据中的偏移量信息;更新所述第二组织文件的底部数据的长度信息。
在一种实施方式中,所述装置还包括第二数据组织管理单元,用于:在拼接后的组织文件大于预先设置的文件大小阈值的情况下,重新创建一个列式存储格式的组织文件,用于对所述待拼接文件进行拼接,其中,所述组织文件包括所述第一组织文件和/或所述第二组织文件。
在一个可能的设计中,列式存储数据的组织装置的结构中包括处理器和存储器,所述存储器用于存储支持列式存储数据的组织装置执行上述第一方面中列式存储数据的组织方法的程序,所述处理器被配置为用于执行所述存储器中存储的程序。所述列式存储数据的组织装置还可以包括通信接口,列式存储数据的组织装置与其他设备或通信网络通信。
第三方面,本发明实施例提供了一种列式存储数据的组织装置,包括:一个或多个处理器;存储装置,用于存储一个或多个程序;当所述一个或多个程序被所述一个或多个处理器执行时,使得所述一个或多个处理器实现如上述第一方面中任一所述的方法。
第四方面,本发明实施例提供了一种计算机可读存储介质,其存储有计算机程序,该程序被处理器执行时实现上述第一方面中任一所述的方法。
上述技术方案具有如下优点或有益效果:通过拼接列式存储格式的小文件,使得在查询时只需要读单个文件,并且只需要读取一个行组,寻道时间只有一次,从而使查询速度更快,显著减少了因处理大量小文件所导致的数据分析查询时间。
上述概述仅仅是为了说明书的目的,并不意图以任何方式进行限制。除上述描述的示意性的方面、实施方式和特征之外,通过参考附图和以下的详细描述,本发明进一步的方面、实施方式和特征将会是容易明白的。
附图说明
在附图中,除非另外规定,否则贯穿多个附图相同的附图标记表示相同或相似的部件或元素。这些附图不一定是按照比例绘制的。应该理解,这些附图仅描绘了根据本发明公开的一些实施方式,而不应将其视为是对本发明范围的限制。
图1为本发明实施例提供的列式存储数据的组织方法的流程图。
图2为本发明实施例提供的列式存储数据的组织方法的二进制流组织方式的流程图。
图3为本发明实施例提供的列式存储数据的组织方法的二进制流组织方式的流程图。
图4为本发明实施例提供的列式存储数据的组织方法的parquet文件结构示意图。
图5为本发明实施例提供的列式存储数据的组织方法的更新底部数据的流程图。
图6为本发明实施例提供的列式存储数据的组织方法的二进制流组织方式的流程图。
图7为本发明实施例提供的列式存储数据的组织装置的结构框图。
图8为本发明实施例提供的列式存储数据的组织装置的结构框图。
图9为本发明实施例提供的列式存储数据的组织装置的第一数据组织管理单元的结构框图。
图10为本发明实施例提供的列式存储数据的组织装置的第二拼接单元的结构框图。
图11为本发明实施例提供的列式存储数据的组织装置的第二数据组织管理单元的结构框图。
图12为本发明实施例提供的列式存储数据的组织装置的结构框图。
具体实施方式
在下文中,仅简单地描述了某些示例性实施例。正如本领域技术人员可认识到的那样,在不脱离本发明的精神或范围的情况下,可通过各种不同方式修改所描述的实施例。因此,附图和描述被认为本质上是示例性的而非限制性的。
图1为本发明实施例提供的列式存储数据的组织方法的流程图。如图1所示,本发明实施例的列式存储数据的组织方法包括:步骤S110,创建列式存储格式的第一组织文件,所述第一组织文件中包括一个行组;步骤S120,获取多个列式存储格式的待拼接文件的数据;步骤S130,将所述待拼接文件的数据,采用重编码组织方式在所述第一组织文件的所述一个行组中进行拼接。
关系型数据库以包括行和列的二维表的形式描述数据,例如以下表1为员工信息表。
表1员工信息表
员工代码 | 姓名 | 工资 |
1 | 张三 | 40000 |
2 | 李四 | 50000 |
3 | 王五 | 44000 |
这个简单的数据表包括员工代码、姓名及工资。数据库在电脑的内存和硬盘中是以一维字符串的方式存储。以表1为例,在存储表1的数据时,需要将这个二维表存储在一系列一维的“字节”中,由操作系统写到内存或硬盘中。数据存储方式包括行式存储和列式存储。
行式存储将一行中的数据值串在一起存储起来,也就是将一行中的数据放入连续的物理位置,然后再存储下一行的数据,以此类推。按行式存储的方式,表1中的数据在物理存储单元中对应的存储顺序如下:
“1,张三,40000;2,李四,50000;3,王五,44000。”
列式存储将一列中的数据值串在一起存储起来,也就是将一列中的数据放入连续的物理位置,然后再存储下一列的数据,以此类推。按列式存储的方式,表1中的数据在物理存储单元中对应的存储顺序如下:
“1,2,3;张三,李四,王五;40000,50000,44000。”
常用的列式存储文件格式包括RCFile(Record Columnar File,列式记录文件)、ORC(Optimized Row Columnar,优化的行列格式)、parquet等。以parquet文件为例,parquet文件包括一个或多个行组(RowGroup)。在parquet文件中,按照行将数据物理上划分为多个单元,这些行划分的单元称为行组。其中,每一个行组包含一定的行数。例如,在HDFS(Hadoop Distributed File System,Hadoop分布式文件系统)中,一个文件至少存储一个行组。在parquet文件的组织结构中,首先根据行组分割整个表,再在每一个行组内按列存储。
在一个示例中,表2是学生信息表。将存储表2的parquet文件划分为2个行组,每一个行组中包含3行数据。
表2学生信息表
学号 | 姓名 | 成绩 |
1 | 李小 | 90 |
2 | 朱丽 | 95 |
3 | 赵玉 | 99 |
4 | 李国 | 66 |
5 | 吕刚 | 86 |
6 | 刘贺 | 88 |
首先根据行组分割整个表,则第一个行组中包括第1-3行数据,第二个行组中包括第4-6行数据。再在每一个行组内进行按列存储,则表2中的数据在物理存储单元中对应的存储顺序如下:
“1,2,3;李小,朱丽,赵玉;90,95,99;4,5,6;李国,吕刚,刘贺;66,86,88。”
仍以parquet文件为例,本发明实施例中,将多个小文件的数据进行拼接,以解决parquet小文件过多导致的数据分析查询时间增加的问题。在步骤S110中,创建一个parquet空文件,也就是第一组织文件,用于拼接待合并的parquet小文件。在步骤S120中,读取待拼接的parquet小文件的数据。在步骤S130中,将读取的待拼接的parquet小文件的数据,采用重编码组织方式在第一组织文件的中进行拼接。具体地,将读取的待拼接文件的数据写入第一组织文件中,以在第一组织文件中将待拼接文件进行拼接,并在拼接后的第一组织文件中只形成一个行组。
例如,在数据处理的过程中产生了一个小文件1,小文件1中存储了表2所示的数据,则将小文件1中的数据写入第一组织文件中。采用重编码组织方式,在第一组织文件中只形成一个行组。由于存储表2的小文件1中有两个行组,而将其写入第一组织文件之后只有一个行组,因此写入时需要将这两个行组合并为一个行组,则在小文件1写入后第一组织文件的数据在物理存储单元中对应的存储顺序如下:
“1,2,3,4,5,6;李小,朱丽,赵玉,李国,吕刚,刘贺;90,95,99,66,86,88。”
在后续的数据处理的过程中又产生了一个小文件2,小文件2中存储了表1所示的数据,则将小文件2中的数据也写入第一组织文件中。采用重编码组织方式,在第一组织文件中将小文件2与小文件1拼接合并,并且在第一组织文件中只形成一个行组。存储表1的小文件2中有一个行组,写入时需要将第一组织文件中已有的行组与小文件2中的行组合并为一个行组,则在小文件2写入后第一组织文件的数据在物理存储单元中对应的存储顺序如下:
“1,2,3,4,5,6,1,2,3;李小,朱丽,赵玉,李国,吕刚,刘贺,张三,李四,王五;90,95,99,66,86,88,40000,50000,44000。”
在一种实施方式中,获取多个列式存储格式的待拼接文件的数据,包括:将所述待拼接文件的数据读入内存;将所述待拼接文件的数据,采用重编码组织方式在所述第一组织文件的所述一个行组中进行拼接,包括:从内存中调取所述待拼接文件的数据,并将所述待拼接文件的数据在所述第一组织文件的所述一个行组中进行拼接。
对于每一个待拼接小文件,将其从物理磁盘中读入内存,再重新写入第一组织文件中。由于第一组织文件中只包含一个行组,因此在查询时读单个文件只需要读取这一个行组,寻道时间只有一次,从而使查询速度更快,显著减少了处理列式存储格式的大量小文件所导致的数据分析查询时间。
图2为本发明实施例提供的列式存储数据的组织方法的二进制流组织方式的流程图。如图2所示,在一种实施方式中,在步骤S120,获取多个列式存储格式的待拼接文件的数据之前,还包括:步骤S210,创建列式存储格式的第二组织文件,所述第二组织文件中包括多个行组。
参见图2,在一种实施方式中,所述方法还包括:步骤S230,将多个所述待拼接文件的数据,采用二进制流组织方式在所述第二组织文件中进行拼接。
在一种示例中,二进制流组织方式包括:将每个小文件原有的行组直接作为合并后的大文件的行组,直接拼接到一个大文件中,拼接前后数据所包含的行组个数及每个行组包含的行数不变。具体地,将读取的待拼接文件的数据写入第二组织文件中,也就是将每个待拼接文件的行组拼接到第二组织文件中。这种方式拼接过程中资源消耗少、拼接速度快,拼接后形成多个行组。
例如,在数据处理的过程中产生了一个小文件1,小文件1中存储了表2所示的数据。则将小文件1中的数据写入第二组织文件中,采用二进制流组织方式,将待拼接文件的行组追加到第二组织文件的行组中。由于小文件1包括2个行组,则在小文件1写入后第二组织文件中也包括小文件1的2个行组,小文件1写入后第二组织文件的数据在物理存储单元中对应的存储顺序如下:
“1,2,3;李小,朱丽,赵玉;90,95,99;4,5,6;李国,吕刚,刘贺;66,86,88。”
在后续的数据处理的过程中又产生了一个小文件2,小文件2中存储了表1所示的数据,则将小文件2中的数据也写入第二组织文件中。采用二进制流组织方式,在第二组织文件中将小文件2与小文件1拼接合并,并将待拼接文件的行组追加到第二组织文件的行组中。如果小文件2只包括1个行组,则在小文件2写入后第二组织文件中包括3个行组,其中包括小文件1的2个行组和小文件2的1个行组,小文件2写入后第二组织文件的数据在物理存储单元中对应的存储顺序如下:
“1,2,3;李小,朱丽,赵玉;90,95,99;4,5,6;李国,吕刚,刘贺;66,86,88;1,2,3;张三,李四,王五;40000,50000,44000。”
在一种实施方式中,获取多个列式存储格式的待拼接文件的数据,包括:将所述待拼接文件的数据读入内存;将所述待拼接文件的数据,采用二进制流组织方式在所述第二组织文件中进行拼接,包括:从内存中调取所述待拼接文件的数据,并将所述待拼接文件的数据在所述第二组织文件中进行拼接。
在这种实施方式中,第二组织文件的拼接方法与前述第一组织文件类似,对于每一个待拼接小文件,将其从物理磁盘中读入内存,再重新写入第二组织文件中。但与第一组织文件的拼接方法不同的是,第二组织文件可包括多个行组,将每个小文件原有的行组直接作为合并后的大文件的行组,直接拼接到一个大文件中,拼接前后数据所包含的行组个数及每个行组包含的行数不变。
图3为本发明实施例提供的列式存储数据的组织方法的二进制流组织方式的流程图。如图3所示,在一种实施方式中,图2中的步骤S230,将多个所述待拼接文件的数据,采用二进制流组织方式在所述第二组织文件中进行拼接,具体可包括:步骤S310,读取所述待拼接文件的行组,并将所述待拼接文件的行组追加到所述第二组织文件的行组中;步骤S320,更新所述第二组织文件中的底部数据。
图4为本发明实施例提供的列式存储数据的组织方法的parquet文件结构示意图。如图4所示,一个parquet文件是由一个Header(头部)以及一个或多个Block(块)组成,以一个Footer(底部)结尾。在parquet文件中,每一个Block都具有一组行组。Header中只包含一个4个字节的数字,这里用PAR1表示,用来识别整个parquet文件格式。文件中所有的metadata(元数据)都存在于Footer中,也称为底部数据。Footer中的metadata包含了格式的版本信息,以及所有Block中的metadata信息和所有行组的元数据信息。Footer中最后两个字段为一个以4个字节长度的Footer的metadata,包含同Header中一样的PAR1。
读取一个parquet文件时,需要完全读取Footer的metadata,因为所有Block的边界都存储于Footer的metadata中。再参见图3,采用二进制流组织方式在第二组织文件中进行文件拼接时,除了要将待拼接文件的行组追加到所述第二组织文件的行组中,还要更新第二组织文件中的底部数据,也就是更新Footer中的数据。
再参见图4,每个行组包含一个或多个列块(Column chunk),在一个行组(RowGroup)中每一列保存在一个列块中。每一个列块又划分为多个页(Page)。
在Parquet文件中,有三种类型的页:数据页、字典页和索引页。数据页用于存储当前行组中该列的值。字典页存储该列值的编码字典,每一个列块中最多包含一个字典页。索引页用来存储当前行组下该列的索引。
图5为本发明实施例提供的列式存储数据的组织方法的更新底部数据的流程图。如图5所示,在一种实施方式中,图3中的步骤S320,更新所述第二组织文件中的底部数据,具体可包括:步骤410,读取所述待拼接文件的底部数据中的元数据,将所述元数据追加到所述第二组织文件的底部数据的元数据中;步骤420,更新追加的元数据中的偏移量信息;步骤430,更新所述第二组织文件的底部数据的长度信息。
更新第二组织文件中的底部数据,除了要追加待拼接文件的底部数据中的元数据,还要更新元数据中的偏移量信息,以及修改底部数据的长度信息。其中,元数据中的偏移量信息可以包括数据页偏移量(data_page_offset)、字典页偏移量(index_page_offset)和索引页偏移量(dictionary_page_offset)等。
在一种实施方式中,所述方法还包括:在拼接后的组织文件大于预先设置的文件大小阈值的情况下,重新创建一个列式存储格式的组织文件,用于对所述待拼接文件进行拼接,其中,所述组织文件包括所述第一组织文件和/或所述第二组织文件。
可根据实际情况设置适合系统性能的文件大小阈值。如果文件大小阈值太小,则产生的文件个数仍然太多,仍需要进一步拼接合并。如果文件大小阈值太大,一个文件的数据量太大则会降低查询效率。
图6为本发明实施例提供的列式存储数据的组织方法的二进制流组织方式的流程图。如图6所示,在一个示例中,采用二进制流组织方式拼接文件的步骤如下:
步骤1:创建一个parquet空文件A,用于拼接待合并的小parquet文件。
步骤2:读取一个小文件b的RowGroup,将该RowGroup追加到A文件RowGroup位置;
步骤3:读取小文件b的Footer部分文件元数据FileMetadata,追加到A文件Footer部分的FileMetadata。并更新追加的FileMetadata的OFFSET(偏移量),包括data_page_offset、index_page_offset和dictionary_page_offset,将这些OFFSET的数值增加已追加的RowGroup的大小。
更改A文件的Footer length为现有的A文件的FileMetadata长度。
步骤4:重复步骤2-3,继续下一个小文件的拼接,直至达到最优文件大小,也就是达到预设的文件大小阈值,则文件A的拼接完成。文件拼接完成之后,A文件是一个完整的parquet文件,A文件的Footer记录了拼接后的每个RowGroup的元数据。
在一种实施方式中,所述方法还包括:在所述第二组织文件和所述第一组织文件分别对多个所述待拼接文件进行拼接;在所述第二组织文件拼接完成后,利用所述第二组织文件作为查询文件;在所述第一组织文件拼接完成后,利用所述第一组织文件替换所述第二组织文件作为查询文件。
采用二进制流组织方式在第二组织文件中进行拼接,原理是将每个小文件的行组拼接到一个大文件中,并更改Footer中的元数据索引。拼接过程资源消耗少,拼接速度快,拼接后形成多个行组。
采用重编码组织方式在第一组织文件中进行拼接,对于每一个小文件,将其从物理磁盘中读入内存,再重新写入新的parquet文件中,该新文件只包含一个行组。该方法拼接过程相对二进制流拼接方法来说,资源消耗较大,拼接速度较慢,拼接后只形成一个行组。
以上两种方式都可用来动态组织列式文件,减少parquet小文件个数,从而提高查询效率和计算效率。相比之下,两种方式各有利弊,其性能比较参见下表:
可见,二进制流组织方式拼接速度较快、查询速度较慢;重编码组织方式拼接速度较慢、查询速度较快。在项目实际应用中,由于二进制流组织方式拼接速度较快,为了减少数据产出延迟,可先使用二进制流组织方式,产出所需数据,供数据分析平台查询使用。同时,也会使用重编码组织方式拼接文件,然后用重编码组织方式产出的文件替换二进制流组织方式拼接产出的文件,从而进一步提高查询效率。
以上以parquet文件为例描述了列式存储数据的组织方法。本发明实施例不仅适用于parquet格式文件,对于其他列式存储文件格式也适用,例如RCFile、ORC等。
图7为本发明实施例提供的列式存储数据的组织装置的结构框图。如图7所示,本发明实施例的列式存储数据的组织装置包括:第一创建单元100,用于创建列式存储格式的第一组织文件,所述第一组织文件中包括一个行组;获取单元200,用于获取多个列式存储格式的待拼接文件的数据;第一拼接单元300,用于将所述待拼接文件的数据,采用重编码组织方式在所述第一组织文件的所述一个行组中进行拼接。
图8为本发明实施例提供的列式存储数据的组织装置的结构框图。如图8所示,在一种实施方式中,所述装置还包括:第二创建单元400,用于创建列式存储格式的第二组织文件,所述第二组织文件中包括多个行组。
图9为本发明实施例提供的列式存储数据的组织装置的第一数据组织管理单元的结构框图。参见图8和图9,在一种实施方式中,所述装置还包括:第二拼接单元600,用于将多个所述待拼接文件的数据,采用二进制流组织方式在所述第二组织文件中进行拼接;所述装置还包括第一数据组织管理单元700,用于:在所述第二组织文件和所述第一组织文件分别对多个所述待拼接文件进行拼接;在所述第二组织文件拼接完成后,利用所述第二组织文件作为查询文件;在所述第一组织文件拼接完成后,利用所述第一组织文件替换所述第二组织文件作为查询文件。
在一种实施方式中,所述获取单元200还用于:将所述待拼接文件的数据读入内存;所述第一拼接单元300还用于:从内存中调取所述待拼接文件的数据,并将所述待拼接文件的数据在所述第一组织文件的所述一个行组中进行拼接;和/或,所述第二拼接单元600还用于:从内存中调取所述待拼接文件的数据,并将所述待拼接文件的数据在所述第二组织文件中进行拼接。
图10为本发明实施例提供的列式存储数据的组织装置的第二拼接单元的结构框图。如图10所示,在一种实施方式中,所述第二拼接单元600包括:行组追加子单元610,用于读取所述待拼接文件的行组,并将所述待拼接文件的行组追加到所述第二组织文件的行组中;底部数据更新子单元620,用于更新所述第二组织文件中的底部数据。
在一种实施方式中,所述底部数据更新子单元620还用于:读取所述待拼接文件的底部数据中的元数据,将所述元数据追加到所述第二组织文件的底部数据的元数据中;更新追加的元数据中的偏移量信息;更新所述第二组织文件的底部数据的长度信息。
图11为本发明实施例提供的列式存储数据的组织装置的第二数据组织管理单元的结构框图。如图11所示,在一种实施方式中,所述装置还包括第二数据组织管理单元800,用于:在拼接后的组织文件大于预先设置的文件大小阈值的情况下,重新创建一个列式存储格式的组织文件,用于对所述待拼接文件进行拼接,其中,所述组织文件包括所述第一组织文件和/或所述第二组织文件。
本发明实施例的列式存储数据的组织装置中各单元的功能可以参见上述方法的相关描述,在此不再赘述。
在一个可能的设计中,列式存储数据的组织装置的结构中包括处理器和存储器,所述存储器用于存储支持列式存储数据的组织装置执行上述列式存储数据的组织方法的程序,所述处理器被配置为用于执行所述存储器中存储的程序。所述列式存储数据的组织装置还可以包括通信接口,列式存储数据的组织装置与其他设备或通信网络通信。
图12为本发明实施例提供的列式存储数据的组织装置的结构框图。如图12所示,该装置包括:存储器101和处理器102,存储器101内存储有可在处理器102上运行的计算机程序。所述处理器102执行所述计算机程序时实现上述实施例中的列式存储数据的组织方法。所述存储器101和处理器102的数量可以为一个或多个。
该装置还包括:
通信接口103,用于与外界设备进行通信,进行数据交互传输。
存储器101可能包含高速RAM存储器,也可能还包括非易失性存储器(non-volatile memory),例如至少一个磁盘存储器。
如果存储器101、处理器102和通信接口103独立实现,则存储器101、处理器102和通信接口103可以通过总线相互连接并完成相互间的通信。所述总线可以是工业标准体系结构(ISA,Industry Standard Architecture)总线、外部设备互连(PCI,PeripheralComponent)总线或扩展工业标准体系结构(EISA,Extended Industry StandardComponent)总线等。所述总线可以分为地址总线、数据总线、控制总线等。为便于表示,图12中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。
可选的,在具体实现上,如果存储器101、处理器102及通信接口103集成在一块芯片上,则存储器101、处理器102及通信接口103可以通过内部接口完成相互间的通信。
又一方面,本发明实施例提供了一种计算机可读存储介质,其存储有计算机程序,该程序被处理器执行时实现上述列式存储数据的组织方法中任一所述的方法。
在本说明书的描述中,参考术语“一个实施例”、“一些实施例”、“示例”、“具体示例”、或“一些示例”等的描述意指结合该实施例或示例描述的具体特征、结构、材料或者特点包含于本发明的至少一个实施例或示例中。而且,描述的具体特征、结构、材料或者特点可以在任一个或多个实施例或示例中以合适的方式结合。此外,在不相互矛盾的情况下,本领域的技术人员可以将本说明书中描述的不同实施例或示例以及不同实施例或示例的特征进行结合和组合。
此外,术语“第一”、“第二”仅用于描述目的,而不能理解为指示或暗示相对重要性或者隐含指明所指示的技术特征的数量。由此,限定有“第一”、“第二”的特征可以明示或隐含地包括至少一个该特征。在本发明的描述中,“多个”的含义是两个或两个以上,除非另有明确具体的限定。
流程图中或在此以其他方式描述的任何过程或方法描述可以被理解为,表示包括一个或更多个用于实现特定逻辑功能或过程的步骤的可执行指令的代码的模块、片段或部分,并且本发明的优选实施方式的范围包括另外的实现,其中可以不按所示出或讨论的顺序,包括根据所涉及的功能按基本同时的方式或按相反的顺序,来执行功能,这应被本发明的实施例所属技术领域的技术人员所理解。
在流程图中表示或在此以其他方式描述的逻辑和/或步骤,例如,可以被认为是用于实现逻辑功能的可执行指令的定序列表,可以具体实现在任何计算机可读介质中,以供指令执行系统、装置或设备(如基于计算机的系统、包括处理器的系统或其他可以从指令执行系统、装置或设备取指令并执行指令的系统)使用,或结合这些指令执行系统、装置或设备而使用。就本说明书而言,“计算机可读介质”可以是任何可以包含、存储、通信、传播或传输程序以供指令执行系统、装置或设备或结合这些指令执行系统、装置或设备而使用的装置。计算机可读介质的更具体的示例(非穷尽性列表)包括以下:具有一个或多个布线的电连接部(电子装置),便携式计算机盘盒(磁装置),随机存取存储器(RAM),只读存储器(ROM),可擦除可编辑只读存储器(EPROM或闪速存储器),光纤装置,以及便携式只读存储器(CDROM)。另外,计算机可读介质甚至可以是可在其上打印所述程序的纸或其他合适的介质,因为可以例如通过对纸或其他介质进行光学扫描,接着进行编辑、解译或必要时以其他合适方式进行处理来以电子方式获得所述程序,然后将其存储在计算机存储器中。
应当理解,本发明的各部分可以用硬件、软件、固件或它们的组合来实现。在上述实施方式中,多个步骤或方法可以用存储在存储器中且由合适的指令执行系统执行的软件或固件来实现。例如,如果用硬件来实现,和在另一实施方式中一样,可用本领域公知的下列技术中的任一项或他们的组合来实现:具有用于对数据信号实现逻辑功能的逻辑门电路的离散逻辑电路,具有合适的组合逻辑门电路的专用集成电路,可编程门阵列(PGA),现场可编程门阵列(FPGA)等。
本技术领域的普通技术人员可以理解实现上述实施例方法携带的全部或部分步骤是可以通过程序来指令相关的硬件完成,所述的程序可以存储于一种计算机可读存储介质中,该程序在执行时,包括方法实施例的步骤之一或其组合。
此外,在本发明各个实施例中的各功能单元可以集成在一个处理模块中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个模块中。上述集成的模块既可以采用硬件的形式实现,也可以采用软件功能模块的形式实现。所述集成的模块如果以软件功能模块的形式实现并作为独立的产品销售或使用时,也可以存储在一个计算机可读存储介质中。所述存储介质可以是只读存储器,磁盘或光盘等。
以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到其各种变化或替换,这些都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以所述权利要求的保护范围为准。
Claims (16)
1.一种列式存储数据的组织方法,其特征在于,包括:
创建列式存储格式的第一组织文件,所述第一组织文件中包括一个行组;
获取多个列式存储格式的待拼接文件的数据;
将所述待拼接文件的数据,采用重编码组织方式在所述第一组织文件的所述一个行组中进行拼接。
2.根据权利要求1所述的方法,其特征在于,获取多个列式存储格式的待拼接文件的数据之前,还包括:
创建列式存储格式的第二组织文件,所述第二组织文件中包括多个行组。
3.根据权利要求2所述的方法,其特征在于,所述方法还包括:
将所述待拼接文件的数据,采用二进制流组织方式在所述第二组织文件中进行拼接;
在所述第二组织文件拼接完成后,利用所述第二组织文件作为查询文件;
在所述第一组织文件拼接完成后,利用所述第一组织文件替换所述第二组织文件作为查询文件。
4.根据权利要求3所述的方法,其特征在于,获取多个列式存储格式的待拼接文件的数据,包括:将所述待拼接文件的数据读入内存;
将所述待拼接文件的数据,采用重编码组织方式在所述第一组织文件的所述一个行组中进行拼接,包括:从内存中调取所述待拼接文件的数据,并将所述待拼接文件的数据在所述第一组织文件的所述一个行组中进行拼接;和/或
将所述待拼接文件的数据,采用二进制流组织方式在所述第二组织文件中进行拼接,包括:从内存中调取所述待拼接文件的数据,并将所述待拼接文件的数据在所述第二组织文件中进行拼接。
5.根据权利要求3所述的方法,其特征在于,将多个所述待拼接文件的数据,采用二进制流组织方式在所述第二组织文件中进行拼接,包括:
读取所述待拼接文件的行组,并将所述待拼接文件的行组追加到所述第二组织文件的行组中;
更新所述第二组织文件中的底部数据。
6.根据权利要求5所述的方法,其特征在于,更新所述第二组织文件中的底部数据,包括:
读取所述待拼接文件的底部数据中的元数据,将所述元数据追加到所述第二组织文件的底部数据的元数据中;
更新追加的元数据中的偏移量信息;
更新所述第二组织文件的底部数据的长度信息。
7.根据权利要求3所述的方法,其特征在于,还包括:
在拼接后的组织文件大于预先设置的文件大小阈值的情况下,重新创建一个列式存储格式的组织文件,用于对所述待拼接文件进行拼接,其中,所述组织文件包括所述第一组织文件和/或所述第二组织文件。
8.一种列式存储数据的组织装置,其特征在于,包括:
第一创建单元,用于创建列式存储格式的第一组织文件,所述第一组织文件中包括一个行组;
获取单元,用于获取多个列式存储格式的待拼接文件的数据;
第一拼接单元,用于将所述待拼接文件的数据,采用重编码组织方式在所述第一组织文件的所述一个行组中进行拼接。
9.根据权利要求8所述的装置,其特征在于,还包括:
第二创建单元,用于创建列式存储格式的第二组织文件,所述第二组织文件中包括多个行组。
10.根据权利要求9所述的装置,其特征在于,所述装置还包括:
第二拼接单元,用于将多个所述待拼接文件的数据,采用二进制流组织方式在所述第二组织文件中进行拼接;
第一数据组织管理单元,用于:
在所述第二组织文件和所述第一组织文件分别对多个所述待拼接文件进行拼接;
在所述第二组织文件拼接完成后,利用所述第二组织文件作为查询文件;
在所述第一组织文件拼接完成后,利用所述第一组织文件替换所述第二组织文件作为查询文件。
11.根据权利要求10所述的装置,其特征在于,所述获取单元还用于:将所述待拼接文件的数据读入内存;
所述第一拼接单元还用于:从内存中调取所述待拼接文件的数据,并将所述待拼接文件的数据在所述第一组织文件的所述一个行组中进行拼接;和/或
所述第二拼接单元还用于:从内存中调取所述待拼接文件的数据,并将所述待拼接文件的数据在所述第二组织文件中进行拼接。
12.根据权利要求10所述的装置,其特征在于,所述第二拼接单元包括:
行组追加子单元,用于读取所述待拼接文件的行组,并将所述待拼接文件的行组追加到所述第二组织文件的行组中;
底部数据更新子单元,用于更新所述第二组织文件中的底部数据。
13.根据权利要求12所述的装置,其特征在于,所述底部数据更新子单元还用于:
读取所述待拼接文件的底部数据中的元数据,将所述元数据追加到所述第二组织文件的底部数据的元数据中;
更新追加的元数据中的偏移量信息;
更新所述第二组织文件的底部数据的长度信息。
14.根据权利要求10所述的装置,其特征在于,还包括第二数据组织管理单元,用于:
在拼接后的组织文件大于预先设置的文件大小阈值的情况下,重新创建一个列式存储格式的组织文件,用于对所述待拼接文件进行拼接,其中,所述组织文件包括所述第一组织文件和/或所述第二组织文件。
15.一种列式存储数据的组织装置,其特征在于,包括:
一个或多个处理器;
存储装置,用于存储一个或多个程序;
当所述一个或多个程序被所述一个或多个处理器执行时,使得所述一个或多个处理器实现如权利要求1-7中任一所述的方法。
16.一种计算机可读存储介质,其存储有计算机程序,其特征在于,该程序被处理器执行时实现如权利要求1-7中任一所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811362021.2A CN111190895B (zh) | 2018-11-15 | 2018-11-15 | 列式存储数据的组织方法、装置及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811362021.2A CN111190895B (zh) | 2018-11-15 | 2018-11-15 | 列式存储数据的组织方法、装置及存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111190895A true CN111190895A (zh) | 2020-05-22 |
CN111190895B CN111190895B (zh) | 2023-04-28 |
Family
ID=70710617
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201811362021.2A Active CN111190895B (zh) | 2018-11-15 | 2018-11-15 | 列式存储数据的组织方法、装置及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111190895B (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113312344A (zh) * | 2021-07-28 | 2021-08-27 | 阿里云计算有限公司 | 数据序列化、反序列化方法、设备、系统、介质及产品 |
WO2022037015A1 (zh) * | 2020-08-21 | 2022-02-24 | 苏州浪潮智能科技有限公司 | 一种基于持久性内存的列式存储方法、装置及设备 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20150088813A1 (en) * | 2013-09-21 | 2015-03-26 | Oracle International Corporation | Combined Row and Columnar Storage for In-Memory Databases for OLTP and Analytics Workloads |
CN104866497A (zh) * | 2014-02-24 | 2015-08-26 | 华为技术有限公司 | 分布式文件系统列式存储的元数据更新方法、装置、主机 |
CN105808451A (zh) * | 2014-12-29 | 2016-07-27 | 华为技术有限公司 | 一种数据缓存方法以及相关装置 |
CN107194001A (zh) * | 2017-06-14 | 2017-09-22 | 网宿科技股份有限公司 | 一种列式存储格式文件快速合并方法及其系统 |
CN108572788A (zh) * | 2017-03-13 | 2018-09-25 | 广州市动景计算机科技有限公司 | 数据存取方法、装置及系统 |
-
2018
- 2018-11-15 CN CN201811362021.2A patent/CN111190895B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20150088813A1 (en) * | 2013-09-21 | 2015-03-26 | Oracle International Corporation | Combined Row and Columnar Storage for In-Memory Databases for OLTP and Analytics Workloads |
CN104866497A (zh) * | 2014-02-24 | 2015-08-26 | 华为技术有限公司 | 分布式文件系统列式存储的元数据更新方法、装置、主机 |
CN105808451A (zh) * | 2014-12-29 | 2016-07-27 | 华为技术有限公司 | 一种数据缓存方法以及相关装置 |
CN108572788A (zh) * | 2017-03-13 | 2018-09-25 | 广州市动景计算机科技有限公司 | 数据存取方法、装置及系统 |
CN107194001A (zh) * | 2017-06-14 | 2017-09-22 | 网宿科技股份有限公司 | 一种列式存储格式文件快速合并方法及其系统 |
Non-Patent Citations (2)
Title |
---|
屈志坚;徐振清;周锐霖;朱丹;: "按列存储的配电网监测数据包区间编码正规化压缩处理" * |
马宇超: ""基于分布式系统的海量日志数据库优化技术研究"" * |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2022037015A1 (zh) * | 2020-08-21 | 2022-02-24 | 苏州浪潮智能科技有限公司 | 一种基于持久性内存的列式存储方法、装置及设备 |
CN113312344A (zh) * | 2021-07-28 | 2021-08-27 | 阿里云计算有限公司 | 数据序列化、反序列化方法、设备、系统、介质及产品 |
Also Published As
Publication number | Publication date |
---|---|
CN111190895B (zh) | 2023-04-28 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10114908B2 (en) | Hybrid table implementation by using buffer pool as permanent in-memory storage for memory-resident data | |
CN104866497B (zh) | 分布式文件系统列式存储的元数据更新方法、装置、主机 | |
JP4669067B2 (ja) | 動的フラグメントマッピング | |
US9047330B2 (en) | Index compression in databases | |
WO2020211236A1 (zh) | 基于b+树的读写冲突解决方法、装置及存储介质 | |
CN103390020A (zh) | 在数据库中存储数据的方法和系统 | |
CN105320775A (zh) | 数据的存取方法和装置 | |
US10127254B2 (en) | Method of index recommendation for NoSQL database | |
US20180144061A1 (en) | Edge store designs for graph databases | |
CN103914483B (zh) | 文件存储方法、装置及文件读取方法、装置 | |
US11222067B2 (en) | Multi-index method and apparatus, cloud system and computer-readable storage medium | |
CN108255989B (zh) | 图片存储方法、装置、终端设备及计算机存储介质 | |
CN109582231B (zh) | 数据存储方法、装置、电子设备及存储介质 | |
US9047363B2 (en) | Text indexing for updateable tokenized text | |
CN105117489B (zh) | 一种数据库管理方法、装置及电子设备 | |
CN111190895B (zh) | 列式存储数据的组织方法、装置及存储介质 | |
US10423580B2 (en) | Storage and compression of an aggregation file | |
JP2019087249A5 (zh) | ||
CN104408128B (zh) | 一种基于b+树异步更新索引的读优化方法 | |
CN107256233A (zh) | 一种数据存储方法和装置 | |
CN106503260A (zh) | 一种提高数据库的有效存储空间的方法和装置 | |
CN116048396A (zh) | 基于日志结构化合并树的数据存储装置和存储控制方法 | |
US10198209B2 (en) | Memory storage recycling | |
EP4134802A1 (en) | Method and apparatus for data access of nand flash file, and storage medium | |
CN113722623A (zh) | 数据处理方法、装置、电子设备及存储介质 |
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 |