数据处理方法、设备、存储介质及系统与流程

文档序号:26913101发布日期:2021-10-09 15:33阅读:99来源:国知局
数据处理方法、设备、存储介质及系统与流程

1.本技术涉及数据处理技术领域,尤其涉及一种数据处理方法、设备、存储介质及系统。


背景技术:

2.pax(partition attributes across)是一种数据存储格式,其特点是行列混存,按页管理。现有的pax格式(如 apache orc)是为通用的追加写入(append

only)存储介质(如hdfs)打造的,其中,append

only存储介质是一种不支持对写入数据进行修改的存储介质,但是,由于其自身不包含缓存组件,因此,在进行数据读写操作时,会有较高延迟。


技术实现要素:

3.本技术实施例提供一种数据处理方法、设备、存储介质及系统,能够以行列混存方式对数据进行存储,有效地避免文件数量爆炸的情况,另外,结合不同粒度的统计信息进行数据存储,有利于提高数据处理性能,降低延迟信息。
4.第一方面,本技术实施例提供了一种数据处理方法,包括:获取待存储数据,所述待存储数据用于持久化存储至数据库;基于所述待存储数据生成至少一个数据文件,其中,每个数据文件包括至少一个文件块,每个文件块中包括多个行组文件,且所述数据文件为支持数据追加写和行列混存的存储格式;确定所述数据文件在不同文件粒度上的统计信息,所述文件粒度包括:与数据文件相对应的第一粒度、与文件块相对应的第二粒度、与行组文件相对应的第三粒度;将所述待存储数据和所述统计信息存储至数据库。
5.第二方面,本技术实施例提供了一种数据处理装置,包括:获取模块,用于获取待存储数据,所述待存储数据用于持久化存储至数据库;生成模块,用于基于所述待存储数据生成至少一个数据文件,其中,每个数据文件包括至少一个文件块,每个文件块中包括多个行组文件,且所述数据文件为支持数据追加写和行列混存的存储格式;确定模块,用于确定所述数据文件在不同文件粒度上的统计信息,所述文件粒度包括:与数据文件相对应的第一粒度、与文件块相对应的第二粒度、与行组文件相对应的第三粒度;处理模块,用于将所述待存储数据和所述统计信息存储至数据库。
6.第三方面,本技术实施例提供了一种电子设备,包括:存储器、处理器;其中,所述存储器用于存储一条或多条计算机指令,其中,所述一条或多条计算机指令被所述处理器执行时实现上述第一方面所示的数据处理方法。
7.第四方面,本发明实施例提供了一种计算机存储介质,用于储存计算机程序,所述计算机程序使计算机执行时实现上述第一方面所示的数据处理方法。
8.第五方面,本发明实施例提供了一种计算机程序产品,包括:存储有计算机指令的计算机可读存储介质,当所述计算机指令被一个或多个处理器执行时,致使所述一个或多个处理器执行权上述第一方面所示的数据处理方法中的步骤。
9.第六方面,本发明实施例提供了一种数据处理系统,包括:请求端,用于将待存储数据发送至数据处理装置,其中,所述待存储数据用于持久化存储至数据库;数据处理装置,用于获取所述待存储数据,并基于所述待存储数据生成至少一个数据文件,其中,每个数据文件包括至少一个文件块,每个文件块中包括多个行组文件,且所述数据文件为支持数据追加写和行列混存的存储格式; 确定所述数据文件在不同文件粒度上的统计信息,所述文件粒度包括:与数据文件相对应的第一粒度、与文件块相对应的第二粒度、与行组文件相对应的第三粒度;将所述待存储数据和所述统计信息存储至数据库。
10.本技术实施例提供的技术方案,通过获取与数据库相对应的待存储数据,基于所述待存储数据生成至少一个数据文件,其中,每个数据文件包括至少一个文件块,每个文件块中包括多个行组文件,且所述数据文件为支持数据追加写和行列混存的存储格式;而后确定所述数据文件在不同文件粒度上的统计信息,并将所述待存储数据和所述统计信息存储至数据库,有效地实现了使用行列混存的方式对数据进行存储,进而可以避免文件数量爆炸的情况,另外,结合不同文件粒度上的统计信息将数据存储在数据库中,这样在进行数据扫描时,可以基于统计信息过滤掉大部分未命中扫描要求的数据,进而有利于提高数据处理性能,降低延迟信息,进一步保证了该方法的实用性。
附图说明
11.为了更清楚地说明本技术实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本技术的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
12.图1为本技术实施例提供的一种数据处理方法的场景示意图;图2为本技术实施例提供的一种数据处理方法的流程示意图;图3为本技术实施例提供的数据文件的结构示意图;图4为本技术实施例提供的基于所述待存储数据生成至少一个数据文件的流程示意图;图5为本技术实施例提供的另一种数据处理方法的流程示意图;图6为本技术实施例提供的又一种数据处理方法的流程示意图;图7为本技术实施例提供的再一种数据处理方法的流程示意图;图8为本技术实施例提供的又一种数据处理方法的流程示意图;图9为本技术实施例提供的一种基于缓冲区进行数据处理操作的流程示意图;图10为本技术实施例提供的另一种基于缓冲区进行数据处理操作的流程示意图;图11为本技术实施例提供的又一种数据处理方法的流程示意图;图12为本技术应用实施例提供的数据预取操作的交互示意图;
图13为本技术实施例提供的一种数据处理装置的结构示意图;图14为图13所示的数据处理装置所对应的电子设备的结构示意图。
具体实施方式
13.为使本技术实施例的目的、技术方案和优点更加清楚,下面将结合本技术实施例中的附图,对本技术实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本技术一部分实施例,而不是全部的实施例。基于本技术中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本技术保护的范围。
14.在本技术实施例中使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本技术。在本技术实施例和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义,“多种”一般包含至少两种,但是不排除包含至少一种的情况。
15.应当理解,本文中使用的术语“和/或”仅仅是一种描述关联对象的关联关系,表示可以存在三种关系,例如,a和/或b,可以表示:单独存在a,同时存在a和b,单独存在b这三种情况。另外,本文中字符“/”,一般表示前后关联对象是一种“或”的关系。
16.取决于语境,如在此所使用的词语“如果”、“若”可以被解释成为“在
……
时”或“当
……
时”或“响应于确定”或“响应于检测”。类似地,取决于语境,短语“如果确定”或“如果检测(陈述的条件或事件)”可以被解释成为“当确定时”或“响应于确定”或“当检测(陈述的条件或事件)时”或“响应于检测(陈述的条件或事件)”。
17.还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的商品或者系统不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种商品或者系统所固有的要素。在没有更多限制的情况下,由语句“包括一个
……”
限定的要素,并不排除在包括所述要素的商品或者系统中还存在另外的相同要素。
18.另外,下述各方法实施例中的步骤时序仅为一种举例,而非严格限定。
19.为了方便本领域技术人员理解本技术实施例提供的技术方案,下面对相关技术进行说明:随着数据库的不断发展,相关技术中具有能够支持海量数据存储和大量云服务器 (elastic compute service,简称ecs)的同时访问、存储成本极低的存储介质,例如:云存储对象oss;但是,上述存储介质有着文件不支持随机写、单节点带宽有限、io延迟较高的限制,因此,在使用上述存储介质时,需要数据库系统针对此存储特性进行定制优化。
20.而pax(partition attributes across)是一种数据存储格式,其特点是行列混存,按页管理。现有的pax格式(如 apache orc)是为通用的append

only存储介质(如hdfs)打造的,其中,append

