列式存储数据的处理方法、装置、设备及计算机储存介质与流程

文档序号:13004709阅读:313来源:国知局
本申请涉及计算机
技术领域
:,尤其涉及列式存储数据的处理方法、装置、设备及计算机储存介质。
背景技术
::列式存储格式与传统的行式存储将一行数据连续存放不同,列式存储格式将数据文件中某一列的部分数据值(或所有数据值)序列化在一起连续存储,然后再存储另一列的部分数据值(或所有数据值),数据尾部会写有footer信息,即该数据文件的存储格式描述信息,包括有文件的元数据信息、列的个数、相对位置、数据类型信息或统计信息等。实际应用中经常会涉及对原数据文件增加新数据的需求,相关技术中在获取到新数据时,通常是采用新建一数据文件的方式存储新数据。但新建数据文件会占用一定的资源,影响数据处理效率,并且在面临数据查询需求时,需要在原数据文件和新建数据文件中分别查询,查询效率较低。技术实现要素:为克服相关技术中存在的问题,本申请提供了列式存储数据处理方法、装置、设备及计算机储存介质。根据本申请实施例的第一方面,提供一种列式存储数据的处理方法,所述方法包括:接收针对原始数据文件的新增数据,所述原始数据文件采用列式存储格式进行存储,所述原始数据文件的footer信息采用独立于所述原始数据文件的footer文件进行记录;按照列式存储格式将所述新增数据写入至所述原始数据文件的尾部,并在所述footer文件中增加针对所述新增数据的footer信息,获得更新后的原始数据文件和footer文件。在一个可选的实现方式中,在所述接收针对原始数据文件的新增数据后,所述方法包括:将接收的新增数据加载至高速存储空间中;所述按照列式存储格式将所述新增数据写入至所述原始数据文件的尾部,包括:当所述高速存储空间中加载的新增数据满足预设存储条件时,按照列式存储格式将所述加载的新增数据写入至所述原始数据文件的尾部。在一个可选的实现方式中,所述预设存储条件包括如下一种或多种条件:所述新增数据的数据量达到预设的数据量阈值;或,所述新增数据在高速存储空间中的加载时长达到预设的时长阈值。在一个可选的实现方式中,所述方法还包括:当获取到针对所述原始数据文件的数据查询请求时,根据更新前的footer文件,在所述原始数据文件中读取满足所述请求的第一数据,并在所述高速存储空间中加载的新增数据读取满足所述请求的第二数据;将所述第一数据和第二数据合并后输出。在一个可选的实现方式中,所述方法还包括:生成所述加载的新增数据的副本文件,并将所述加载的新增数据的副本文件存储于与所述原始数据文件的副本文件相同的目录下。根据本申请实施例的第二方面,提供一种列式存储数据的处理装置,包括:数据接收模块,用于:接收针对原始数据文件的新增数据,所述原始数据文件采用列式存储格式进行存储,所述原始数据文件的footer信息采用独立于所述原始数据文件的footer文件进行记录;数据写入模块,用于:按照列式存储格式将所述新增数据写入至所述原始数据文件的尾部,并在所述footer文件中增加针对所述新增数据的footer信息,获得更新后的原始数据文件和footer文件。在一个可选的实现方式中,所述数据接收模块,还用于:在所述接收针对原始数据文件的新增数据后,将接收的新增数据加载至高速存储空间中;所述数据写入模块,具体用于:当所述高速存储空间中加载的新增数据满足预设存储条件时,按照列式存储格式将所述加载的新增数据写入至所述原始数据文件的尾部。在一个可选的实现方式中,所述预设存储条件包括如下一种或多种条件:所述新增数据的数据量达到预设的数据量阈值;或,所述新增数据在高速存储空间中的加载时长达到预设的时长阈值。在一个可选的实现方式中,所述装置还包括读取模块,用于:当获取到针对所述原始数据文件的数据查询请求时,根据更新前的footer文件,在所述原始数据文件中读取满足所述请求的第一数据,并在所述高速存储空间中加载的新增数据读取满足所述请求的第二数据;将所述第一数据和第二数据合并后输出。在一个可选的实现方式中,所述装置还包括副本处理模块,用于:生成所述加载的新增数据的副本文件,并将所述加载的新增数据的副本文件存储于与所述原始数据文件的副本文件相同的目录下根据本申请实施例的第三方面,提供一种计算机设备,包括:处理器;用于存储处理器可执行指令的存储器;其中,所述处理器被配置为:接收针对原始数据文件的新增数据,所述原始数据文件采用列式存储格式进行存储,所述原始数据文件的footer信息采用独立于所述原始数据文件的footer文件进行记录;按照列式存储格式将所述新增数据写入至所述原始数据文件的尾部,并在所述footer文件中增加针对所述新增数据的footer信息,获得更新后的原始数据文件和footer文件。根据本申请实施例的第四方面,提供一种计算机存储介质,所述存储介质中存储有程序指令,所述程序指令包括:接收针对原始数据文件的新增数据,所述原始数据文件采用列式存储格式进行存储,所述原始数据文件的footer信息采用独立于所述原始数据文件的footer文件进行记录;按照列式存储格式将所述新增数据写入至所述原始数据文件的尾部,并在所述footer文件中增加针对所述新增数据的footer信息,获得更新后的原始数据文件和footer文件。本申请的实施例提供的技术方案可以包括以下有益效果:本申请中,不同于相关技术中原始数据文件的footer信息存储在文件尾部,而是采用一独立的footer文件进行记录,因此新增数据可以直接追加至原始数据文件的尾部,而新增数据的footer信息则在footer文件中记录即可。本申请实施例可以针对列式存储数据实现高效的流式追加数据,新增数据可以追加至原始数据文件中,无需采用新建文件进行记录的方式,因此处理效率更高,占用资源更少,数据查询速度更快。应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本申请。附图说明此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本申请的实施例,并与说明书一起用于解释本申请的原理。图1a是相关技术中一种列式存储格式的示意图。图1b是相关技术中另一种列式存储格式的示意图。图2是本申请根据一示例性实施例示出的一种列式存储数据的处理方法的流程图。图3a是本申请根据一示例性实施例示出的一种列式存储数据的处理方法的应用场景图。图3b是本申请根据一示例性实施例示出的一种新增数据加载在内存中的示意图。图4是本申请列式存储数据的处理装置所在计算机设备的一种硬件结构图。图5是本申请根据一示例性实施例示出的一种列式存储数据的处理装置的框图。具体实施方式这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本申请相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本申请的一些方面相一致的装置和方法的例子。在本申请使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本申请。在本申请和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。还应当理解,本文中使用的术语“和/或”是指并包含一个或多个相关联的列出项目的任何或所有可能组合。应当理解,尽管在本申请可能采用术语第一、第二、第三等来描述各种信息,但这些信息不应限于这些术语。这些术语仅用来将同一类型的信息彼此区分开。例如,在不脱离本申请范围的情况下,第一信息也可以被称为第二信息,类似地,第二信息也可以被称为第一信息。取决于语境,如在此所使用的词语“如果”可以被解释成为“在……时”或“当……时”或“响应于确定”。首先对文件的列式存储格式进行说明。如图1a所示,是相关技术中一种列式存储格式的示意图,图1a中的列式存储格式是将数据文件中某一列的全部数据值序列化在一起连续存储于磁盘中,然后再存储另一列的所有数据值;列式存储格式还可以是针对某一列的部分数据值,如图1b所示,是相关技术中另一种列式存储格式的示意图,图1b中将整体数据先按行划分为两个分块(例如parquet中的rowgroup概念,分块的数量还可以是其他数值),每个分块内的数据再进行列式存储。另外,数据尾部会写有footer信息,包括有数据文件的元数据信息、列的个数、相对位置、数据类型信息或统计信息等等。由于列式存储格式是将数据文件中某一列的全部或部分数据至序列化存储,因此footer信息用于记录文件存储时的相关信息,以用于数据读取。实际应用中经常会涉及对原数据文件增加新数据的需求,相关技术中在获取到新数据时,由于数据尾部写有footer信息,因此通常采用新建一数据文件的方式存储新数据。本申请实施例不同于相关技术中原始数据文件的footer信息存储在文件尾部,而是采用一独立的footer文件进行记录,因此新增数据可以直接追加至原始数据文件的尾部,而新增数据的footer信息则记录在footer文件中。本申请实施例可以针对列式存储数据实现高效的流式追加数据,新增数据可以追加至原始数据文件中,无需采用新建文件进行记录的方式,因此处理效率更高,占用资源更少,数据查询速度更快。接下来对本申请实施例进行详细说明。如图2所示,图2是本申请根据一示例性实施例示出的一种列式存储数据的处理方法的流程图,本申请实施例可应用于采用列式存储格式的数据库中,包括以下步骤201至202:在步骤201中,接收针对原始数据文件的新增数据,所述原始数据文件采用列式存储格式进行存储,所述原始数据文件的footer信息采用独立于所述原始数据文件的footer文件进行记录。在步骤202中,按照列式存储格式将所述新增数据写入至所述原始数据文件的尾部,并在所述footer文件中增加针对所述新增数据的footer信息,获得更新后的原始数据文件和footer文件。对于列式存储的原始数据文件,本实施例中采用新建一footer文件的方式记录原始数据文件的footer信息。通过上述处理,当需要新增数据时,新增数据即可以直接追加至原始数据文件的尾部,作为原始数据文件中新的数据分块,新增数据仍可以写入至原始数据文件中,并且实现了高效的流式数据追加。之后,在footer文件中对footer信息进行更新。实际应用中,对于已进行列式存储的原始数据文件,原始数据文件已存储至磁盘中。在某些例子中,当获取到新增数据时,新增数据可以实时获取并实时写入至原始数据文件中。在另一些例子中,新增数据的数据量可能较大,并能持续获取得到,为了提高数据处理效率,在所述接收针对原始数据文件的新增数据后,所述方法还可以包括:将接收的新增数据加载至高速存储空间中。所述按照列式存储格式将所述新增数据写入至所述原始数据文件的尾部,包括:当所述高速存储空间中加载的新增数据满足预设存储条件时,按照列式存储格式将所述加载的新增数据写入至所述原始数据文件的尾部。其中,所述高速存储空间可以包括内存或缓存等暂时存放数据的空间或用以数据交换的缓冲空间,具体可以根据实际数据库系统所在的硬件环境而确定,本实施例对此不作限定。通过上述方式,可以将新增数据暂时加载至内存等高速存储空间中,具体的,加载至内存的方式可以采用行式存储。之后再统一将新增数据写入至原始数据文件,因此可以提高数据处理效率。其中,预设存储条件表征将新增数据从高速存储空间中写入至原始数据文件的时机,实际应用中可以灵活配置,例如预设存储条件可以在高速存储空间当前使用率达到较高使用率时将加载的新增数据追加至原始数据文件中,以防止内存或缓存等溢出造成数据丢失;或者是高速存储空间当前使用率在较低使用率时将加载的新增数据追加至原始数据文件中,以实现在硬件处于空闲的情况下处理数据等等多种方式。在一个可选的实现方式中,所述预设存储条件可以包括如下一种或多种条件:第一种、所述新增数据的数据量达到预设的数据量阈值。此种方式中,预设存储条件采用数据量作为考虑因素,可以在新增数据数据量较大时,及时将新增数据追加至原始数据文件中,防止数据量较大造成的数据丢失等问题。其中,数据量阈值可以根据需要而灵活配置,本实施例对此不作限定。第二种、所述新增数据在内存中的加载时长达到预设的时长阈值。此种方式中,预设存储条件采用数据的加载时长作为考虑因素,可以在新增数据加载在内存中一定时间后,及时将新增数据追加至原始数据文件中,防止数据加载时间较长造成的数据丢失等问题。其中,时长阈值可以根据需要而灵活配置,本实施例对此不作限定。通过上述两种方式,可以确定一合理的时机将高速存储空间中加载的新增数据追加至原始数据文件中,以数据量和/或时长作为考虑因素,即可防止较快将新增数据追加至原始数据文件导致的资源消耗,也可以做到及时追加新增数据,防止数据丢失等问题。相关技术中,某些内存或缓存等硬件在加载数据时可能要求将数据分块存储,针对此种情况,本实施例中,所述将所述新增数据加载至内存中,可以包括:以预设的数据块大小为单位,将所述新增数据拆分为一个或多个数据块加载在所述内存中。数据库系统中,对于新增数据,通常会涉及数据可见时效性的问题。举例来说,当新增数据加载至内存后,用户需要查询某些数据,相关技术中通常采用在原始数据文件中查询数据的处理方式。而此时新增数据可能还加载在内存中,还未来得及存储于磁盘中,因此若用户需要查询的某些数据还加载在内存中,这部分数据没有输出,导致输出给用户的数据不全面,导致加载新增数据的可见时效性较差。针对此问题,本申请实施例的方法还可包括:当获取到针对所述原始数据文件的数据查询请求时,根据更新前的footer文件,在所述原始数据文件中读取满足所述请求的第一数据,并在所述高速存储空间中加载的新增数据读取满足所述请求的第二数据。将所述第一数据和第二数据合并后输出。本实施例中,在获取到针对所述原始数据文件的数据查询请求时,一方面可以在磁盘中存储的原始数据文件中读取满足请求的第一数据,另一方面,还需要在所述高速存储空间中加载的新增数据中读取满足所述请求的第二数据。之后合并第一数据和第二数据,将合并后的数据作为对数据查询请求的响应数据而输出。所述通过上述方式,由于对于高速存储空间中加载的新增数据也会进行查询,因此可以防止输出给用户的数据不全面的问题,数据的可见时效性较高。实际应用中,为了防止数据丢失,通常会对原始数据文件生成副本文件以进行数据备份。若接收的新增数据加载至高速存储空间中,加载的新增数据暂未写入至原始数据文件中,因此有可能发生数据丢失的情况,本实施例中,所述方法还包括:生成所述加载的新增数据的副本文件,并将所述加载的新增数据的副本文件存储于与所述原始数据文件的副本文件相同的目录下。通过上述方式,由于针对加载的新增数据生成了对应的副本文件,因此可以防止数据丢失,另外,加载的新增数据的副本文件存储于与所述原始数据文件的副本文件相同的目录下,以使新增数据的副本文件与原始数据文件的副本文件相对应,便于数据恢复。接下来通过一具体实施例对本申请所提供的方案再次进行详细说明。如图3a所示,是本申请根据一示例性实施例示出的一种列式存储数据的处理方法的应用场景图,图3a中包括一数据库管理系统,该数据库管理系统可以是parquet或orcfile等支持列式存储格式的数据库管理系统。本申请实施例所提供的列式存储数据的处理方案可以作为一独立的模块或进程,运行于该数据库管理系统中,以对列式存储数据进行处理。如图3a所示,数据库管理系统中维护有一原始数据文件,该原始数据文件以列式存储格式存储于磁盘中的某个位置。该原始数据文件如图1b中的方式存储,整体数据先按行划分为多个分块(rowgroup),每个分块内的数据再进行列式存储,该原始数据文件的footer信息采用独立于所述原始数据文件的footer文件进行记录。在某个时间段,针对原始数据文件的新增数据持续输入至数据库管理系统。本实施例中可以持续接收新增数据,并将接收到的新增数据存放于内存中。按照内存的加载机制,如图3b所示,是本申请根据一示例性实施例示出的一种新增数据加载在内存中的示意图,新增数据通过流式追加(appendrecord)的方式写入(write)至内存,在内存中可以以图3b中所示的datablock(数据块)存在,当新增数据对应的datablock的总数据量达到一定的大小,或者是datablock的加载时长达到一定时长,可以调用数据库管理系统的底接口,将该新增数据对应的datablock追加到原始数据文件的尾端,形成一个新的rowgroup。其中,当新增数据对应有较多的datablock,或者满足其他条件时,还可以将多个datablock合并(compaction)后再追加至原始数据文件的尾端,以减小datablock的数量,具体的是否采用datablock的处理方式实际应用中可以灵活配置,本实施例对此不作限定。另一方面,在该footer文件中增加针对所述新增数据的footer信息,获得更新后的原始数据文件和footer文件。其中,由于记录有footer信息,接收的新增数据可以直接追加至原文件中不进行排序。数据写入内存之后,考虑到数据丢失问题,因此可以进行数据多副本的处理,对于内存中加载的新增数据,可以生成对应的副本,并与原始数据文件的副本的存放位置一致,也即是将新增数据的副本文件存储于与所述原始数据文件的副本文件相同的目录下。数据读取过程中,本实施例中除了正常的磁盘文件读取之外,还需要考虑加载于内存中的新增数据,此处是提升数据可见时效性的关键。当接收到数据查询请求时,可以如图3b所示进行读操作(reader),可以将请求拆分为两个子请求:磁盘文件数据读取(disktablescan)和内存数据读取(memtablescan),将两部分数据结果合并之后,作为此次请求的返回结果,图3b中以queryengine数据查询语言为例,进行表扫描(tablescan)获得查询结果。与前述列式存储数据的处理方法的实施例相对应,本申请还提供了列式存储数据的处理装置及其所应用的计算机设备的实施例。本申请列式存储数据的处理装置的实施例可以应用在计算机设备。装置实施例可以通过软件实现,也可以通过硬件或者软硬件结合的方式实现。以软件实现为例,作为一个逻辑意义上的装置,是通过其所在列式存储数据的处理的处理器将非易失性存储器中对应的计算机程序指令读取到内存中运行形成的。从硬件层面而言,如图4所示,为本申请列式存储数据的处理装置所在计算机设备的一种硬件结构图,除了图4所示的处理器410、内存430、网络接口420、以及非易失性存储器440之外,实施例中装置431所在的计算机设备通常根据该计算机设备的实际功能,还可以包括其他硬件,对此不再赘述。如图5所示,图5是本申请根据一示例性实施例示出的一种列式存储数据的处理装置的框图,包括:数据接收模块51,用于:接收针对原始数据文件的新增数据,所述原始数据文件采用列式存储格式进行存储,所述原始数据文件的footer信息采用独立于所述原始数据文件的footer文件进行记录。数据写入模块52,用于:按照列式存储格式将所述新增数据写入至所述原始数据文件的尾部,并在所述footer文件中增加针对所述新增数据的footer信息,获得更新后的原始数据文件和footer文件。在一个可选的实现方式中,所述数据接收模块51,还用于:在所述接收针对原始数据文件的新增数据后,将接收的新增数据加载至高速存储空间中;所述数据写入模块52,具体用于:当所述高速存储空间中加载的新增数据满足预设存储条件时,按照列式存储格式将所述加载的新增数据写入至所述原始数据文件的尾部。在一个可选的实现方式中,所述预设存储条件包括如下一种或多种条件:所述新增数据的数据量达到预设的数据量阈值;或,所述新增数据在高速存储空间中的加载时长达到预设的时长阈值。在一个可选的实现方式中,所述装置还包括读取模块,用于:当获取到针对所述原始数据文件的数据查询请求时,根据更新前的footer文件,在所述原始数据文件中读取满足所述请求的第一数据,并在所述高速存储空间中加载的新增数据读取满足所述请求的第二数据;将所述第一数据和第二数据合并后输出。在一个可选的实现方式中,所述装置还包括副本处理模块,用于:生成所述加载的新增数据的副本文件,并将所述加载的新增数据的副本文件存储于与所述原始数据文件的副本文件相同的目录下根据本申请实施例的第三方面,提供一种列式存储数据的处理装置,包括:处理器;用于存储处理器可执行指令的存储器;其中,所述处理器被配置为:接收针对原始数据文件的新增数据,所述原始数据文件采用列式存储格式进行存储,所述原始数据文件的footer信息采用独立于所述原始数据文件的footer文件进行记录。按照列式存储格式将所述新增数据写入至所述原始数据文件的尾部,并在所述footer文件中增加针对所述新增数据的footer信息,获得更新后的原始数据文件和footer文件。上述列式存储数据的处理装置中各个模块的功能和作用的实现过程具体详见上述列式存储数据的处理方法中对应步骤的实现过程,在此不再赘述。相应的,本申请还提供一种计算机存储介质,所述存储介质中存储有程序指令,所述程序指令包括:接收针对原始数据文件的新增数据,所述原始数据文件采用列式存储格式进行存储,所述原始数据文件的footer信息采用独立于所述原始数据文件的footer文件进行记录;按照列式存储格式将所述新增数据写入至所述原始数据文件的尾部,并在所述footer文件中增加针对所述新增数据的footer信息,获得更新后的原始数据文件和footer文件。本申请实施例可采用在一个或多个其中包含有程序代码的存储介质(包括但不限于磁盘存储器、cd-rom、光学存储器等)上实施的计算机程序产品的形式。计算机可用存储介质包括永久性和非永久性、可移动和非可移动媒体,可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括但不限于:相变内存(pram)、静态随机存取存储器(sram)、动态随机存取存储器(dram)、其他类型的随机存取存储器(ram)、只读存储器(rom)、电可擦除可编程只读存储器(eeprom)、快闪记忆体或其他内存技术、只读光盘只读存储器(cd-rom)、数字多功能光盘(dvd)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。对于装置实施例而言,由于其基本对应于方法实施例,所以相关之处参见方法实施例的部分说明即可。以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的模块可以是或者也可以不是物理上分开的,作为模块显示的部件可以是或者也可以不是物理模块,即可以位于一个地方,或者也可以分布到多个网络模块上。可以根据实际的需要选择其中的部分或者全部模块来实现本申请方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。本领域技术人员在考虑说明书及实践这里申请的发明后,将容易想到本申请的其它实施方案。本申请旨在涵盖本申请的任何变型、用途或者适应性变化,这些变型、用途或者适应性变化遵循本申请的一般性原理并包括本申请未申请的本
技术领域
:中的公知常识或惯用技术手段。说明书和实施例仅被视为示例性的,本申请的真正范围和精神由下面的权利要求指出。应当理解的是,本申请并不局限于上面已经描述并在附图中示出的精确结构,并且可以在不脱离其范围进行各种修改和改变。本申请的范围仅由所附的权利要求来限制。以上所述仅为本申请的较佳实施例而已,并不用以限制本申请,凡在本申请的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本申请保护的范围之内。当前第1页12当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1