数据入库处理方法、装置、计算机设备和存储介质
技术领域
本申请涉及数据库技术领域,特别是涉及一种数据入库处理方法、装置、计算机设备和存储介质。
背景技术
数据库在进行数据入库时,通常会有大量的数据通过消息队列发到数据库的存储上。数据库对数据的需求具有实时性,需要在很短的数据延迟就可以在数据库查询到已入库数据。
目前技术中,通常采用流式处理入库技术处理消息队列的新增数据,将获得的数据准时地写入数据库的存储中。当增量数据的速率变动较大时,通常会导致资源浪费或者资源不足,影响数据入库处理的效率。
发明内容
基于此,有必要针对目前技术中存在的数据入库处理效率低的技术问题,提供一种数据入库处理方法、装置、计算机设备和存储介质。
一种数据入库处理方法,所述方法包括:
根据至少一个历史窗口对接收到的数据的处理耗时,得到目标窗口的等待时间;以及根据所述至少一个历史窗口的处理数据量,得到所述目标窗口的窗口时间;根据所述等待时间和所述窗口时间,生成所述目标窗口;所述等待时间表征上一个窗口结束至所述目标窗口产生的时间间隔,所述窗口时间表征所述目标窗口获取到的数据的时间区间;
接收待入库数据;
将所述待入库数据发送给目标窗口进行处理,获取所述目标窗口处理后的目标存储数据;将所述目标存储数据存储至数据库。
在其中一个实施例中,所述根据至少一个历史窗口对接收到的数据的处理耗时,得到目标窗口的等待时间;以及根据至少一个历史窗口的处理数据量,得到所述目标窗口的窗口时间,包括:
根据所述至少一个历史窗口的处理耗时与耗时阈值的对比结果,确定所述等待时间;
根据所述至少一个历史窗口的处理数据量与数据量阈值的对比结果,确定所述窗口时间。
在其中一个实施例中,所述根据所述至少一个历史窗口的处理耗时与耗时阈值的对比结果,确定所述等待时间,包括:
获取所述至少一个历史窗口的等待时间;
若所述至少一个历史窗口的处理耗时的加权耗时小于或等于所述耗时阈值,确定大于所述至少一个历史窗口的参照等待时间的时间值,作为所述等待时间;
若所述至少一个历史窗口的处理耗时的加权耗时大于所述耗时阈值,确定小于或等于所述至少一个历史窗口的参照等待时间的时间值,作为所述等待时间。
在其中一个实施例中,所述根据所述至少一个历史窗口的处理数据量与数据量阈值的对比结果,确定所述窗口时间,包括:
获取所述目标窗口的初始窗口时间;
若所述至少一个历史窗口的处理数据量大于所述数据量阈值,增大所述初始窗口时间,得到所述窗口时间。
在其中一个实施例中,所述接收待入库数据,包括:
根据所述窗口时间对应的时间区间内获取到的数据,得到所述待入库数据;
当所述目标窗口的上一个窗口处理结束,且所述等待时间经过,接收所述待入库数据。
在其中一个实施例中,所述将所述待入库数据发送给目标窗口进行处理,获取所述目标窗口处理后的目标存储数据,包括:
按照目标合并频率将所述待入库数据中的文件进行合并处理,得到列式存储的所述目标存储数据。
在其中一个实施例中,所述按照目标合并频率将所述待入库数据进行合并处理之前,所述方法还包括:
获取所述待入库数据的基准合并频率;
若所述历史窗口的数据处理量大于对应的处理频率阈值,降低所述基准合并频率,得到所述目标合并频率。
在其中一个实施例中,所述根据至少一个历史窗口对接收到的数据的处理耗时,得到目标窗口的等待时间;以及根据至少一个历史窗口的处理数据量,得到所述目标窗口的窗口时间,包括:
获取多个连续历史窗口的处理耗时;根据所述多个连续历史窗口的处理耗时和各自对应的权重,得到加权耗时;根据所述加权耗时与耗时阈值的对比结果,确定所述等待时间;
获取多个连续历史窗口的处理数据量;根据所述多个连续历史窗口的处理数据量和各自对应的权重,得到加权数据量;根据所述加权数据量与数据量阈值的对比结果,确定所述窗口时间。
在其中一个实施例中,所述根据所述多个连续历史窗口的处理耗时和各自对应的权重,得到加权耗时,包括:
获取所述多个连续历史窗口的等待时间;
若所述加权耗时小于或等于所述耗时阈值,以大于所述目标窗口的上一窗口的等待时间的时间值,作为所述等待时间;
若所述加权耗时大于所述耗时阈值,以小于或等于目标窗口的上一窗口的等待时间的时间值,作为所述等待时间。
在其中一个实施例中,所述根据所述多个连续历史窗口的处理数据量和各自对应的权重,得到加权数据量,包括:
获取所述目标窗口的初始窗口时间;
若所述加权数据量大于所述数据量阈值,增大所述目标窗口的初始窗口时间,得到所述窗口时间。
在其中一个实施例中,所述方法还包括:
若所述目标存储数据存储失败,记录所述目标存储数据的存储失败状态,并删除所述待入库数据;
若所述目标存储数据存储成功,记录所述目标窗口处理耗时和处理数据量,并记录所述待入库数据所在消息队列的消费偏移量。
一种数据入库处理装置,所述装置包括:
目标窗口模块,用于根据至少一个历史窗口对接收到的数据的处理耗时,得到目标窗口的等待时间;以及根据所述至少一个历史窗口的处理数据量,得到所述目标窗口的窗口时间;根据所述等待时间和所述窗口时间,生成目标窗口;所述等待时间表征上一个窗口结束至所述目标窗口产生的时间间隔,所述窗口时间表征所述目标窗口获取到的数据的时间区间;
数据接收模块,用于接收待入库数据;
数据处理模块,用于将所述待入库数据发送给目标窗口进行处理,获取所述目标窗口处理后的目标存储数据;数据存储模块,用于将所述目标存储数据存储至数据库。
一种计算机设备,包括存储器和处理器,所述存储器存储有计算机程序,所述处理器执行所述计算机程序时实现上述任一实施例中数据入库处理方法的步骤。
一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现上述任一实施例中数据入库处理方法步骤。
上述数据入库处理方法、装置、计算机设备和存储介质,根据至少一个历史窗口对接收到的数据的处理耗时和处理数据量,分别得到目标窗口的等待时间和窗口时间,生成目标窗口,通过接收待入库数据,并将待入库数据发送给目标窗口进行处理,得到目标存储数据,将该目标存储数据存储至数据库,其中,使得在进行待入库数据接收和处理时,能够根据历史窗口的处理情况及时调整目标窗口的处理策略,避免系统资源浪费,提高了数据入库处理的效率。
附图说明
图1为一个实施例中数据入库处理方法的应用环境示意图;
图2为一个实施例中数据入库处理方法的流程示意图;
图3为另一个实施例中数据入库处理方法的流程示意图;
图4为一个实施例中流式数据处理示意图;
图5为一个实施例中流式数据处理中,动态窗口机制示意图;
图6为一个实施例中数据湖的整体架构图;
图7为一个实施例中一次流式处理的流程示意图;
图8为一个实施例中动态窗口机制计算逻辑示意图;
图9为一个实施例中数据入库处理装置的结构框图;
图10为一个实施例中计算机设备的内部结构图。
具体实施方式
为了使本申请的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本申请进行进一步详细说明。应当理解,此处描述的具体实施例仅仅用以解释本申请,并不用于限定本申请。
本申请提供的数据入库处理方法,可以应用于如图1所示的应用环境中。其中,数据处理服务器102通过网络与数据库服务器106进行通信。数据处理服务器102可以接收待入库数据,并将数据进行处理后,发送给数据库服务器106进行存储。其中,数据处理服务器102和数据库服务器106可以用独立的服务器或者是多个服务器组成的服务器集群来实现。应当说明的是,在一些情况下,数据处理服务器102也可以配置在数据库服务器106中,实现待入库数据的处理。
在一个实施例中,如图1所示的应用环境中,还可以包括数据源104,该数据源104可以包括多个数据源。数据处理服务器102通过网络与数据源104进行通信,数据处理服务器102可以通过订阅消息队列的方式,从数据源104获取数据。
在一个实施例中,如图2所示,提供了数据入库处理方法,以该方法应用于图1的数据处理服务器102为例进行说明,包括以下步骤:
步骤S201,接收待入库数据。
其中,待入库数据可以是为连续到达的数据序列,也即流式数据。数据处理服务器102可以通过预设的数据接口或订阅消息队列的方式,接收该待入库数据。
步骤S202,将待入库数据发送给目标窗口进行处理,获取目标窗口处理后的目标存储数据。
其中,目标窗口的时间参数可以包括等待时间和窗口时间,等待时间和窗口时间可以根据至少一个历史窗口的处理耗时和处理数据量得到。等待时间可以表征上一个窗口结束至该目标窗口产生的时间间隔,等待时间可以用于确定目标窗口产生的时机,窗口时间可以表征该目标窗口获取到的待入库数据的时间区间,窗口时间可以用于确定需要由该目标窗口处理的待入库数据。流式数据具有连续性,历史窗口的处理耗时和处理数据量可以反映流式数据的数据量的变化趋势,数据处理服务器102可以根据数据至少一个历史窗口的数据处理耗时和数据处理量,判断未来数据量的大小,进而确定目标窗口的等待时间和窗口时间,以在合适的时间生成目标窗口,并在目标窗口接收并处理合适数量的待入库数据。
不同的数据库进行数据存储的逻辑不同,对应的数据查询、管理和使用的方式也不同。目标存储数据可以是符合数据库存储逻辑的数据,例如列式存储数据。数据处理服务器102可以根据数据库的存储逻辑,确定目标窗口内对该待入库数据进行处理的内容,该处理内容可以包括但不限于:增量数据提交、历史文件清理、文件合并、入库失败回滚以及数据入库状态记录等,以将获取到的待入库数据转化为数据库所能够进行存储的目标存储数据。在一些情况下,数据处理服务器102可以采用流式处理技术,将获取到的待入库数据写入到数据库中。
具体实现中,数据处理服务器102可以根据至少一个历史窗口的处理耗时和处理数据量,确定目标窗口的等待时间和窗口时间,生成目标窗口。在获取到待入库数据后,根据获取到该待入库数据的时间区间,发送至目标窗口,在该目标窗口内,按照对应的处理内容进行处理后,转化为目标存储数据。
步骤S203,将目标存储数据存储至数据库。
其中,数据库可以是基于列式存储的数据湖,该数据湖可以以原始格式存储数据,数据可以是按照列为基础逻辑存储单元进行存储,一列中的数据在存储介质中以连续存储形式存在。数据处理服务器可以将获取到的数据发送给数据库存储。
上述数据入库处理方法中,通过接收待入库数据,并将待入库数据发送给目标窗口进行处理,得到目标存储数据,将该目标存储数据存储至数据库,其中,目标窗口的时间参数包括等待时间和窗口时间,该等待时间和窗口时间是根据至少一个历史窗口的处理耗时和处理数据量得到,使得在进行待入库数据获取和处理时,能够根据历史窗口的处理情况及时调整处理策略,避免资源浪费,提高了数据入库处理的效率。
在一个实施例中,步骤S202中确定的接收待入库数据的步骤之前,还包括:
获取各个历史窗口对接收到的待入库数据的处理耗时;根据至少一个历史窗口的处理耗时与耗时阈值的对比结果,确定等待时间;获取各个历史窗口的处理数据量;根据至少一个历史窗口的处理数据量与数据量阈值的对比结果,确定窗口时间。
本实施例中,数据处理服务器102可以记录各个窗口的历史信息,该历史信息可以包括但不限于处理耗时、处理数据量、等待时间、入库成功或失败信息、记录当前订阅的消息队列的偏移量等。数据处理服务器102可以从存储模块调取历史窗口的处理耗时和处理数据量,并据此确定目标窗口的等待时间和窗口时间。例如,目标窗口的等待时间可以是5秒,窗口时间可以是10秒,可以理解为,当上一个窗口结束后,数据处理服务器102可以等待5秒后,产生目标窗口,该目标窗口用于处理过去10秒内接收到的数据。
窗口处理耗时可以用于判断单位时间内窗口处理的数据量,如数据量过低,则可以增加下一个窗口的等待时间,以增加获取到的数据量,提高计算效率。窗口的数据处理量可以用于判断待入库数据的到来速率,当数据到来的速率较大时,单位时间内获取的数据量较大,可以增加下一个窗口的窗口时间,以在一个窗口处理更多的数据。耗时阈值和数据量阈值可以根据经验、统计规律以及服务器参数等因素确定。
数据处理服务器102可以根据至少一个历史窗口的处理耗时与耗时阈值的对比结果,确定当处理耗时大于、小于或等于耗时阈值时,目标窗口的等待时间。也可以根据至少一个历史窗口的处理数据量与数据量阈值的对比结果,确定当处理数据量大于、小于或等于数据量阈值时,目标窗口的窗口时间。
在一些实施例中,等待时间和窗口时间可以设定上限,当获得的目标窗口的等待时间或窗口时间达到该上限时,则不再增加。
上述实施例的方案,通过将至少一个历史窗口的处理耗时和处理数据量与对应的耗时阈值和数据量阈值对比,根据对比结果确定目标窗口的等待时间和窗口时间,使得在进行目标窗口的时间参数设置时,考虑待入库数据的数据量变化趋势,提升了数据入库处理效率。
在一个实施例中,历史窗口可以是一个窗口。目标窗口可以是该历史窗口的下一个窗口。数据处理服务器102可以获取该历史窗口的处理耗时、处理数据量和历史窗口的等待时间,以及预先设置的耗时阈值和数据量阈值。若该历史窗口的处理耗时小于或等于耗时阈值,则说明该窗口的数据处理量较小,可以延长目标窗口等待时间,以接收更多的数据再一并处理,因此,数据处理服务器102可以确定大于该历史窗口的等待时间的时间值,作为目标窗口的等待时间。若该历史窗口的处理耗时大于耗时阈值,表明该窗口的数据处理量比较大,需要加快数据处理速度 ,数据处理服务器102可以确定小于或者等于该历史窗口的等待时间的时间值,作为目标窗口的等待时间。例如,该历史窗口的处理耗时小于或等于耗时阈值时,该历史窗口的等待时间为1秒,则目标窗口的等待时间可以是大于1秒的时间值,例如2秒;该历史窗口的处理耗时大于耗时阈值时,该历史窗口的等待时间为1秒,则目标窗口的等待时间可以是0秒,即可以不等待。
上述实施例的方案,数据处理服务器102将目标窗口的等待时间与历史窗口的处理耗时相关联,及时根据历史窗口的处理耗时,确定目标窗口的等待时间,合理安排是否等待以及等待时间,避免数据量少时浪费计算资源,也能够在数据量大时及时生成窗口进行处理,提高数据入库处理的效率。
在一个实施例中,历史窗口可以是一个窗口,目标窗口可以是该历史窗口的下一个窗口。目标窗口的初始窗口时间可以是数据处理服务器102预先为各个窗口设计的窗口时间,该初始窗口时间可以根据接收数据量的增量情况进行调整,数据到来速率增大时,增大窗口时间,提高每个窗口的处理数据量,减少入库刷新的次数,提高数据入库处理的效率。数据处理服务器102可以获取目标窗口的初始窗口时间作为窗口时间调整的基数。若历史窗口的处理数据量大于数据量阈值,则说明数据到来的速率较大,需要尽快处理数据并入库,数据处理服务器102可以增大目标窗口的初始窗口时间,得到该目标窗口的窗口时间。反之,当历史窗口的处理数据量小于或等于数据量阈值时,说明数据到来的速率一般,数据处理服务器102可以按照初始窗口时间接收数据。例如,若历史窗口的处理数据量大于数据量阈值,初始窗口时间是5秒,则可以将窗口时间设定为10秒。数据处理服务器102可以根据历史窗口的处理数据量和数据量阈值的关系,详细设定初始窗口时间与目标窗口的窗口时间的对应关系,旨在当数据到来速率增大时,能够在一个窗口处理较多的数据后,再存储到数据库,提高数据入库处理效率,此处不再一一举例。
在一个实施例中,历史窗口可以是多个连续历史窗口,目标窗口可以是该多个连续历史窗口的下一个窗口,多个连续历史窗口的处理耗时和处理量可以反映接收数据量的变化趋势。数据处理服务器102可以获取各个历史窗口处理耗时、处理数据量和等待时间以及预先设置的耗时阈值和数据量阈值。将各个历史窗口的处理耗时按照各自对应的权重进行加权后,得到加权后的处理耗时,与耗时阈值进行对比,确定目标窗口的等待时间。数据处理服务器102可以目标窗口的上一个窗口作为参照历史窗口,以该参照历史窗口的等待时间作为该至少一个历史窗口的参照等待时间,作为基准确定目标窗口的等待时间。
若加权后的处理耗时小于或等于耗时阈值,则说明多个连续窗口的数据处理量较小,可以延长目标窗口的等待时间,以接收更多的数据再一并处理,因此,数据处理服务器102可以确定大于该参照等待时间的时间值,作为目标窗口的等待时间。若加权后的处理耗时大于耗时阈值,表明多个连续窗口的数据处理量比较大,需要加快数据处理速度 ,数据处理服务器102可以确定小于或者等于该参照等待时间的时间值,作为目标窗口的等待时间。
例如,多个连续历史窗口的数量可以为5个,处理耗时依次为9秒、9秒、9秒、10秒和10秒,等待时间均为0秒(即上一窗口的等待时间为0秒),耗时阈值为10秒,各个历史窗口的处理耗时的权重相同,则加权后的处理耗时为9.4秒,处理耗时小于耗时阈值,由此可知,目标窗口的等待时间应当大于参照等待时间,可以设置为1秒。若多个连续历史窗口的处理耗时依次为9秒、10秒、10秒、11秒和12秒,等待时间依次为0秒、0秒、0秒、1秒和2秒(即上一窗口的等待时间为2秒),耗时阈值为10秒,各个历史窗口的处理耗时的权重相同,则加权后的处理耗时为10.4秒,处理耗时大于耗时阈值,由此可知,目标窗口的等待时间应当小于参照等待时间,例如可以设置为1秒,或者直接设置为0秒,无需等待即可生成目标窗口。
上述实施例的方案,数据处理服务器102将目标窗口的等待时间与多个连续历史窗口的处理耗时相关联,及时根据历史窗口的处理耗时的趋势,确定目标窗口的等待时间,合理安排是否等待以及等待时间,避免数据量少时浪费计算资源,也能够在数据量大时及时生成窗口进行处理,提高数据入库处理的效率。
在一个实施例中,历史窗口可以是多个连续历史窗口,目标窗口可以是该多个连续历史窗口的下一个窗口。数据处理服务器104可以获取目标窗口的初始窗口时间,并根据各个历史窗口的处理数据量进行加权处理,得到加权后的处理数据量。若多个连续窗口加权后的处理数据量大于数据量阈值,则说明数据到来的速率较大,需要尽快处理数据,提高每个窗口的处理数据量,减少入库刷新的次数,提高数据入库处理的效率。数据处理服务器102可以增大目标窗口的初始窗口时间,得到该目标窗口的窗口时间。反之,当历史窗口的加权后的处理数据量小于或等于数据量阈值时,说明数据到来的速率较低或呈现减小的趋势,数据处理服务器102可以按照初始窗口时间接收数据。例如,若多个连续历史窗口的加权后的处理数据量大于数据量阈值,初始窗口时间是5秒,则可以将窗口时间设定为10秒。数据处理服务器102可以根据历史窗口的处理数据量和数据量阈值的关系,详细设定初始窗口时间与目标窗口的窗口时间的对应关系,旨在当数据到来速率增大时,能够提高窗口的数据处理量,减少入库刷新的次数,提高数据入库处理效率,此处不再一一举例。
上述实施例的方案,数据处理服务器102将目标窗口的窗口时间与多个连续历史窗口的处理数据量相关联,及时根据多个连续历史窗口的处理数据量的趋势,确定目标窗口的窗口时间,使得在数据到来的速率变大时,能够在一个窗口进行处理以及向数据库存储,提高数据入库处理的效率。
在一个实施例中,步骤S201中接收待入库数据,包括:
根据窗口时间对应的时间区间内获取到的数据,得到待入库数据;当目标窗口的上一个窗口处理结束,且等待时间经过,接收待入库数据。
本实施例中,目标窗口的等待时间和窗口时间确定后,数据处理服务器102可以将目标窗口的窗口时间对应的时间区间内的数据,作为目标窗口对应的待入库数据。在等待时间经过后,数据处理服务器102可以生成目标窗口,并接收待入库数据。例如,若目标窗口的等待时间为5秒,窗口时间为10秒,则数据处理服务器102可以在上一个窗口结束后5秒,生成目标窗口,并将前10秒产生的数据发送给目标窗口进行处理。
上述实施例的方案,数据处理服务器102根据目标窗口的等待时间和窗口时间,生成目标窗口并接收待入库数据,提高待入库数据的接收效率。
在一个实施例中,步骤S202中将所述待入库数据发送给目标窗口进行处理,获取所述目标窗口处理后的目标存储数据的步骤,包括:
按照目标合并频率将待入库数据中的文件进行合并处理,得到列式存储的目标存储数据。
本实施例中,待入库数据中的文件可以是数据处理服务器102接收到待入库数据的小文件,以及待入库数据中本身携带的小文件,或其他需要进行合并的文件。在进行数据入库处理时,数据处理服务器102可以将获取到的待入库数据中的目标文件进行合并,得到列式存储数据,以符合数据湖的存储逻辑。数据处理服务器102可以根据业务需要,通过hive查询列式存储的目标存储数据,以及查询还没合并的目标文件。合并任务可是一个按照一定频率运行的独立程序,与窗口处理并行进行。合并频率可以是单位时间内待入库数据中的目标文件合并的次数,合并需要消耗处理器的计算资源,数据越多,需要进行合并的数据越多,所以可以通过降低合并频率节省计算资源。目标合并频率可以是根据历史窗口的处理数据量得到的对应的合并频率,以节省计算资源。数据处理服务器102可以预先设置历史窗口的处理数据量和目标合并频率的对应关系。
上述实施例的方案,通过按照目标合并频率合并得到的数据中的目标文件,得到列式存储的目标存储数据,提高数据处理的效率,节省计算资源。
在一个实施例中,按照目标合并频率将待处理数据中的文件进行合并处理之前,还包括:
获取待入库数据的基准合并频率;若历史窗口的数据处理量大于对应的处理频率阈值,降低基准合并频率,得到目标合并频率。
本实施例中,基准合并频率可以是数据处理服务器102初始设置的待入库数据中的文件的合并频率,处理频率阈值可以是历史窗口的数据处理量的临界值,当历史窗口的数据处理量大于该临界值时,数据处理量较大,需降低基准合并频率得到目标合并频率,以降低单位时间的文件合并次数,节约计算资源。反之,当历史窗口的数据处理量小于或等于该临界值时,则可以以基准合并频率作为目标合并频率进行文件的合并。
上述实施例的方案,当历史窗口的数据处理量大于处理频率阈值时,降低基准合并频率得到目标合并频率,节约计算资源。
在一个实施例中,若目标存储数据在数据库中存储失败,数据处理服务器102可以记录目标存储数据的存储失败状态,并删除待入库数据;若目标存储数据存储成功,数据处理服务器102可以记录目标窗口处理耗时和处理数据量,并记录待入库数据所在消息队列的消费偏移量。
在一个实施例中,如图3所示,提供了一种数据入库处理方法,该方法包括:
步骤S301,数据处理服务器102获取各个历史窗口对接收到的待入库数据的处理耗时;根据至少一个历史窗口的处理耗时与耗时阈值的对比结果,确定目标窗口的等待时间;获取各个历史窗口的处理数据量;根据至少一个历史窗口的处理数据量与数据量阈值的对比结果,确定目标窗口的窗口时间;其中,等待时间表征上一个窗口结束至所述目标窗口产生的时间间隔,窗口时间表征所述目标窗口获取到的待入库数据的时间区间。
步骤S302,根据窗口时间对应的时间区间内获取到的数据,得到待入库数据;当目标窗口的上一个窗口处理结束,且等待时间经过,接收该待入库数据。
步骤S303,将待入库数据发送给目标窗口进行处理,按照目标合并频率将待入库数据进行合并处理,得到列式存储的目标存储数据。
步骤S304,将目标存储数据存储至数据库。
上述实施例的方案,通过至少一个历史窗口的处理耗时和耗时阈值的对比结果,以及至少一个历史窗口的处理数据量与数据量阈值的对比结果,得到目标窗口的等待时间和窗口时间,根据窗口时间对应的时间区间内获取到的数据,得到待入库数据,并在目标窗口的上一个窗口结束,且等待时间经过时,接收待入库数据,进而将待入库数据发送到目标窗口进行处理,得到列式存储的目标存储数据,发送到数据库进行存储,通过历史窗口的处理耗时和处理数据量反应出来的数据到来趋势,确定目标窗口的等待时间和窗口时间,使得数据量较少时,增大等待时间,数据量较大时,降低等待时间,增大窗口时间,以节约计算资源,提高数据入库处理效率。
应该理解的是,虽然图2-3的流程图中的各个步骤按照箭头的指示依次显示,但是这些 步骤并不是必然按照箭头指示的顺序依次执行。除非本文中有明确的说明,这些步骤的执行并没有严格的顺序限制,这些步骤可以以其它的顺序执行。而且,图2-3中的至少一部分步骤可以包括多个步骤或者多个阶段,这些步骤或者阶段并不必然是在同一时刻执行完成,而是可以在不同的时刻执行,这些步骤或者阶段的执行顺序也不必然是依次进行,而是可以与其它步骤或者其它步骤中的步骤或者阶段的至少一部分轮流或者交替地执行。
为了更清晰阐述本申请提供的方案,以下将本申请上述实施例数据入库处理方法,应用于流式数据处理的场景进行说明,如图4至8所示。
图4为常规的流式数据处理示意图,有窗口的流式处理程序中,每当流式处理程序处理了一个窗口的数据,需要检查该数据的情况,然后将这个窗口的数据入库。
图5为一个流式数据处理中,动态窗口机制示意图,可以根据处理窗口之前的窗口的处理时间来动态计算下一次窗口的窗口时间和等待时间。当最近的入库数据条数很少的时候,程序会选择等待一段时候才开启下一个窗口,从而节省下与数据湖存储交互的资源,当最近数据量很大的时候,会立刻开启下一个窗口,并且加大窗口的时间,从而达到增加吞吐量的效果。
图6为数据湖的整体架构图。其中,Data Lake为数据湖,一个以原始格式存储数据的系统或存储库;Apache软件基金会(Apache Software Foundation,简称为ASF),是专门为支持开源软件项目而办的一个非营利性组织。在它所支持的Apache项目与子项目中,所发行的软件产品都遵循Apache许可证(Apache License)。Apache Spark 是由加利福尼亚大学伯克利分校AMP 实验室所开发的云端运算框架,用来构建大型的、低延迟的数据分析系统。Apache Hudi,Hudi是一个增量处理框架,可以以低延迟和高效率的方式支持所有业务关键数据管道,在查询方面,Hudi 支持 Hive、Spark、Presto。Kafka是一个快速、可扩展的、高吞吐、可容错的分布式发布订阅消息系统。Kafka具有高吞吐量、内置分区、支持数据副本和容错的特性,适合在大规模消息处理场景中使用。Apache Hive是一个构建于Hadoop顶层的数据仓库,可以将结构化的数据文件映射为一张数据库表,并提供简单的SQL查询功能,可以将SQL语句转换为MapReduce任务进行运行。亚马逊AWS(Amazon Web Services)是亚马逊提供的专业云计算服务,于2006年推出,以Web服务的形式向企业提供IT基础设施服务,通常称为云计算。Stream processing,流式处理,不同于批量计算模型,流式处理更加强调计算数据流和低延时,在数据湖数据入库的应用场景中,数据将源源不断写入数据存储,不需要预先加载的过程。MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发。Delta Streamer 可以不断地从上游拉取数据并写入Hudi,Delta Streamer 可以自动地触发小文件合并的任务。ETL( Extract-Transform-Load)的缩写,用来描述将数据从来源端经过抽取(extract)、转换(transform)、加载(load)至目的端的过程。IncrementalETL (增量ETL),其中,增量即将源库里的变动或新增的数据更新到目标库中。Raw IngestTables 为经过预处理后的原始数据表。Cassandra是一套开源分布式NoSQL数据库系统。HDFS (Hadoop分布式文件系统)是指被设计成适合运行在通用硬件(commodity hardware)上的分布式文件系统(Distributed File System)。分布式文件系统(DFS,DistributedFile System)可以将同一网络中的不同计算机上的共享文件夹组织起来,形成一个单独的、逻辑的、层次式的共享文件系统。云存储(Cloud Storage)是指通过集群应用、网格技术或分布式文件系统等功能,将网络中大量各种不同类型的存储设备通过应用软件集合起来协同工作,共同对外提供数据存储和业务访问功能的一个系统。Sqoop是一款开源的工具,主要用于在Hadoop(Hive)与传统的数据库(MySQL、postgresql等)间进行数据的传递,可以将一个关系型数据库(例如:MySQL 、Oracle、Postgres等)中的数据导进到Hadoop的HDFS中,也可以将HDFS的数据导进到关系型数据库中。
图7是流式处理的流程示意图。数据湖的目标存储是列式存储数据,从而导致处理过程涉及大量的小文件生成和合并,而这些操作都会消耗资源。在进行窗口数据处理时,步骤包括:
1. 订阅消息队列,使用技术例如kafka。
2. 通过流式处理数据,可以采用Spark streaming等。包括:a) 增量数据提交:将一小批数据写入临时的行式存储的提交文件中;b)历史文件清理:一个后台进程用于删除过期的临时文件;c)合并:将多个临时的增量提交文件合并成为一个列式存储文件;d) 回滚:如果一个提交失败了,将会记录状态,并且清理临时文件;e)记录状态:将提交成功的文件标记为“成功”,并且记录当前订阅的消息队列的偏移量,从而保证程序的幂等性。
3. 对于上批的处理数据的参数进行记录,并且计算出下次处理需要的资源量,包括但不限于等待时间、窗口时间和合并频率。
4. 使用数据可视化工具对存储的数据按照业务需要进行查询,使用技术例如Hive,为了保证数据的实时性能,Hive不仅会查询列式存储的文件,还会查询还没合并的临时文件。
图8为动态窗口机制中,计算逻辑示意图,具体包括:
1. 每次一个窗口的数据处理完毕的时候,服务器就会记录当此处理的耗时和此次接收的数据量(即数据条数)。
2. 计算最近5个窗口的耗时,如果耗时平均值低于设定的阈值,则会开始计算等待时间,该等待时间和历史等待耗时间有关,计算逻辑为如果连续出现耗时低于耗时阈值,下个窗口的等待时间会递增提高,直到达到预设的最大值。
3. 计算最近5次的数据量,如果耗时平均值高于设定的阈值,则会增加一个批次的窗口时间,该窗口时间和历史等待窗口有关,计算逻辑为如果连续平均值高于设定的阈值,下个窗口的窗口时间会递增提高,直到达到预设的最大值。
4. 计算最近5次的数据量,使用这个值来动态调整后台合并数据进程的频率。
经过测试,在使用了该方法之后,云存储的接口调用数量得到了大幅下降,在增量数据速率为一分钟10条的情况下,使用该方法可以节省约90%的云存储的查询成本,并且由于后台合并程序的优化,流式计算的负载也有得到降低。
在一个实施例中,如图9所示,提供了一种数据入库处理装置,该装置900包括:
数据接收模块901,用于接收待入库数据;
数据处理模块902,用于将待入库数据发送给目标窗口进行处理,获取目标窗口处理后的目标存储数据;目标窗口的等待时间和窗口时间根据至少一个历史窗口的处理耗时和处理数据量得到;等待时间表征上一个窗口结束至目标窗口产生的时间间隔,窗口时间表征目标窗口获取到的待入库数据的时间区间;
数据存储模块903,用于将目标存储数据存储至数据库。
在一个实施例中,数据接收模块901,还包括:时间参数获取单元,用于获取各个历史窗口对接收到的待入库数据的处理耗时;根据至少一个历史窗口的处理耗时与耗时阈值的对比结果,确定等待时间;获取各个历史窗口的处理数据量;根据至少一个历史窗口的处理数据量与数据量阈值的对比结果,确定窗口时间。
在一个实施例中,时间参数获取单元,还包括:等待时间单元,用于获取至少一个历史窗口的等待时间;若至少一个历史窗口的处理耗时小于或等于耗时阈值,确定大于至少一个历史窗口的等待时间的时间值,作为等待时间;若至少一个历史窗口的处理耗时大于耗时阈值,确定小于或等于历史窗口的等待时间的时间值,作为等待时间。
在一个实施例中,时间参数获取单元,还包括:窗口时间单元,用于获取目标窗口的初始窗口时间;若至少一个历史窗口的处理数据量大于数据量阈值,增大初始窗口时间,得到窗口时间。
在一个实施例中,数据接收模块901,还包括:数据获取单元,用于根据窗口时间对应的时间区间内获取到的数据,得到待入库数据;当目标窗口的上一个窗口处理结束,且等待时间经过,接收待入库数据。
在一个实施例中,数据处理模块902,还包括:合并单元,按照目标合并频率将待入库数据中的文件进行合并处理,得到列式存储的目标存储数据。
在一个实施例中,合并单元,还包括:获取待入库数据的基准合并频率;若历史窗口的数据处理量大于对应的处理频率阈值,降低基准合并频率,得到目标合并频率。
关于数据入库处理装置的具体限定可以参见上文中对于数据入库处理方法的限定,在此不再赘述。上述数据入库处理装置中的各个模块可全部或部分通过软件、硬件及其组合来实现。上述各模块可以硬件形式内嵌于或独立于计算机设备中的处理器中,也可以以软件形式存储于计算机设备中的存储器中,以便于处理器调用执行以上各个模块对应的操作。
本申请提供的数据入库处理方法,可以应用于计算机设备,该计算机设备可以是服务器,其内部结构图可以如图10所示。该计算机设备包括通过系统总线连接的处理器、存储器和网络接口。其中,该计算机设备的处理器用于提供计算和控制能力。该计算机设备的存储器包括非易失性存储介质、内存储器。该非易失性存储介质存储有操作系统、计算机程序和数据库。该内存储器为非易失性存储介质中的操作系统和计算机程序的运行提供环境。该计算机设备的数据库用于存储待入库数据、历史窗口的数据以及阈值数据。该计算机设备的网络接口用于与外部的终端通过网络连接通信。该计算机程序被处理器执行时以实现一种数据入库处理方法。
本领域技术人员可以理解,图10中示出的结构,仅仅是与本申请方案相关的部分结构的框图,并不构成对本申请方案所应用于其上的计算机设备的限定,具体的计算机设备可以包括比图中所示更多或更少的部件,或者组合某些部件,或者具有不同的部件布置。
在一个实施例中,提供了一种计算机设备,包括存储器和处理器,所述存储器存储有计算机程序,所述处理器执行所述计算机程序时实现上述各方法实施例中的步骤。
在一个实施例中,提供了一种计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现上述各方法实施例中的步骤。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的计算机程序可存储于一非易失性计算机可读取存储介质中,该计算机程序在执行时,可包括如上述各方法的实施例的流程。其中,本申请所提供的各实施例中所使用的对存储器、存储、数据库或其它介质的任何引用,均可包括非易失性和易失性存储器中的至少一种。非易失性存储器可包括只读存储器(Read-Only Memory,ROM)、磁带、软盘、闪存或光存储器等。易失性存储器可包括随机存取存储器(Random Access Memory,RAM)或外部高速缓冲存储器。作为说明而非局限,RAM可以是多种形式,比如静态随机存取存储器(Static Random Access Memory,SRAM)或动态随机存取存储器(Dynamic Random Access Memory,DRAM)等。
以上实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。
以上所述实施例仅表达了本申请的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本申请构思的前提下,还可以做出若干变形和改进,这些都属于本申请的保护范围。因此,本申请专利的保护范围应以所附权利要求为准。