only存储介质是一种不支持对写入数据进行修改的存储介质,但是,由于其自身不包含缓存组件,因此,在进行数据读写操作时,会有较高延迟。
21.为了保证数据存储性能,降低数据处理延时,基于目前所提供的存储介质和数据存储格式,本实施例提供了一种数据处理方法、设备、存储介质及系统,该数据处理方法能够使得数据存储性能较高、处理速度较高、延时较低。具体的,该方法的执行主体可以为数据处理系统,该数据处理系统可以包括请求端和与请求端通信连接的数据处理装置,参考
附图1所示:其中,请求端可以是任何具有一定数据传输能力的计算设备,此外,请求端的基本结构可以包括:至少一个处理器。处理器的数量取决于请求端的配置和类型。请求端也可以包括存储器,该存储器可以为易失性的,例如ram,也可以为非易失性的,例如只读存储器(read

only memory,简称rom)、闪存等,或者也可以同时包括两种类型。存储器内通常存储有操作系统(operating system,简称os)、一个或多个应用程序,也可以存储有程序数据等。除了处理单元和存储器之外,请求端还包括一些基本配置,例如网卡芯片、io总线、显示组件以及一些外围设备等。可选地,一些外围设备可以包括,例如键盘、鼠标、输入笔、打印机等。其它外围设备在本领域中是众所周知的,在此不做赘述。可选地,请求端可以为pc(personal computer)终端、手持终端(例如:智能手机、平板电脑)等。
22.数据处理装置是指可以在网络虚拟环境中提供数据处理服务的设备,通常是指利用网络进行信息规划、数据处理操作的装置。在物理实现上,数据处理装置可以是任何能够提供计算服务,响应服务请求,并进行处理的设备,例如:可以是集群服务器、常规服务器、云服务器、云主机、虚拟中心等。数据处理装置的构成主要包括处理器、硬盘、内存、系统总线等,和通用的计算机架构类似。
23.在上述本实施例中,请求端可以与数据处理装置进行网络连接,该网络连接可以是无线或有线网络连接。若请求端与数据处理装置是通信连接,该移动网络的网络制式可以为2g(gsm)、2.5g(gprs)、3g(wcdma、td

scdma、cdma2000、utms)、4g(lte)、4g+(lte+)、wimax、5g等中的任意一种。
24.在本技术实施例中,请求端可以获取与数据库相对应的待存储数据,具体的,本实施例对于请求端获取与数据库相对应的待存储数据的具体实现方式不做限定,例如:请求端上设置有交互界面,通过交互界面获取用户输入的执行操作,通过执行操作来获得待存储数据;或者,请求端上可以设置有特定接口,通过特定接口可以获取到待存储数据,使得请求端可以稳定地获取到待存储数据。在获取到待存储数据之后,可以将待存储数据上传至数据处理装置,以使得数据处理装置可以对所上传的待存储数据进行数据分析处理。
25.数据处理装置,用于接收请求端上传的与数据库相对应的待存储数据,而后,数据处理装置可以对待存储数据进行分析处理,具体的,可以生成与待存储数据相对应的至少一个数据文件,其中,每个数据文件包括至少一个文件块,每个文件块中包括多个行组文件,且所生成的数据文件为支持数据追加写和行列混存的存储格式。在获取到与待存储数据相对应的至少一个数据文件之后,可以确定数据文件在不同文件粒度上的统计信息,上述的文件粒度可以包括:与数据文件相对应的第一粒度、与文件块相对应的第二粒度、与行组文件相对应的第三粒度。在获取到数据文件在不同文件粒度上的统计信息之后,可以将待存储数据和统计信息存储至数据库,有效地实现了可以将数据持久化存储在数据库中。
26.本实施例提供的技术方案,通过获取与数据库相对应的待存储数据,基于待存储数据生成至少一个数据文件,其中,每个数据文件包括至少一个文件块,每个文件块中包括多个行组文件,且数据文件为支持数据追加写和行列混存的存储格式;而后确定数据文件在不同文件粒度上的统计信息,文件粒度包括:与数据文件相对应的第一粒度、与文件块相对应的第二粒度、与行组文件相对应的第三粒度,并将待存储数据和统计信息存储至数据库,有效地实现了使用行列混存的方式对数据进行存储,进而可以避免文件数量爆炸的情
况,另外,结合不同文件粒度上的统计信息将数据存储在数据库中,这样在进行数据扫描,统计信息可以有效地保证大部分的数据都能够直接命中内存,这样在进行数据扫描操作时,可以基于统计信息过滤掉大部分未命中扫描要求的数据,进而有利于提高数据处理性能,降低延迟信息,保证了该方法的实用性,同时也实现了一种高性能、高效率的存储及缓存方案。
27.下面通过一个示例性的应用场景具体说明本技术各个实施例提供的数据处理方法、装置及设备。
28.图2为本技术实施例提供的一种数据处理方法的流程示意图;参考附图2所示,本实施例提供了一种数据处理方法,该方法的执行主体可以为数据处理装置,可以理解的是,该数据处理装置可以实现为软件、或者软件和硬件的组合。具体的,该数据处理方法可以包括:步骤s401:获取待存储数据,待存储数据用于持久化存储至数据库。
29.步骤s402:基于待存储数据生成至少一个数据文件,其中,每个数据文件包括至少一个文件块,每个文件块中包括多个行组文件,且数据文件为支持数据追加写和行列混存的存储格式。
30.步骤s403:确定数据文件在不同文件粒度上的统计信息,文件粒度包括:与数据文件相对应的第一粒度、与文件块相对应的第二粒度、与行组文件相对应的第三粒度。
31.步骤s404:将待存储数据和统计信息存储至数据库。
32.下面对上述各个步骤进行详细说明:步骤s401:获取待存储数据,待存储数据用于持久化存储至数据库。
33.其中,在用户针对数据库存在数据存储需求时,则可以通过请求端生成或者获取待存储数据,具体的,请求端可以提供用于供用户输入执行操作的接口或者端口,通过接口或者端口获取到用户输入的执行操作,通过执行操作可以生成或者获取待存储数据,所生成的待存储数据用于持久化存储至数据库。在请求端生成或者获取待存储数据之后,可以将待存储数据发送至数据处理装置,从而使得数据处理装置可以准确、稳定地获取到与数据库相对应的待存储数据,可以理解的是,数据处理装置所能够获取到的待存储数据的数量可以为一个或多个。
34.步骤s402:基于待存储数据生成至少一个数据文件,其中,每个数据文件包括至少一个文件块,每个文件块中包括多个行组文件,且数据文件为支持数据追加写和行列混存的存储格式。
35.在获取到待存储数据之后,可以对待存储数据进行分析处理,以生成至少一个数据文件,所生成的数据文件可以为支持数据追加写和行列混存的存储格式,在一些实例中,数据文件可以为orc文件或者parquet文件,具体的,本领域技术人员可以基于具体的应用场景或者应用需求选择所生成的数据文件的文件格式。可以理解的是,不同的待存储数据可以生成不同数量或者不同格式的数据文件。
36.另外,所生成的数据文件中包括至少一个文件块,每个文件块中可以包括多个行组文件,具体的,如图3所示,一个数据文件可以包括多个文件块(stripe)和尾部数据(tail),其中,每个文件块中可以包括索引流(index streams)、数据流(data streams)和文件块页脚(stripe footer),索引流中包括行组文件的统计信息,例如:列1和行组1的统
计信息、列1和行组2的统计信息等等,而数据流中包括多个行组文件,例如:第一列数据、第二列数据等等;文件块页脚部分存储有各个文件块的类型信息、位置信息、长度信息或者编码信息等等。
37.步骤s403:确定数据文件在不同文件粒度上的统计信息,文件粒度包括:与数据文件相对应的第一粒度、与文件块相对应的第二粒度、与行组文件相对应的第三粒度。
38.由于一个数据文件可以由一个或多个文件块构成,而一个文件块可以由一个或多个行组文件构成,因此,一个数据文件可以对应有三个文件粒度,即与数据文件相对应的第一粒度、与文件块相对应的第二粒度、与行组文件相对应的第三粒度。为了能够提高数据存储的性能以及数据读写的效率,在获取到数据文件之后,可以对数据文件进行分析处理,以确定数据文件在不同文件粒度上的统计信息,数据文件在不同文件粒度上的统计信息可以包括以下至少之一:表数据类型信息、列最大值、列最小值、所在列的数据和值、非空值的数量、用于确定是否存在某一值的标识信息。另外,由于文件粒度可以包括第一粒度、第二粒度和第三粒度,因此,所获得的统计信息可以包括:与第一粒度相对应的统计信息、与第二粒度相对应的统计信息和与第三粒度相对应的统计信息。
39.步骤s404:将待存储数据和统计信息存储至数据库。
40.其中,在获取到待存储数据和统计信息之后,可以将待存储数据和统计信息关联存储在数据库,这样在进行数据访问操作时,通过存储的统计信息可以过滤掉大部分未命中数据访问要求的数据,进而有利于提升数据处理的性能和效率。
41.本实施例提供的数据处理方法,通过获取与数据库相对应的待存储数据,基于待存储数据生成至少一个数据文件,其中,每个数据文件包括至少一个文件块,每个文件块中包括多个行组文件,且数据文件为支持数据追加写和行列混存的存储格式;而后确定数据文件在不同文件粒度上的统计信息,文件粒度包括:与数据文件相对应的第一粒度、与文件块相对应的第二粒度、与行组文件相对应的第三粒度,并将待存储数据和统计信息存储至数据库,有效地实现了使用行列混存的方式对数据进行存储,进而可以避免文件数量爆炸的情况,另外,结合不同文件粒度上的统计信息将数据存储在数据库中,这样在进行数据扫描,统计信息可以有效地保证大部分的数据都能够直接命中内存,这样在进行数据扫描操作时,可以基于统计信息过滤掉大部分未命中扫描要求的数据,进而有利于提高数据处理性能,降低延迟信息,保证了该方法的实用性,同时也实现了一种高性能、高效率的存储及缓存方案。
42.图4为本技术实施例提供的基于待存储数据生成至少一个数据文件的流程示意图;参考附图4所示,本实施例提供了一种生成至少一个数据文件的实现方式,具体的,本实施例中的基于待存储数据生成至少一个数据文件可以包括:步骤s601:获取待存储数据的数据行数和用于标识文件块大小的参数信息。
43.步骤s602:在数据行数大于或等于设定阈值时,则将数据行数相对应的待存储数据生成一数据文件。
44.步骤s603:基于参数信息将数据文件划分为多个文件块。
45.其中,在获取到待存储数据之后,可以统计待存储数据的数据行数,数据行数即为待存储数据实际占用的行数。为了能够准确地生成至少一个数据文件,则可以获取预先配置的用于标识文件块大小的参数信息,具体的,用于标识文件块大小的参数信息可以存储
在预设区域中,通过访问预设区域即可获取用于标识文件块大小的参数信息,在一些实例中,参数信息可以64mb或者200mb。可以理解的是,不同的应用场景可以对应有不同的参数信息。
46.在获取到数据行数和参数信息之后,可以将数据行数与设定阈值进行分析比较,在数据行数小于设定阈值时,则可以说明此时的待存储数据量较少,可以暂时不对待存储数据进行文件划分操作;在数据行数大于或等于设定阈值时,则可以将数据行数相对应的待存储数据生成一数据文件,从而有效地实现了能够基于待存储数据生成一个或多个数据文件。
47.另外,在获取到参数信息和数据文件之后,可以基于参数信息将数据文件划分为多个文件块,文件块的数据量可以满足用于标识文件块大小的参数信息;举例来说,在一个数据文件的数据大小为1024mb,而参数信息为64mb时,则可以将数据文件划分为多个数据大小为64mb的文件块,此时,文件块的数量为1024mb/64mb=16,从而有效地实现了能够将数据文件划分为多个文件块。
48.本实施例中,通过获取待存储数据的数据行数和用于标识文件块大小的参数信息,在数据行数大于或等于设定阈值时,则将数据行数相对应的待存储数据生成一数据文件,并基于参数信息将数据文件划分为多个文件块,从而有效地实现了能够将待存储数据划分为具有不同粒度的至少一个数据文件,这样可以确定数据文件在不同文件粒度上的统计信息,进而保证了基于统计信息进行数据处理操作的质量和效率。
49.图5为本技术实施例提供的另一种数据处理方法的流程示意图;参考附图5所示,为了进一步提高数据处理性能,在基于待存储数据生成至少一个数据文件之前,本实施例中的方法还可以包括:步骤s701:获取待存储数据中需要进行排序的至少一个排序列。
50.步骤s702:基于至少一个排序列对待存储数据进行行排序,获得排序后数据。
51.在获取到待存储数据之后,可以先确定待存储数据中需要进行排序的至少一个排序列,具体的,获取待存储数据中需要进行排序的至少一个排序列可以包括:获取用户针对待存储数据中至少一个列数据所输入的执行操作,基于执行操作可以确定待存储数据中需要进行排序的至少一个排序列。
52.在获取到至少一个排序列之后,可以基于至少一个排序列对待存储数据进行行排序,从而可以获得排序后数据,有效地实现了在获取到待存储数据之后,可以先对待存储数据进行行排序操作,这样在基于统计信息和排序后数据进行数据处理操作时,可以有效地提高数据处理性能,降低数据处理延时。
53.举例来说,待存储数据包括以下表1所示的数据,列数据可以包括:姓名、年纪、工作年限和考核等级等等,在输入的姓名可以包括:甲、乙、丙等等,年纪可以包括:25周岁、22周岁、28周岁等等,工作年限可以包括:3年、1年、5年等等,考核等级可以包括:a级、b级、c级等等。
54.表1姓名年纪工作年限考核等级甲252c乙222b
丙285a............在获取到待存储数据中需要进行排序的排序列为“年纪列”时,那么,基于至少一个排序列对待存储数据进行行排序,可以获得排序后数据,具体如下表2所示:表2姓名年纪工作年限考核等级乙222b甲252c丙285a............由上述表2可知,年纪列中的最大值为“28”,最小值为“22”,因此,通过对排序后数据来确定统计信息,可以理解的是,在基于其他的排序列对待存储数据进行排序的实现方式与上述基于“年纪列”对待存储数据进行排序的实现方式相类似,具体可参考上述陈述内容,在此不再赘述。
55.在又一些实例中,排序列的数量可以为两个或两个以上,其中,两个排序列中可以包括一个主排序列和次排序列,此时,需要先基于主排列对待存储数据进行排序操作,获得第一排序后数据,在获取到第一排序后数据之后,可以基于次排序列对第一排序后数据进行排序操作,获得第二排序后数据。
56.本实施例中,通过获取待存储数据中需要进行排序的至少一个排序列,而后基于至少一个排序列对待存储数据进行行排序,获得排序后数据,从而有效地实现了在获取到待存储数据之后,可以先对待存储数据进行行排序操作,这样在基于统计信息和排序后数据进行数据处理操作时,可以有效地提高数据处理性能,降低数据处理延时,进一步提高了数据处理方法的实用性。
57.图6为本技术实施例提供的又一种数据处理方法的流程示意图;参考附图6所示,在基于待存储数据生成至少一个数据文件之前,本实施例中的方法还可以包括:步骤s801:获取用于对待存储数据进行列排序的设定规则。
58.步骤s802:基于设定规则对待存储数据进行列排序,获得排序后数据。
59.在获取到待存储数据之后,为了提高数据处理的质量和效率,可以对待存储数据进行列排序操作,具体的,为了能够实现对待存储数据进行列排序操作,则可以获取用于对待存储数据进行列排序的设定规则,该设定规则可以存储在预设区域中,通过访问预设区域即可获取用于对待存储数据进行列排序的设定规则,在一些实例中,设定规则可以包括:指定的数据列位于定长的数据列之前;定长的数据列位于变长的数据列之前;定长的列中长度较小的数据列位于长度较大的数据列之前;同样长度的定长列按照数据的输入次序进行排列。
60.在获取到设定规则之后,可以基于设定规则对待存储数据进行列排序,从而可以获得排序后数据。举例来说,在待存储数据中的某一行数据包括:整数类型的数据a、字符类型的数据b、文本类型的数据c、整数类型的数据d、布尔类型的数据e时,若数据输入顺序为如下表格所对应的顺序时:a:intb:char(64)c:textd:inte:bool
在获取到用于对待存储数据进行列排序的设定规则之后,则可以基于上述的设定规则对待存储数据进行列排序,从而可以获得如下表格所对应的数据:e:boola:intd:intb:char(64)c:text本实施例中,通过获取用于对待存储数据进行列排序的设定规则,而后基于设定规则对待存储数据进行列排序,获得排序后数据,从而有效地实现了在获取到待存储数据之后,可以先对待存储数据进行列排序操作,这样在基于统计信息和排序后数据进行数据处理操作时,可以有效地提高数据处理性能,降低数据处理延时,进一步提高了数据处理方法的实用性。
61.图7为本技术实施例提供的再一种数据处理方法的流程示意图;参考附图7所示,在将数据存储在数据库中时,用户可以对数据库中的数据进行读写操作,具体的,本实施例中的方法还可以包括:步骤s901:获取数据处理请求。
62.当用户对数据库中的数据存在数据处理需求时,则可以通过数据处理装置生成或者获取数据处理请求,可以理解的是,在不同的应用场景中,数据处理请求可以对应有不同的请求类型,例如:数据处理请求为数据读取请求、数据写入请求、数据删除请求、数据更新请求等等。具体的,数据处理装置上设置有用于供用户输入执行操作的交互界面,通过交互界面获取数据处理请求;或者,数据处理装置上可以设置有数据传输接口,通过数据传输接口则可以获取到第三设备所发送的数据处理请求。
63.步骤s902:基于数据处理请求生成一缓冲区,缓冲区用于存储与数据处理请求相对应的数据。
64.在获取到数据处理请求之后,为了能够保证数据处理操作的稳定可靠性,可以基于数据处理请求生成一缓冲区,该缓冲区用于存储与数据处理请求相对应的数据。可以理解的是,在不同的应用场景中,不同的数据处理请求可以生成相同或者不同大小的缓冲区。
65.步骤s903:基于缓冲区进行数据处理操作,获得与数据处理请求相对应的数据处理结果。
66.在生成缓冲区之后,可以基于缓冲区进行数据处理操作,从而可以获得与数据处理请求相对应的数据处理结果。由于数据处理请求可以为数据读取请求、数据删除请求、表结构修改请求,而不同类型的数据处理请求可以对应有不同的数据处理操作,因此,可以获取到不同的数据处理结果。
67.在一些实例中,基于缓冲区进行数据处理操作,获得与数据处理请求相对应的数据处理结果可以包括:在数据处理请求包括数据读取请求时,通过缓冲区获取与数据读取请求相对应的预取数据,并确定用于预取至缓冲区的位于预取数据之后的下一批数据;将下一批数据预取至缓冲区,以作为预取数据;基于缓冲区获得的所有数据,确定与数据读取请求相对应的数据读取结果。
68.其中,在数据处理请求包括数据读取请求时,即需要读取数据库中所存储的数据,为了能够保证数据读取操作的质量和效率,可以对数据库中的数据进行预取操作,即将一部分数据预取至缓冲区,这样可以通过缓冲区获取与数据读取请求相对应的预取数据,并可以确定用于预取至缓冲区的位于预取数据之后的下一批数据,并可以将下一批数据预取至缓冲区,以作为缓冲区中的预取数据,这样往复地进行数据读取操作,通过缓冲区获得与
数据处理请求相对应的所有数据,而后可以对所有数据进行分析处理,以确定与数据处理请求相对应的数据读取结果。
69.举例来说,在数据读取请求为读取年纪为25至35岁的所有员工信息,数据库中存储有年纪为22至50岁的员工信息。这样在获取到数据读取请求之后,可以生成一缓冲区,在生成数据读取请求之后,可以确定满足数据读取请求相对应的所有批数据,每批数据中的至少部分数据满足数据读取请求,例如,所有批数据可以包括第一批数据、第二批数据、第三批数据、第四批数据等等;而后可以先将第一批数据从数据库中预取至缓冲区,在获取到数据读取请求之后,可以通过缓冲区读取预取的第一批数据,这样可以有效地保证数据读取的质量和效率,同时还可以将第二批数据从数据库中预取至缓冲区,以便基于数据读取请求进行下一次的读取操作,如此往复地进行数据的预取操作,直至将所有满足数据读取请求的数据读取完毕为止,则可以基于所有数据来确定与数据处理请求相对应的数据读取结果,即可以获取到年纪为25岁至35岁的所有员工信息。
70.在另一些实例中,基于缓冲区进行数据处理操作可以包括:在数据处理请求为数据删除请求时,则在缓冲区中确定与数据删除请求相对应的待删除数据;对待删除数据添加删除标记,添加有删除标记的数据在缓冲区内不可见。
71.其中,在数据处理请求为数据删除请求时,则说明用户存在对某些数据进行删除操作的需求,此时,则可以在缓冲区中确定与数据删除请求相对应的待删除数据,而后对待删除数据添加删除标记,需要注意的是,添加有删除标记的数据在缓冲区内不可见,从而有效地实现了数据删除操作。
72.举例来说,缓冲区内存储有数据行a、数据行b、数据行c,在获取到针对数据行c的数据删除请求之后,则可以将缓冲区中的数据行c添加上删除标记,以标识数据行c已经被删除,而后在缓冲区内可以包括可见的数据行a和数据行b,被删除的数据行c不可见。
73.在又一些实例中,基于缓冲区进行数据处理操作可以包括:在数据处理请求为表结构修改请求时,则将缓冲区中的数据刷写至数据库中;删除缓冲区,并生成与表结构修改请求相对应的新建缓冲区;基于新建缓冲区进行数据处理操作。
74.其中,在用户对数据存在结构调整需求时,则可以获取到表结构修改请求,此时的表结构修改请求可以包括新增列请求或者删除列请求,由于表结构调整操作比较复杂,此时若直接基于当前缓冲区的数据进行表结构调整操作,则需要占用较多的数据处理资源,因此,为了减少数据资源的占用率,则可以先将缓冲区中的数据刷写到数据库中,而后删除缓冲区,并生成与表结构修改请求相对应的新建缓冲区,新建缓冲区中的数据是经过表结构调整操作之后的数据,而后可以基于新建缓冲区进行相应的数据处理操作,这样可以有效地提高数据处理质量和效率。
75.在另一些实例中,基于缓冲区进行数据处理操作可以包括:在缓冲区的数据量大于或等于预设阈值时,将缓冲区中的数据刷写到数据库中;在数据处理请求为事务提交请求时,则基于事务提交请求将缓冲区中的数据刷写到数据库中。
76.其中,在基于缓冲区进行数据处理操作时,可以实时监测缓冲区中数据的处理状态,在数据处理状态满足设定状态时,则可以将缓冲区中的数据刷写到数据库中,上述的设定状态可以包括:位于缓冲区中的数据量大于或等于预设阈值,或者数据的处理状态为事务提交状态。
77.具体的,在基于缓冲区进行数据处理操作时,可以实时获取位于缓冲区中的数据量,在获取到缓冲区的数据量之后,可以将缓冲区的数据量与预设阈值进行分析比较,上述的预设阈值可以为90%、95%或者98%等等,在数据量大于或等于预设阈值时,则说明缓冲区中的数据已经写满,此时,则需要将缓冲区中的数据刷写到数据库中,从而有效地实现了缓冲区在数据处理任务开始时生成,在缓冲区写满时,则可以将缓冲区中的数据刷写到数据库中。另外,在数据处理请求为事务提交请求时,则说明此时的数据处理任务已经执行完毕或者用户指定需要进行任务提交操作,进而可以基于事务提交请求将缓冲区中的数据刷写到数据库中,从而有效地实现了缓冲区在数据处理任务开始时生成,在数据处理任务执行完毕或者用户指定需要进行任务提交操作时,将缓冲区中的数据刷写到数据库中,这样有效地保证数据处理的质量和效率。
78.本实施例中,通过获取数据处理请求,而后基于数据处理请求生成一缓冲区,并基于缓冲区进行数据处理操作,从而获得与数据处理请求相对应的数据处理结果,这样有效地保证了数据处理操作的稳定可靠性,进一步提高了该数据处理方法的实用性。
79.图8为本技术实施例提供的又一种数据处理方法的流程示意图;参考附图8所示,在通过缓冲区获取与数据读取请求相对应的预取数据之前,本实施例中的方法还可以包括:步骤s1001:基于数据库中每个数据文件所对应的统计信息和数据读取请求对数据库中的所有数据文件进行筛选,获得筛选后文件。
80.步骤s1002:在筛选后文件中,确定用于预取至缓冲区的预取数据。
81.在通过缓冲区获取与数据读取请求相对应的预取数据之前,为了保证预取数据获取的质量和效率,则可以先基于数据库中每个数据文件所对应的统计信息和数据读取请求对数据库中的所有数据文件进行筛选,从而可以获得筛选后文件。在一些实例中,基于数据库中每个数据文件所对应的统计信息和数据读取请求对数据库中的所有数据文件进行筛选,获得筛选后文件可以包括:基于数据读取请求确定读取数据类型和读取数据大小;基于每个数据文件所对应的统计信息、读取数据类型和读取数据大小对数据库中的所有数据文件进行筛选,获得筛选后文件,筛选后文件中的至少部分数据满足读取数据类型和读取数据大小。
82.其中,数据读取请求中包括有读取数据类型和读取数据大小,在获取到数据读取请求之后,可以对数据读取请求进行分析处理,以确定数据读取请求中所包括的读取数据类型和读取数据大小。在获取到读取数据类型和读取数据大小之后,可以结合每个数据文件所对应的统计信息对数据库中的所有数据文件进行筛选,这样可以获得至少存在部分数据满足读取数据类型和读取数据大小的筛选后文件,从而有效地实现了对数据库中的数据进行初步筛选操作,降低了需要进行预取操作的数据文件数量。在获取到筛选后文件之后,可以在筛选后文件中确定用于预取至缓冲区的预取数据,该预取数据可以为筛选后文件中的至少一部分。
83.举例来说,数据读取请求为获取年纪为25岁到30岁的所有员工信息的请求时,若数据库中包括数据文件1、数据文件2、数据文件3和数据文件4,数据文件1中所有员工的年纪范围为20岁到24岁,数据文件2中所有员工的年纪范围为35岁到45岁,数据文件3中所有员工的年纪范围为20岁到40岁,数据文件4中所有员工的年纪范围为25岁到35岁。在获取到
上述数据读取请求时,在通过缓冲区获取与数据读取请求相对应的预取数据之前,则可以数据读取请求确定读取数据类型和读取数据大小,而后基于数据库中每个数据文件的统计信息、读取数据类型和读取数据大小来对数据库中所有的数据文件进行筛选,从而可以获得筛选后文件,此时,筛选后文件可以包括:数据文件3和数据文件4,其中,数据文件3和数据文件4中存在至少部分数据满足读取数据类型和读取数据大小。
84.在获取到数据文件3和数据文件4之后,可以基于数据文件3和数据文件4来确定用于预取至缓冲区的预取数据,该预取数据可以为筛选后文件中的至少一部分,从而有效地实现了对数据库中的数据进行初步筛选操作,保证了对筛选后文件进行获取的准确可靠性。
85.本实施例中,基于数据库中每个数据文件所对应的统计信息和数据读取请求对数据库中的所有数据文件进行筛选,获得筛选后文件,而后在筛选后文件中,确定用于预取至缓冲区的预取数据,有效地实现了对数据库中的数据进行初步筛选操作,而后在筛选后文件来确定用于预取至缓冲区中的预取数据,有效地降低了预取数据的数量,有利于提高数据处理的质量和效率。
86.图9为本技术实施例提供的基于缓冲区进行数据处理操作的流程示意图;参考附图9所示,本实施例提供了一种基于缓冲区进行数据处理操作的实现方式,具体的,本实施例中的基于缓冲区进行数据处理操作可以包括:步骤s1101:在将数据预取至缓冲区的过程中,若数据处理请求为数据写入请求时,则将缓冲区中的当前数据刷写到数据库中。
87.步骤s1102:基于数据写入请求在进行刷写之后的缓冲区中执行数据写入操作。
88.其中,在将数据预取至缓冲区的过程中,若数据处理请求为数据写入请求时,即在进行数据预取操作的过程中,用户存在新数据写入需求时,为了保证数据预取操作的稳定进行,则可以将缓冲区中的当前数据刷写到数据库中,而后基于数据写入请求在进行刷写之后的缓冲区中执行数据写入操作,这样有效地保证了数据预取操作和数据写入操作的稳定进行,进一步提高了数据处理方法使用的稳定可靠性。
89.本实施例中,在将数据预取至缓冲区的过程中,若数据处理请求为数据写入请求时,通过将缓冲区中的当前数据刷写到数据库中,而后基于数据写入请求在进行刷写之后的缓冲区中执行数据写入操作,这样有效地保证了数据预取操作和数据写入操作的稳定进行,进一步提高了数据处理方法使用的稳定可靠性。
90.图10为本技术实施例提供的另一种基于缓冲区进行数据处理操作的流程示意图;参考附图10所示,本实施例提供了另一种基于缓冲区进行数据处理操作的实现方式,具体的,本实施例中的基于缓冲区进行数据处理操作可以包括:步骤s1201:在将数据预取至缓冲区的过程中,若数据处理请求为数据写入请求时,则对缓冲区中的当前数据进行标注,获得标注信息。
91.步骤s1202:基于数据写入请求和标注信息对缓冲区中的数据进行处理。
92.其中,在将数据预取至缓冲区的过程中,若数据处理请求为数据写入请求时,即在进行数据预取操作的过程中,用户存在新数据写入需求时,为了保证数据预取操作的稳定进行,则对缓冲区中的当前数据进行标注,获得标注信息,而后基于数据写入请求和标注信息对缓冲区中的数据进行处理,这样有效地保证了数据预取操作和数据写入操作的稳定进
行,进一步提高了数据处理方法使用的稳定可靠性。
93.本实施例中,在将数据预取至缓冲区的过程中,若数据处理请求为数据写入请求时,通过对缓冲区中的当前数据进行标注,获得标注信息,而后基于数据写入请求和标注信息对缓冲区中的数据进行处理,这样有效地保证了数据预取操作和数据写入操作的稳定进行,进一步提高了数据处理方法使用的稳定可靠性。
94.图11为本技术实施例提供的又一种数据处理方法的流程示意图;在上述任意一个实施例的基础上,参考附图11所示,在确定数据文件在不同文件粒度上的统计信息之后,本实施例中的方法还可以包括:步骤s1301:生成不同文件粒度的统计信息各自对应的信息缓冲区,不同的统计信息所对应的信息缓冲区相互独立。
95.步骤s1302:基于信息缓冲区对数据文件在不同文件粒度上的统计信息进行隔离缓存。
96.其中,在确定数据文件在不同文件粒度上的统计信息之后,为了避免数据扫描过程中获取不同粒度的统计信息产生相互影响,可以生成不同文件粒度的统计信息各自对应的信息缓冲区,需要注意的是,不同的统计信息所对应的信息缓冲区相互独立,而后基于信息缓冲区对数据文件在不同文件粒度上的统计信息进行隔离缓存,从而有效地实现了能够对数据文件在不同文件粒度上的统计信息进行隔离缓存,这样可以避免数据扫描过程中的相互影响,进一步保证了数据处理方法运行的稳定可靠性。
97.具体应用时,本应用实施例提供了一种数据处理方案,该数据处理方案可以包括:(1)adb pg云原生版的表存储方法及其相应优化方案;(2)对存储格式对应的数据写入时的数据缓冲方法及其在查询时的可见性判断;(3)对存储格式对应的数据读取时的缓存方法及其淘汰策略。
98.具体的,由于adb pg云原生版是基于append

only存储介质实现的,与普通的linux 块设备(如本地磁盘)不同,append

only的存储介质不支持写入数据的修改操作,因此,需要为其使用特定的存储格式,该存储格式能够满足存储介质所具有的追加数据流写的特性,在一些实例中,可以选用apache orc格式或者parquet格式作为存储格式的基准,其中,orc的基本格式如图3所示,其作为一种较成熟的开原格式,有较广泛的生产应用、较活跃的社区,较宽松的apache2.0开源协议,并且,orc格式通常适用于比较规整的二维表的应用场景,即数据表中有行有列,并且行数和列数不太多,数据表中的空值不太多;而parquet格式通常适用于半结构化的文档型数据,文档型数据中的列数较多,并且绝大部分的数据列为空值。需要注意的是,adb pg是一个关系型数据库,而不是文档型的数据库,文档的列数不会太多,所以可以选用orc格式作为存储格式,另外,orc格式也可以应用于数据较为稀疏的情况,此时,在基于orc格式进行数据处理时,可以在orc里面存储一个json文档,该json文档可作为索引信息,以适用于数据较稀疏的应用场景。
99.基于上述所配置的数据库相关信息,本实施例中的数据存储方法可以包括如下步骤:步骤1:获取待存储数据表。
100.其中,获取用户输入的用于存储在数据库中的数据,数据以表格形式进行存储,即获取到待存储数据表。
101.步骤2:将待存储数据表分为多个orc文件,以orc文件存储于append

only存储介质(数据库)上。
102.其中,获取用户针对append

only存储介质所输入的数据,数据可以以表格形式存储,即获取到待存储数据表,为了能够保证数据存储的质量和效率,可以将待存储数据表划分为多个orc文件,具体的,可以统计用户输入数据的行数信息,基于行数信息将待存储数据表划分为多个orc文件,例如:在用户输入10万行数据时,可以将每1万行数据划分为一个orc文件,从而可以生成多个orc文件。需要注意的是,当用户一次输入的数据不满1万行时,则可以将用户一次输入的数据生成一过渡orc文件,在用户多次进行数据输入操作时,则可以基于每次进行数据操作生成对应的过渡orc文件,而后可以将多个过渡orc文件生成一个数据量比较大的orc文件,并将orc文件存储在数据库中。
103.另外,对于orc文件而言,为了能够提高数据处理的质量和效率,可以进一步将orc文件划分为多个文件块stripe,每个文件块stripe可以分为多个行组文件row group。具体的,获取用于对orc文件进行划分操作的参数信息,该参数信息可以为64mb、200mb或者400mb等等,而后基于参数信息将orc文件划分为多个固定大小的文件块。对于文件块而言,可以将每个文件块划分为多个行组文件,具体的,获取用于对文件块进行划分操作的参数信息,该参数信息可以为设定行数,而后基于参数信息将文件块划分为多个固定行数的行组文件row group。
104.步骤3:确定待存储数据表在不同文件粒度上的统计信息,文件粒度包括:与orc文件相对应的第一粒度、与文件块相对应的第二粒度、与行组文件相对应的第三粒度。
105.其中,统计信息可以包括以下至少之一:表数据类型信息、列最大值、列最小值、所在列的数据和值、非空值的数量、用于确定是否存在某一值的标识信息。对于统计信息中所包括的“用于确定是否存在某一值的标识信息”而言,若用于确定在某一范围内是否存在数据a的标识信息为用于标识确定不存在数据a的信息,则可以准确地确定某一范围内并不存在数据a;若用于确定在某一范围内是否存在数据a的标识信息为用于标识存在数据a的信息,则需要对上述数据范围进行进一步的数据分析处理,以准确判断在数据范围内是否存在数据a。
106.步骤4:将待存储数据和统计信息存储至数据库。
107.由于统计信息可以包括整文件级别、文件块级别、行组文件级别的统计信息,因此,在读取orc文件时,可以先读取上述统计信息,而后根据统计信息过滤掉一定不会命中数据查询条件的orc文件、文件块和行组文件,从而有利于减少数据的读取量和扫描量。
108.另外,在使用原生orc格式的基础上,可以对用于存储在数据库中的数据进行优化处理,具体可以包括:1、行严格排序写入。
109.在用户建表时,可以获取用户指定的排序列(sort key),排序列可以为一个或多个列,具体的,在用户进行建表时,可以生成一内存缓冲区,而后使得写入到内存缓冲区中用于生成orc文件的数据都按照指定的排序列进行行排序操作,即在每次写入orc文件之前,将在内存缓冲区中进行缓存数据进行行排序,这样保证了在进行数据查询操作时,orc文件的统计信息能够具有较好的数据过滤效果。
110.2、列顺序重排。
111.在用户建表时,由于数据表所给定的列顺序无法预知,其给定顺序可能对存储不够友好(例如,由于数据列的长度大小交错,这样在进行数据读取操作时,容易产生较多次数的读取请求),故在表定义时,可以对列进行重新排序。具体的,列重新排序可以按照如下规则:(1)指定的数据列位于定长的数据列之前,即将用户指定的能够经常读取或者访问到的数据放置在其他数据之前;(2)定长的列放在变长的列之前;(3)定长的列中长度较小的列放在长度较大的列之前;(4)同样长度的定长列次序按照用户输入排列。
112.另外,在将定长列放在变长列之前,在不涉及变长列时,可以简化一个行组文件内的起始偏移计算;将小列放在大列之前,可以对小的数据列进行聚合处理,这样可以大幅减少对于小的数据列上的零散io请求,提高io请求的效率,这在append

only存储介质的io延迟较高时尤其重要。
113.3、并发异步读取。
114.由于append

only存储介质的io延迟较高,在每次需要读取数据时,为了避免读取数据会造成高延时以及数据处理时间(cpu时间)的浪费,本技术方案可以从两个方面解决此问题:(1)使用并发读取减少数据处理时间的浪费;(2)使用异步读取、提前预取的方式来解决io延迟的问题。具体的,参考附图12所示,数据预取操作可以包括以下步骤:步骤3.1:执行器向数据预取算子(seqscan算子)发送获取下一批数据请求。
115.具体的,在获取到数据读取请求时,可以基于数据读取请求确定数据批次请求,数据批次请求可以包括当前批数据请求和下一批数据请求。举例来说,若数据读取请求为查询年纪大于10的所有用户的姓名时,则在数据预取算子获取到上述数据读取请求之后,可以生成数据读取请求相对应的数据读取任务,并可以基于数据读取任务确定相对应的数据批次请求,例如:数据库里有10万行数据,则可以基于数据读取任务确定用于实现每次取1000行数据所对应的数据批次请求,此时,数据批次请求的数量为100000/1000=100,即执行器需要向数据预取算子发送10次数据批次请求,数据预取算子可以基于数据批次请求向数据库进行9次数据预取操作,往复进行数据的预取操作,直至获取到满足数据读取任务的所有数据为止。
116.步骤3.2:数据预取算子获取到下一批数据请求之后,则可以返回与下一批数据请求相对应的预取数据,具体的,可以将预取数据存储在内存缓冲区内,从而有效地实现了数据预取操作。
117.4、跨存储类型的兼容性。
118.其中,本实施例中的存储架构能够提供支持orc文件的读写接口,该读写接口与底层的append

only存储介质解耦合,数据的读写缓存方法也与底层的存储介质解耦合,仅需要底层存储实现流式写、可定位(seekable)流式读的接口,即可以适配到不同类型的存储类型。除现在已支持的云存储对象oss,针对公有云还可对接pangu、dbfs等,针对私有云还可对接hdfs、ceph等,从而有效地实现了通过配置的读写接口,可以适配不同的存储类型,进一步拓展了该存储架构使用的灵活可靠性。
119.另外,在获取到数据处理请求时,本实施例中的数据处理方法可以包括如下步骤:步骤10:获取数据写入请求。
120.步骤11:基于数据写入请求生成一缓冲区,缓冲区用于存储与数据写入请求相对应的数据。
121.步骤12:基于缓冲区进行数据处理操作,获得数据处理结果。
122.其中,为了解决在同一个事务中反复插入单行数据,每次插入都生成新的orc文件而导致文件数量膨胀的问题,在同一个事务内部,用户对同一个表的插入、修改、删除都将经过一个内存缓冲区。该缓冲区在事务开始时生成,缓冲区的大小可以基于数据库的特性进行配置,例如:在数据库为云对象存储oss时,缓冲区的大小可以为16mb;另外,在缓冲区满或事务提交时,可以将缓冲区中的数据刷写到数据库上。
123.步骤20:获取数据删除请求。
124.步骤21:在缓冲区中确定与数据删除请求相对应的待删除数据。
125.步骤22:对待删除数据添加删除标记,添加有删除标记的数据在缓冲区内不可见。
126.其中,在执行同一个事务内部时,用户可能执行多个插入、更新、删除、查询语句,可以不断维护缓冲区内数据的可见性。具体的,在需要对数据进行删除操作时,则可以将已删除的数据添加删除标记,添加有删除标记的数据在缓冲区内不可见,未添加有删除标记的数据在缓冲区内可见。举例来说,在用户进行了多次数据写入操作,在第一次用户写入2000行,删除500行,即将500行数据添加删除标识,此时,缓冲区内的数据为剩余的1500行,若用户再写入8000行时,此时,缓冲区内的数据为9500行,被删除的数据并不可见。这样有效地实现了通过对缓冲区内的数据添加删除标识,能够保证位于缓冲区内的数据状态为数据更新后的状态。
127.具体的,缓冲区的简化定义可以包括如下过程:存放当前缓冲区里的行数;存放缓冲区数据(先按列存储,再按行存储);指示数据是否为null(先按列存储,再按行存储);指示缓冲区中的每一行是否已经在当前事务中被删除(按行存储)。
128.另外,为了维护缓冲区中数据的可见性判断,可以利用以下规则进行标识:第一、缓冲区内所有数据对当前事务是可见的,被标记了“已删除”的行除外。第二、每当缓冲区满时,缓冲区会被刷写为数据库(如oss)上的一个orc文件,该文件对当前事务是可见的。当缓冲区刷写到oss上时(无论因为缓冲区满还是事务提交),已经删除的行会被跳过,保证每次新刷写到 oss 上的文件总是没有已删除行的。第三、缓冲区中的数据更改是通过标记原始行“已删除”并新增行实现的。第四、注意到写入缓冲区的生命周期是整个事务,而数据预取算子的生命周期是单条sql(单个执行计划)。如果缓冲区中有数据,则在一次数据预取算子进行数据读取操作的过程中,缓冲区中的数据不能新增或删除,否则新增或删除的数据的可见性无法正确处理,这要求如果在进行数据预取操作的过程中会新写入数据,在数据预取操作开始前,将缓冲区中的数据进行刷盘操作,之后数据预取操作能够忽略未来缓冲区(可能新增的)数据。
129.另外,考虑一种应用场景:将表t的内容重复扩增一倍,在seqscan算子之前须将缓冲区刷盘。考虑在扫描表t时使用游标,在使用游标的同时,可能对表t有插入或删除,故在创建游标时,也可以将缓冲区中的数据进行刷盘操作。
130.第五、写入缓冲区中表的属性(列)定义是固定的,如果在事务中存在数据定义语言(ddl)语句,例如:对已插入的表新增/删除列,则可以将已有的缓冲区数据进行刷盘操作,关闭当前的缓冲区,并新建另一个缓冲区,这种情况下写入新建缓冲区的生命周期可能只是一个完整事务的一部分,这样有利于提升数据处理的质量和效率。
131.另外,在数据处理请求为数据读取请求时,本实施例中的数据处理方法可以包括:
步骤30:获取数据读取请求。
132.步骤31:确定数据库中每个数据文件所对应的统计信息和数据读取请求所对应的读取数据类型和读取数据大小。
133.步骤32:基于每个数据文件所对应的统计信息、读取数据类型和读取数据大小对数据库中的所有数据文件进行筛选,获得筛选后文件,筛选后文件中的至少部分数据满足读取数据类型和读取数据大小。
134.当需要数据扫描操作时,谓词将被下推到存储层,具体的,对数据库中的每个orc文件而言,可以在orc文件级别、文件块级别、行组文件级别分别将谓词与统计信息进行检验,如果统计信息表明该orc文件/文件块/行组文件没有命中与数据读取请求相对应的条件时,则可以跳过对上述orc文件/文件块/行组文件的内容的读取操作。为了保证对统计信息进行快速读取操作,本实施例中参考了linux 的页面缓存机制,设计了与底层介质无关的内存只读缓存,而后可以将统计信息存储在上述内存只读缓存中。另外,在具体实施中,能够为流式读取接口增加读取类型type参数,以表明当前读取数据的数据类型,流式读取接口的配置信息可以包括与文件所对应的每个级别的统计信息(数据文件级统计信息

file_statistics,文件块级统计信息

stripe_statistics, 行组文件级统计信息rowgroup_statistics,data类型表数据)而言,可以采用相互隔离的缓存区对上述不同级别的统计信息进行存储,这样可以有效地避免数据扫描过程中的互相影响。
135.需要注意的是,对于每种统计信息所对应的缓存区,其总内存大小固定,内部可以按页管理。另外,本实施例的技术方案支持利用缓存查找算法和缓存替换算法进行相应的数据处理操作,其中,缓存查找算法是指:对每个orc文件,使用哈希表查找其对应的缓存记录;若命中缓存,则可以直接通过缓存获取orc文件;若没有命中缓存,则通过数据库获取orc文件。在一个orc文件内部,缓存文件级别统计信息的页面数量较少(通常仅1页),可以使用单链表管理;缓存的stripe和row group的页面可以使用红黑树管理。
136.缓存替换算法:记录每个缓存页的使用次数,使用时钟算法替换未使用的页面,简单来说,对于缓存区中的数据而言,在缓冲区写满需要进行数据替换操作时,可以使用新的数据替换老的数据,即用最近被访问的数据替换长时间未经过访问操作的数据,从而有效地实现了对缓冲区中的数据进行更新替换。
137.步骤33:在筛选后文件中,确定与数据读取请求相对应的数据读取结果。
138.本应用实施例提供的技术方案,有效地实现了使用行列混存的方式对数据进行存储,这样可以有效地避免文件数量的爆炸,另外,该技术方案基于orc存储格式实现oss定制优化方案,这样可以提高数据处理性能,在对数据进行存储时,可以先对数据进行行排序和列排序操作,有效地实现了以排序为中心,结合不同粒度的统计信息对数据进行存储操作,这样保证了在进行数据扫描时,不同粒度的统计信息具有高效的利用率,此外,在进行数据读取操作和数据写入操作时,可以生成一缓冲区,而后使用缓冲区进行数据读取操作和数据写入操作,这样可以有效地保证orc文件数量不膨胀,同时写入缓冲区支持事务指定的隔离级别(rc,rr,si)和可见性判断,并且使用读入缓存能够保证大部分的统计信息读取都将直接命中内存,并且,读入缓存与底层存储无关,这样在不同的存储介质之间可以进行简单移植操作,实现了一个高性能、高效率的云原生存储及缓存架构,进一步保证了该技术方案
使用的灵活可靠性。
139.图13为本技术实施例提供的一种数据处理装置的结构示意图;参考附图13所示,本实施例提供了一种数据处理装置,该数据处理装置可以执行上述图2所示的数据处理方法,具体的,该数据处理装置可以包括:获取模块11,用于获取待存储数据,待存储数据用于持久化存储至数据库;生成模块12,用于基于待存储数据生成至少一个数据文件,其中,每个数据文件包括至少一个文件块,每个文件块中包括多个行组文件,且数据文件为支持数据追加写和行列混存的存储格式;确定模块13,用于确定数据文件在不同文件粒度上的统计信息,文件粒度包括:与数据文件相对应的第一粒度、与文件块相对应的第二粒度、与行组文件相对应的第三粒度;处理模块14,用于将待存储数据和统计信息存储至数据库。
140.在一些实例中,统计信息包括以下至少之一:表数据类型信息、列最大值、列最小值、所在列的数据和值、非空值的数量、用于确定是否存在某一值的标识信息。
141.在一些实例中,在生成模块12基于待存储数据生成至少一个数据文件时,该生成模块12用于执行:获取待存储数据的数据行数和用于标识文件块大小的参数信息;在数据行数大于或等于设定阈值时,则将数据行数相对应的待存储数据生成一数据文件;基于参数信息将数据文件划分为多个文件块。
142.在一些实例中,在基于待存储数据生成至少一个数据文件之前,本实施例中的获取模块11和处理模块14用于执行以下步骤:获取模块11,用于获取待存储数据中需要进行排序的至少一个排序列;处理模块14,用于基于至少一个排序列对待存储数据进行行排序,获得排序后数据。
143.在一些实例中,在基于待存储数据生成至少一个数据文件之前,本实施例中的获取模块11和处理模块14用于执行以下步骤:获取模块11,用于获取用于对待存储数据进行列排序的设定规则;处理模块14,用于基于设定规则对待存储数据进行列排序,获得排序后数据。
144.在一些实例中,设定规则包括:指定的数据列位于定长的数据列之前;定长的数据列位于变长的数据列之前;定长的列中长度较小的数据列位于长度较大的数据列之前;同样长度的定长列按照数据的输入次序进行排列。
145.在一些实例中,本实施例中的获取模块11、生成模块12和处理模块14用于执行以下步骤:获取模块11,用于获取数据处理请求;生成模块12,用于基于数据处理请求生成一缓冲区,缓冲区用于存储与数据处理请求相对应的数据;处理模块14,用于基于缓冲区进行数据处理操作,获得与数据处理请求相对应的数据处理结果。
146.在一些实例中,在处理模块14基于缓冲区进行数据处理操作,获得与数据处理请求相对应的数据处理结果时,该处理模块14用于执行:在数据处理请求包括数据读取请求时,通过缓冲区获取与数据读取请求相对应的预取数据,并确定用于预取至缓冲区的位于
预取数据之后的下一批数据;将下一批数据预取至缓冲区,以作为预取数据;基于缓冲区获得的所有数据,确定与数据读取请求相对应的数据读取结果。
147.在一些实例中,在通过缓冲区获取与数据读取请求相对应的预取数据之前,本实施例中的处理模块14用于执行:基于数据库中每个数据文件所对应的统计信息和数据读取请求对数据库中的所有数据文件进行筛选,获得筛选后文件;在筛选后文件中,确定用于预取至缓冲区的预取数据。
148.在一些实例中,在处理模块14基于数据库中每个数据文件所对应的统计信息和数据读取请求对数据库中的所有数据文件进行筛选,获得筛选后文件时,该处理模块14用于执行:基于数据读取请求确定读取数据类型和读取数据大小;基于每个数据文件所对应的统计信息、读取数据类型和读取数据大小对数据库中的所有数据文件进行筛选,获得筛选后文件,筛选后文件中的至少部分数据满足读取数据类型和读取数据大小。
149.在一些实例中,在处理模块14基于缓冲区进行数据处理操作时,该处理模块14用于执行:在数据处理请求为数据删除请求时,则在缓冲区中确定与数据删除请求相对应的待删除数据;对待删除数据添加删除标记,添加有删除标记的数据在缓冲区内不可见。
150.在一些实例中,在处理模块14基于缓冲区进行数据处理操作时,该处理模块14用于执行:在数据处理请求为表结构修改请求时,则将缓冲区中的数据刷写至数据库中;删除缓冲区,并生成与表结构修改请求相对应的新建缓冲区;基于新建缓冲区进行数据处理操作。
151.在一些实例中,在处理模块14基于缓冲区进行数据处理操作时,该处理模块14用于执行:在缓冲区的数据量大于或等于预设阈值时,将缓冲区中的数据刷写到数据库中;在数据处理请求为事务提交请求时,则基于事务提交请求将缓冲区中的数据刷写到数据库中。
152.在一些实例中,在处理模块14基于缓冲区进行数据处理操作时,该处理模块14用于执行:在将数据预取至缓冲区的过程中,若数据处理请求为数据写入请求时,则将缓冲区中的当前数据刷写到数据库中;基于数据写入请求在进行刷写之后的缓冲区中执行数据写入操作。
153.在一些实例中,在处理模块14基于缓冲区进行数据处理操作时,该处理模块14用于执行:在将数据预取至缓冲区的过程中,若数据处理请求为数据写入请求时,则对缓冲区中的当前数据进行标注,获得标注信息;基于数据写入请求和标注信息对缓冲区中的数据进行处理。
154.在一些实例中,在确定数据文件在不同文件粒度上的统计信息之后,本实施例中的生成模块12和处理模块14用于执行以下步骤:生成模块12,用于生成不同文件粒度的统计信息各自对应的信息缓冲区,不同的统计信息所对应的信息缓冲区相互独立;处理模块14,用于基于信息缓冲区对数据文件在不同文件粒度上的统计信息进行隔离缓存。
155.图13所示装置可以执行图1

图12所示实施例的方法,本实施例未详细描述的部分,可参考对图1

图12所示实施例的相关说明。该技术方案的执行过程和技术效果参见图1

图12所示实施例中的描述,在此不再赘述。
156.在一个可能的设计中,图13所示数据处理装置的结构可实现为一电子设备,该电子设备可以是手机、平板电脑、服务器等各种设备。如图14所示,该电子设备可以包括:第一处理器21和第一存储器22。其中,第一存储器22用于存储相对应电子设备执行上述图1

图12所示实施例中提供的数据处理方法的程序,第一处理器21被配置为用于执行第一存储器22中存储的程序。
157.程序包括一条或多条计算机指令,其中,一条或多条计算机指令被第一处理器21执行时能够实现如下步骤:获取待存储数据,待存储数据用于持久化存储至数据库;基于待存储数据生成至少一个数据文件,其中,每个数据文件包括至少一个文件块,每个文件块中包括多个行组文件,且数据文件为支持数据追加写和行列混存的存储格式;确定数据文件在不同文件粒度上的统计信息,文件粒度包括:与数据文件相对应的第一粒度、与文件块相对应的第二粒度、与行组文件相对应的第三粒度;将待存储数据和统计信息存储至数据库。
158.进一步的,第一处理器21还用于执行前述图1

图12所示实施例中的全部或部分步骤。
159.其中,电子设备的结构中还可以包括第一通信接口23,用于电子设备与其他设备或通信网络通信。
160.另外,本发明实施例提供了一种计算机存储介质,用于储存电子设备所用的计算机软件指令,其包含用于执行上述图1

图12所示方法实施例中数据处理方法所涉及的程序。
161.此外,本发明实施例提供了一种计算机程序产品,包括:存储有计算机指令的计算机可读存储介质,当计算机指令被一个或多个处理器执行时,致使一个或多个处理器执行上述图1

图12所示方法实施例中数据处理方法中的步骤。
162.以上所描述的装置实施例仅仅是示意性的,其中作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性的劳动的情况下,即可以理解并实施。
163.通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到各实施方式可借助加必需的通用硬件平台的方式来实现,当然也可以通过硬件和软件结合的方式来实现。基于这样的理解,上述技术方案本质上或者说对现有技术做出贡献的部分可以以计算机产品的形式体现出来,本技术可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、cd

rom、光学存储器等)上实施的计算机程序产品的形式。
164.本技术是参照根据本技术实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程设备的处理器以产生一个机
器,使得通过计算机或其他可编程设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
165.这些计算机程序指令也可存储在能引导计算机或其他可编程设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
166.这些计算机程序指令也可装载到计算机或其他可编程设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
167.在一个典型的配置中,计算设备包括一个或多个处理器 (cpu)、输入/输出接口、网络接口和内存。
168.内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器 (ram) 和/或非易失性内存等形式,如只读存储器 (rom) 或闪存(flash ram)。内存是计算机可读介质的示例。
169.计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存 (pram)、静态随机存取存储器 (sram)、动态随机存取存储器 (dram)、其他类型的随机存取存储器 (ram)、只读存储器 (rom)、电可擦除可编程只读存储器 (eeprom)、快闪记忆体或其他内存技术、只读光盘只读存储器 (cd

rom)、数字多功能光盘 (dvd) 或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体 (transitory media),如调制的数据信号和载波。
170.最后应说明的是:以上各实施例仅用以说明本技术的技术方案,而非对其限制;尽管参照前述各实施例对本技术进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本技术各实施例技术方案的范围。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1