掌桥专利:专业的专利平台
掌桥专利
首页

数据导出方法、数据导出装置、电子设备及介质

文献发布时间:2023-06-19 10:27:30


数据导出方法、数据导出装置、电子设备及介质

技术领域

本公开涉及金融领域,更具体地,涉及一种数据导出方法、数据导出装置、电子设备及存储介质。

背景技术

随着计算机技术发展,伴随着庞大的数据产生,需要将数据进行收集、存储、导出和分析。利用现有的数据导出功能,用户可以根据选择的数据种类及筛选条件,得到所需要的目标数据。在面对数据量小、业务简单、并发数量少的场景时,现有的数据导出功能可以满足大多数的数据导出需求。

在实现本公开构思的过程中,发明人发现现有技术中至少存在如下问题:在处理大数据量的导出时,会占用大量的系统资源,导致数据导出功能的性能下降,降低用户体验。

发明内容

有鉴于此,本公开实施例提供了一种可以根据导出数据的数据量大小选择不同导出方式的数据导出方法、装置、电子设备及存储介质。

本公开实施例的一个方面提供了一种应用于第一服务器的数据导出方法。所述数据导出方法包括:接收执行第一数据导出任务的调用请求;根据所述调用请求的信息,获得所述第一数据导出任务的导出数据量;基于所述第一数据导出任务的导出数据量确定数据导出方式,其中,包括:在所述第一数据导出任务的导出数据量大于等于第一预设阈值时,采用多线程并发导出数据;在所述第一数据导出任务的导出数据量小于第一预设阈值时,采用单线程导出数据;确定至少一个数据导出文件,以将数据导出到所述至少一个数据导出文件中。

根据本公开的实施例,所述采用多线程并发导出数据包括:将所述第一数据导出任务拆解为N个第二数据导出任务,所述第二数据导出任务的导出数据量小于所述第一预设阈值;采用多线程并发执行N个所述第二数据导出任务,其中,N为大于等于2的整数。

根据本公开的实施例,所述将所述第一数据导出任务拆解为N个第二数据导出任务包括:设置第二预设阈值,所述第二预设阈值小于所述第一预设阈值;从所述第一数据导出任务的起始位置开始,每隔所述第二预设阈值将所述第一数据导出任务的一部分分配给一个所述第二数据导出任务,得到N个所述第二数据导出任务。

根据本公开的实施例,所述采用多线程并发执行N个所述第二数据导出任务包括:确定第一数据导出文件;获取所述第一数据导出任务的导出数据在所述第一数据导出文件中的起始位置;从所述起始位置每隔所述第二预设阈值获得所述第一数据导出文件中的一个导出位置,直至得到N-1个所述导出位置;基于所述起始位置和N-1个所述导出位置将N个所述第二数据导出任务的导出数据写入所述第一数据导出文件。

根据本公开的实施例,所述采用多线程并发执行N个所述第二数据导出任务包括循环执行以下操作,直至将N个所述第二数据导出任务全部导出:确定当前所述第一数据导出任务导出的第二数据导出文件;若所述第二数据导出文件的可用空间大于等于接下来要导出的所述第二数据导出任务的导出数据量,则将所述第二数据导出任务写入所述第二数据导出文件;或者若所述第二数据导出文件的可用空间小于接下来要导出的所述第二数据导出任务的导出数据量,则创建第三数据导出文件,并将所述第二数据导出任务写入所述第三数据导出文件。

根据本公开的实施例,所述确定至少一个数据导出文件包括:若所述第一数据导出任务第一次导出数据,则创建一个第四数据导出文件,以将数据导出到所述第四数据导出文件中;或者若所述第一数据导出任务非第一次导出数据,则将数据导出到第五数据导出文件中,其中,所述第五数据导出文件为所述第一数据导出任务上一次导出数据的文件。

本公开实施例的另一个方面提供了一种应用于第二服务器的数据导出方法。该数据导出方法包括:获取第三数据导出任务;从至少一个第一服务器中确定出与所述第三数据导出任务对应的目标服务器,其中,包括:根据预存的所述至少一个第一服务器与数据业务种类的对应关系,查询与所述第三数据导出任务对应的目标服务器;发出调用请求,以使得所述目标服务器执行所述第三数据导出任务。

根据本公开的实施例,所述第三数据导出任务被预先加入消息队列,所述获取第三数据导出任务包括:从所述消息队列获取所述第三数据导出任务以进行异步处理。

根据本公开的实施例,所述发出调用请求包括:根据所述第三数据导出任务的数据业务种类查询数据业务配置表,得到所述目标服务器的接口信息,其中,所述数据业务配置表包括所述至少一个第一服务器的接口信息,以及所述预存的对应关系;基于所述目标服务器的接口信息发出调用请求。

根据本公开的实施例,在所述查询数据业务配置表之前还包括:设置所述数据业务配置表中的所述至少一个第一服务器的接口信息;以及设置所述数据业务配置表中的所述至少一个第一服务器与数据业务种类的对应关系。

本公开实施例的另一个方面提供了一种应用于第一服务器的数据导出装置。该数据导出装置包括接收请求模块、查询数据模块、第一确定模块、和文件确定模块。其中,所述获取任务模块用于获取第三数据导出任务;所述第二确定模块用于从至少一个第一服务器中确定出与所述第三数据导出任务对应的目标服务器,其中,包括:根据预存的所述至少一个第一服务器与数据业务种类的对应关系,查询与所述第三数据导出任务对应的目标服务器;所述发送请求模块,用于发出调用请求,以使得所述目标服务器执行所述第三数据导出任务。

本公开实施例的另一个方面提供了一种应用于第二服务器的数据导出装置。该数据导出装置包括获取任务模块、第二确定模块和发送请求模块。所述获取任务模块用于获取第三数据导出任务;所述第二确定模块,用于从至少一个第一服务器中确定出与所述第三数据导出任务对应的目标服务器,其中,包括:根据预存的所述至少一个第一服务器与数据业务种类的对应关系,查询与所述第三数据导出任务对应的目标服务器;所述发送请求模块,用于发出调用请求,以使得所述目标服务器执行所述第三数据导出任务。

本公开实施例的另一方面提供了一种电子设备。所述电子设备包括一个或多个存储器、以及一个或多个处理器。所述存储器上存储有计算机可执行指令。所述处理器执行所述指令,以实现如上所述的方法。

本公开实施例的另一方面提供了一种计算机可读存储介质,其上存储有可执行指令,该指令被处理器执行时使处理器执行如上所述的方法。

根据本公开实施例的又一方面,提供了一种计算机程序产品,包括计算机程序/指令,该计算机程序/指令被处理器执行时实现如上所述的方法。

上述一个或多个实施例具有如下优点或益效果:可以至少部分地解决在导出大数据量时,数据导出性能下降的问题,根据导出数据量大小,采用对应的数据导出方式进行数据导出,有效利用系统资源,提高数据导出性能。并能够应对多用户建立数据导出任务的高并发场景,对数据导出任务进行异步处理,而提升服务器的稳定性。

附图说明

通过以下参照附图对本公开实施例的描述,本公开的上述以及其他目的、特征和优点将更为清楚,在附图中:

图1示意性示出了根据本公开实施例的数据导出的系统架构;

图2示意性示出了根据本公开的实施例的应用于第二服务器的数据导出方法的流程图;

图3示意性示出了根据本公开的实施例的设置数据业务配置表的流程图;

图4示意性示出了根据本公开的实施例的第二服务器发出调用请求的流程图;

图5示意性示出了根据本公开实施例的应用于第一服务器的数据导出方法的流程图;

图6示意性示出了根据本公开实施例的确定数据导出文件的流程图;

图7示意性示出了根据本公开的实施例的采用多线程并发导出数据的流程图;

图8示意性示出了根据本公开的实施例的将第一数据导出任务拆解为N个第二数据导出任务的流程图;

图9示意性示出了根据本公开的实施例的采用多线程并发执行N个第二数据导出任务的流程图;

图10示意性示出了根据本公开的另一实施例的采用多线程并发执行N个第二数据导出任务的流程图;

图11示意性示出了根据本公开的实施例的应用于第二服务器的数据导出装置的框图;

图12示意性示出了根据本公开实施例的获取任务模块的应用场景图;

图13示意性示出了根据本公开实施例的定时向消息队列中存消息的流程;

图14示意性示出了根据本公开的实施例的应用于第一服务器的数据导出装置的框图;

图15示意性示出了根据本公开实施例的定时从消息队列中取出任务消息并执行的流程。

图16示意性示出了根据本公开实施例的适于实现数据导出方法的计算机系统的方框图。

具体实施方式

以下,将参照附图来描述本公开的实施例。但是应该理解,这些描述只是示例性的,而并非要限制本公开的范围。在下面的详细描述中,为便于解释,阐述了许多具体的细节以提供对本公开实施例的全面理解。然而,明显地,一个或多个实施例在没有这些具体细节的情况下也可以被实施。此外,在以下说明中,省略了对公知结构和技术的描述,以避免不必要地混淆本公开的概念。

在此使用的术语仅仅是为了描述具体实施例,而并非意在限制本公开。在此使用的术语“包括”、“包含”等表明了所述特征、步骤、操作和/或部件的存在,但是并不排除存在或添加一个或多个其他特征、步骤、操作或部件。

在此使用的所有术语(包括技术和科学术语)具有本领域技术人员通常所理解的含义,除非另外定义。应注意,这里使用的术语应解释为具有与本说明书的上下文相一致的含义,而不应以理想化或过于刻板的方式来解释。

在使用类似于“A、B和C等中至少一个”这样的表述的情况下,一般来说应该按照本领域技术人员通常理解该表述的含义来予以解释(例如,“具有A、B和C中至少一个的系统”应包括但不限于单独具有A、单独具有B、单独具有C、具有A和B、具有A和C、具有B和C、和/或具有A、B、C的系统等)。在使用类似于“A、B或C等中至少一个”这样的表述的情况下,一般来说应该按照本领域技术人员通常理解该表述的含义来予以解释(例如,“具有A、B或C中至少一个的系统”应包括但不限于单独具有A、单独具有B、单独具有C、具有A和B、具有A和C、具有B和C、和/或具有A、B、C的系统等)。

本公开的实施例提供了一种应用于第一服务器的数据导出方法。该数据导出方法包括:接收执行第一数据导出任务的调用请求;根据所述调用请求的信息,获得所述第一数据导出任务的导出数据量;基于所述第一数据导出任务的导出数据量确定数据导出方式,其中,包括:在所述第一数据导出任务的导出数据量大于等于第一预设阈值时,采用多线程并发导出数据;在所述第一数据导出任务的导出数据量小于第一预设阈值时,采用单线程导出数据;确定至少一个数据导出文件,以将数据导出到所述至少一个数据导出文件中。

本公开的实施例还提供了一种应用于第二服务器的数据导出方法。该数据导出方法包括:获取第三数据导出任务;从至少一个第一服务器中确定出与所述第三数据导出任务对应的目标服务器,其中,包括:根据预存的所述至少一个第一服务器与数据业务种类的对应关系,查询与所述第三数据导出任务对应的目标服务器;发出调用请求,以使得所述目标服务器执行所述第三数据导出任务。本公开的实施例还提供了数据导出装置、电子设备和介质。

图1示意性示出了根据本公开实施例的数据导出方法的系统架构。需要注意的是,图1所示仅为可以应用本公开实施例的系统架构的示例,以帮助本领域技术人员理解本公开的技术内容,但并不意味着本公开实施例不可以用于其他设备、系统、环境或场景。例如本公开的一种实施例可以应用于金融技术领域,将在金融业务中产生的数据进行导出,以便于对数据进行分析和处理。

如图1所示,根据该实施例的系统架构100可以包括终端设备101、102、103、104,网络105、106,任务管理服务器107和数据业务服务器108、109、110。网络105用以在终端设备101、102、103、104和任务管理服务器107之间提供通信链路的介质,网络106用以在任务管理服务器107和数据业务服务器108、109、110之间提供通信链路的介质。网络105和106可以包括各种连接类型,例如有线、无线通信链路或者光纤电缆等。

用户可以使用终端设备101、102、103、104通过网络105与任务管理服务器107交互,以发送、接收处理数据导出任务的消息等。任务管理服务器107通过网络106向数据业务服务器108、109、110发送调用请求。终端设备101、102、103和104上可以安装有各种通讯客户端应用,例如购物类应用、网页浏览器应用、搜索类应用、即时通信工具、邮箱客户端、社交平台软件等(仅为示例)。

终端设备101、102、103和104可以是具有显示屏并且支持网页浏览的各种电子设备,包括但不限于智能手机、平板电脑、膝上型便携计算机和台式计算机等等。

任务管理服务器107可以是提供各种服务的服务器,例如对用户利用终端设备101、102、103和104所浏览的网站、登陆的服务系统、应用等提供支持的后台管理服务器(仅为示例)。后台管理服务器可以对接收到的用户数据导出请求等数据进行分析等处理,并将处理结果(例如根据用户请求获取或生成的网页、信息、或数据等)反馈给终端设备。

数据业务服务器108、109、110可以部署具体的数据业务系统,其中,数据业务系统具有专门的业务人员维护。数据业务服务器108、109、110可以是用于提供存储、导出、获取或管理数据等功能的服务器,执行任务管理服务器107发出的调用请求。

需要说明的是,本公开实施例所提供的应用于第二服务器的数据导出方法一般可以由任务管理服务器107执行。相应地,本公开实施例所提供的应用于第二服务器的数据导出装置一般可以设置于任务管理服务器107中。本公开实施例所提供的应用于第二服务器的数据导出方法也可以由不同于任务管理服务器107的服务器或服务器集群执行。相应地,本公开实施例所提供的应用于第二服务器的数据导出装置也可以设置于不同于任务管理服务器107的服务器或服务器集群中。

需要说明的是,本公开实施例所提供的应用于第一服务器的数据导出方法一般可以由数据业务服务器108、109、110中的至少一个执行。相应地,本公开实施例所提供的应用于第一服务器的数据导出装置一般可以设置于数据业务服务器108、109、110中的至少一个中。本公开实施例所提供的应用于第一服务器的数据导出方法也可以由不同于数据业务服务器108、109、110的服务器或服务器集群执行。相应地,本公开实施例所提供的应用于第一服务器的数据导出装置也可以设置于不同于数据业务服务器108、109、110的服务器或服务器集群中。

应该理解,图1中的终端设备、网络和服务器的数目仅仅是示意性的。根据实际应用,可以具有任意数目的终端设备、网络和服务器。

以下结合图1的系统架构100,对本公开实施例的技术方案进行示例性说明。其中,任务管理服务器107可以用于处理用户的数据导出任务。用户想要导出的数据可以由数据业务服务器108、109、110中的任一个进行管理,其中,对应的数据可以存储于数据业务服务器108、109、110中,也可以由数据业务服务器108、109、110从其他数据库中获取。

图2示意性示出了根据本公开的实施例的应用于第二服务器的数据导出方法的流程图。其中,第二服务器可以为任务管理服务器107。

在操作S210,获取第三数据导出任务;

根据本公开的实施例,参照图1,用户可以通过终端设备101创建数据导出任务。例如用户想要下载银行账户中的消费流水明细,首先对账户、日期、金额区间、收入或者支出等条件进行筛选,然后在银行网页点击导出按钮新建下载任务,最后由任务管理服务器107获取到用户创建的关于银行账户流水明细的数据导出任务。

根据本公开的实施例,第三数据导出任务被预先加入消息队列,所述获取第三数据导出任务包括:从所述消息队列获取所述第三数据导出任务以进行异步处理。

参照图1,首先,例如用户通过终端设备101创建数据导出任务后,任务管理服务器107收到该数据导出任务的记录,该数据导出任务包括用户想要下载数据业务的筛选条件和种类等信息。应知的是,任务管理服务器107可以处理一个用户创建的多个任务或者多个用户创建的多个任务,例如可以形成包括多个数据导出任务的任务列表。

然后,例如令任务管理服务器107定时遍历查询任务列表中状态为未执行完成的任务,并将未执行完成的导出任务存入消息队列中。

最后,可以设置任务管理服务器107每隔一段时间从消息队列中将数据导出任务取出来,异步的处理该数据导出任务,以实现获取数据的目的。

利用本公开实施例的数据导出方法,可以在用户创建数据导出任务后,不会立即处理该任务以避免占用当前资源,而是将数据导出任务放入消息队列中,在其他时间从消息队列中获取数据导出任务,并进行异步处理。从而可以使创建数据导出任务和具体执行数据导出进行分离。用户在等待文件下载完成的过程中能够做其他操作,提高了用户体验。

在操作S220,从至少一个第一服务器中确定出与所述第三数据导出任务对应的目标服务器,其中,包括:根据预存的所述至少一个第一服务器与数据业务种类的对应关系,查询与所述第三数据导出任务对应的目标服务器。

以下结合图3,详细说明在操作S220中,查询与所述第三数据导出任务对应的目标服务器的流程。

图3示意性示出了根据本公开的实施例的设置数据业务配置表的流程图。

如图3所示,根据本公开实施例的数据导出方法还包括设置数据业务配置表,具体可以包括操作S310~操作S320。

在操作S310,设置所述数据业务配置表中的所述至少一个第一服务器的接口信息。

在操作S320,设置所述数据业务配置表中的所述至少一个第一服务器与数据业务种类的对应关系。

根据本公开的实施例,参考图1,例如数据业务服务器108中部署由管理银行账户流水的数据业务系统,数据业务服务器109中部署有管理定期理财的数据业务系统,数据服务器110中部署有管理贵金属交易的数据业务系统。另外,可以在任务管理服务器107中设置有数据业务配置表。

首先,由于数据业务服务器108、109和110各自部署有不同类别的数据业务系统,因此可以将各个数据业务服务器108、109和110与数据业务类别的对应关系设置在数据业务配置表中。

其次,业务人员可以根据数据业务服务器108、109和110不同的接口规定,将相应的接口信息设置在数据业务配置表中。根据该接口信息,任务管理服务器107可以泛化调用数据业务服务器108、109和110执行数据导出功能,以根据具体数据业务实现获取数据的方法。

根据本公开的实施例,可以在操作S210之前,执行操作S310~操作S320,以设置数据业务配置表。在操作S210之后,可以利用预存的数据配置表中接口信息及对应关系,查询与所述第三数据导出任务对应的目标服务器,然后执行操作S220。

在操作S230,发出调用请求,以使得所述目标服务器执行所述第三数据导出任务。

以下结合图4,详细说明在操作S230中发出调用请求的流程。

图4示意性示出了根据本公开的实施例的第二服务器发出调用请求的流程图。

如图4所示,第二服务器发出调用请求还可以包括操作S410~操作S420。

在操作S410,根据所述第三数据导出任务的数据业务种类查询数据业务配置表,得到所述目标服务器的接口信息,其中,所述数据业务配置表包括所述至少一个第一服务器的接口信息,以及所述预存的对应关系。

在操作S420,基于所述目标服务器的接口信息发出调用请求。

根据本公开的实施例,参照图1,例如任务管理服务器107从消息队列中取出用户使用终端设备101创建的数据导出任务后,首先,读取到该数据导出任务的数据种类为银行账户流水明细。接着,任务管理服务器107查询数据业务配置表,根据预先配置好的对应关系,得到银行账户流水明细由部署在数据业务服务器108中的数据业务系统管理。接着,根据数据业务配置表中接口信息,任务管理服务器107利用泛化调用的方法令数据业务服务器108执行数据导出任务。

利用本公开实施例的数据导出方法,能够实现多个数据业务系统共用一套数据导出源码。例如现有技术中由于各个数据业务服务器具有不同的接口规定,从而具有不同的数据导出业务逻辑,需要针对每一个业务逻辑进行开发,以满足用户的数据导出需求。而本公开实施例的数据导出方法能够通过任务管理服务器107将不同用户创建的数据导出任务统一整合并异步处理,使具有不同业务逻辑的数据业务系统共用一套数据导出业务,有效降低了开发成本。

图5示意性示出了根据本公开实施例的应用于第一服务器的数据导出方法的流程图。其中,第一服务器可以为图1中数据业务服务器108、109和110中的任一个。

如图5所示,应用于第一服务器的数据导出方法可以包括操作S510~S540。

在操作S510,接收执行第一数据导出任务的调用请求。

在操作S520,根据所述调用请求的信息,获得所述第一数据导出任务的导出数据量。

根据本公开的实施例,例如任务管理服务器107接收到关于银行账户流水明细的数据导出任务,利用泛化调用的方式,向数据业务服务器108中发送调用请求。其中,调用请求的信息包括了账户名、日期、金额区间、收入等参数。接着,数据业务服务器108通过调用请求的信息,查询用户需要导出的数据。

在操作S530,基于所述第一数据导出任务的导出数据量确定数据导出方式,其中,可以包括操作S531~S532。

在操作S531,在所述第一数据导出任务的导出数据量大于等于第一预设阈值时,采用多线程并发导出数据。

在操作S532,在所述第一数据导出任务的导出数据量小于第一预设阈值时,采用单线程导出数据。

根据公开的实施例,将导出数据量与预先设置下载阈值进行比较,基于比较结果采用对应的数据导出方式进行数据导出。其中,例如预设阈值可以是银行后台人员根据服务器的性能设置的数据最大下载量。

例如在用户导出任务的数据量大于等于预先设置的最大数据下载量时,则可采用并发的方式,多线程的执行数据导出任务。在用户导出任务的数据量小于预先设置的最大数据下载量时,则可采用单线程的方式导出数据。

在操作S540,确定至少一个数据导出文件,以将数据导出到所述至少一个数据导出文件中。

下面结合图6,详细说明操作S540中将数据导出到文件的流程。

图6示意性示出了根据本公开实施例的确定数据导出文件的流程图。

如图6所示,确定数据导出文件可以包括操作S610~S620。

在操作S610,若所述第一数据导出任务第一次导出数据,则创建一个第四数据导出文件,以将数据导出到所述第四数据导出文件中。

在操作S620,若所述第一数据导出任务非第一次导出数据,则将数据导出到第五数据导出文件中,其中,所述第五数据导出文件为所述第一数据导出任务上一次导出数据的文件。

利用本公开的实施例,将用户导出任务的数据量与预设阈值进行比较。若小于该设定值,可以采用单线程的方式导出数据,由于数据量较小,不会占用过多资源。若大于该设定值,可以采用多线程的方式导出数据。从而可以有效解决现有技术中用户创建大数据量导出任务后导致的页面卡顿问题,能够提升数据导出性能,为用户提供更好的体验。

图7示意性示出了根据本公开的实施例的采用多线程并发导出数据的流程图。

如图7所示,根据本公开实施例,操作S531中采用多线程并发导出数据可以包括操作S710~操作S720。

在操作S710,将第一数据导出任务拆解为N个第二数据导出任务,第二数据导出任务的导出数据量小于预设阈值。

在操作S720,采用多线程并发执行N个第二数据导出任务,其中,N为大于等于2的整数。

根据本公开的实施例,用户创建的数据导出任务对应较大的数据量时,例如用户想要下载银行账户中的流水明细,设定好账户、日期、金额区间、收入或者支出等条件后,流水明细数据有10万条。例如预设阈值为1万条,则导出的目标流水明细数据大于预设阈值。那么将包括10万条数据的任务进行拆解,拆解出多个小于预设阈值的数据量的导出任务,然后对多个小数据量的任务采用多线程方式并发执行。

利用本公开实施例的数据导出方法,将大数据量下载任务拆解成多个小数据量导出任务,然后批量导出,能够有效提升数据导出性能,解决大数据文件导出问题。

图8示意性示出了根据本公开的实施例的将第一数据导出任务拆解为N个第二数据导出任务的流程图。

如图8所示,根据本公开实施例,将第一数据导出任务拆解为N个第二数据导出任务可以包括操作S810~操作S820。

在操作S810,设置第二预设阈值,第二预设阈值小于第一预设阈值。

在操作S820,从第一数据导出任务的起始位置开始,每隔第二预设阈值将第一数据导出任务的一部分分配给一个第二数据导出任务,得到N个第二数据导出任务。

根据本公开的实施例,例如用户导出的银行账户的流水明细数据有10万条,而设置的第一预设阈值为1万条,可以设置第二预设阈值为5000条。从上述10万条数据的起始位置开始,每隔5000条将10万条数据的一部分分配给一个小数据量的导出任务(比如0~5000、5001~10000……),直至将该10万条数据拆解完毕,得到20个小数据量的导出任务。

需要说明的是,可根据服务器处理性能或者当前数据导出功能使用情况等因素,灵活设置第一预设阈值和第二预设阈值。例如第二预设阈值为7000条,从上述10万条数据的起始位置拆解到结束位置时,最后一个任务并非为7000条,那么可以设置第10万条数据为拆解结束条件,即最后一个任务包括98001~100000条的数据。本公开不对其做具体限制。

图9示意性示出了根据本公开的实施例的采用多线程并发执行N个第二数据导出任务的流程图。

如图9所示,根据本公开实施例,采用多线程并发执行N个第二数据导出任务可以包括操作S910~操作S940。

在操作S910,确定第一数据导出文件。第一数据导出文件用于接收N个第二数据导出任务中的数据写入。

根据本公开的实施例,例如对于用户导出的10万条数据,每隔5000条数据拆解出一个小数据量的数据导出任务,得到20个小数据量的任务后,再利用多个线程并发执行这20个任务。首先,判断该10万条数据是否是第一次导出,例如查询导出日志、查询用户导出任务记录或者扫描是否已经存在导出文件。其次,例如可以执行操作S610~S620,若该10万条数据是第一次导出,则创建一个数据导出文件,若该10万条数据不是第一次导出,则找到之前创建的源导出文件,以源导出文件作为第一数据导出文件。最后,根据上述判断结果确定第一数据导出文件。

在操作S920,获取将数据导出到所述第一数据导出文件中的起始位置。

根据本公开的实施例,若用户导出10万条数据为第一次导出,并创建了一个新的导出文件,则首先获取该10万条数据在导出文件中写入的起始位置。例如导出文件格式为excel格式,起始位置即为excel中第一个表格的第一行。

根据本公开的另一实施例,若用户不是第一次导出10万条数据时,在已经存在的源导出文件中追加写入该10万条数据。此时需要获取在该源文件中追加写入的起始位置。

在操作S930,从起始位置每隔第二预设阈值获得第一数据导出文件中的一个导出位置,直至得到N-1个导出位置

在操作S940,基于起始位置和N-1个导出位置将N个第二数据导出任务的导出数据写入第一数据导出文件。

例如对于用户导出10万条数据的需求,其中,每隔5000条数据拆解出一个小数据量的数据导出任务,得到20个小数据量的任务的情况,在确定好写入数据的起始位置后,首先从该起始位置开始每隔5000条获得一个导出位置,直至得到19个导出位置。其中,起始位置及19个导出位置与拆解出的20个任务一一对应(例如文件中的对应第1条、第5001条、第10001条数据……的位置)。最后根据上述起始位置及19个导出位置将20个数据导出任务并行写入文件中。

根据本公开的实施例,若导出文件已经存在且源文件是一个空文件,则在获得起始位置及N-1个导出位置后直接将数据写入文件。如果源文件中已经存在部分数据,在获得源文件中的起始位置及N-1个导出位置后,可以覆盖已经存在的数据,也可以对已经存在的部分数据与导出的数据进行比较,对已经存在的数据不再执行导出。本公开对此不做限制,可根据实际情况设置,最后导出完成的文件中包括用户需要的全部数据,且不包含重复或者多余数据即可。

根据本公开的实施例,可以先确定出N个第二导出任务在第一数据导出任务中写入的位置后,然后并行地将N个第二导出任务批量导出。

图10示意性示出了根据本公开的另一实施例的采用多线程并发执行N个第二数据导出任务的流程图。

如图10所示,根据本公开另一实施例,采用多线程并发执行N个第二数据导出任务还可以包括,循环执行操作S1010~操作S1030,直至将N个第二数据导出任务全部导出。

在操作S1010,确定当前第一数据导出任务导出的第二数据导出文件。

在操作S1020,若第二数据导出文件的可用空间大于等于接下来要导出的第二数据导出任务的导出数据量,则将第二数据导出任务写入第二数据导出文件。

在操作S1030,若第二数据导出文件的可用空间小于接下来要导出的第二数据导出任务的导出数据量,则创建第三数据导出文件,并将第二数据导出任务写入第三数据导出文件。

根据本公开的实施例,例如对10万条数据进行拆解得到20个小数据量的任务,上述20个任务分别对应1~5000、5001~10000……95001~100000条的数据。

首先,确定接下来要导出的每一个任务的导出文件。具体的,例如执行对应1~5000条数据的第一个任务时,扫描本地是否已经存在导出文件,以确定该10万条数据是否第一次导出。若不存在导出文件即为第一次导出,则创建一个导出文件(以下简称文件A),将第一个任务写入。执行对应5001~10000条数据的第二个任务时,扫描本地是否已经存在导出文件,此时扫描出第一个任务创建的文件A,则将文件A作为当前第一数据导出任务导出的第二数据导出文件。另外,例如在对应95001~100000条数据的最后一个任务确定导出文件时,若扫描出多个导出文件,可以根据导出文件的创建时间,确定最后创建的导出文件作为第二数据导出文件。

接着,在确定好第二数据导出文件后,对接下来要导出的任务的导出数据量与第二数据导出文件的可用空间进行对比。例如,创建的导出文件A可以容纳12000条数据,那么将包含1~5000条数据的任务与文件A的可用空间比较,比较出文件A可以允许写入5000条数据,则将包含1~5000条数据写入文件A。

然后,文件A还可以容纳10000条数据。执行包含5001~10000条数据的任务时,将5000条的数据量与文件A的可用空间比较,判断出文件A可以允许写入5000条数据,则将包含5001~10000条数据写入文件A。

再然后,文件A还可以容纳2000条数据。执行包含10001~15000条数据的任务时,扫描出文件A,将文件A作为接下来要写入的导出文件。将5000条的数据量与文件A的可用空间比较。判断出文件A的可用空间小于5000条的导出数据量,则创建一个新的导出文件B(即,第三数据导出文件),将包含10001~15000条的数据写入新创建的导出文件B中,其中,导出文件B可以容纳12000条数据。

再然后,导出文件B还可以容纳7000条数据,执行包含15001~20000条数据的任务时,扫描出文件A和文件B,通过创建时间的先后,确定后创建的文件B作为接下来要写入的导出文件。将包含5000条的数据量和文件B的可用空间比较,然后写入到文件B。

最后,参照上述步骤,对于剩余的16个任务继续循环执行操作S1010~操作S1030,直至将20个数据导出任务全部完成。

需要注意的是,上述以数据的条数作为导出数据大小的量化标准只是本公开的一个实施例,本公开不对数据量的量化单位和导出文件的格式做具体限制。

根据本公开的另一实施例,采用多线程并发执行N个第二数据导出任务还可以包括:将每个第二数据导出任务写入到一个单独的数据导出文件中,从而得到N个数据导出文件。并行执行完N个第二数据导出任务后,则将生成的N个数据文件进行合并,以得到一个包含全部导出数据的文件。

图11示意性示出了根据本公开的实施例的应用于第二服务器的数据导出装置的框图。

如图11所示,数据导出装置1100包括获取任务模块1110、第二确定模块1120和发送请求模块1130。该数据导出装置1100可以用于实现参考图2~图4所描述的数据导出方法。

具体地,获取任务模块1110例如可以执行操作S210,用于获取第三数据导出任务。

第二确定模块1120例如可以执行操作S220,用于从至少一个第一服务器中确定出与所述第三数据导出任务对应的目标服务器,其中,包括:根据预存的所述至少一个第一服务器与数据业务种类的对应关系,查询与所述第三数据导出任务对应的目标服务器。

发送请求模块1130例如可以执行操作S230,用于发出调用请求,以使得所述目标服务器执行所述第三数据导出任务。

根据本公开的实施例,数据导出装置1100例如还可包括配置表模块,其中,配置表模块例如还可以执行操作S310~S320,在此不做赘述。

根据本公开的实施例,第二确定模块1120例如还可以执行操作S410,并将查询结果传给发送请求模块1130,然后发送请求模块1130可以执行操作S420。

图12示意性示出了根据本公开实施例的获取任务模块1110的应用场景图。

如图12所示,根据本公开实施例的获取任务模块1110的应用场景可以包括操作S1210~操作S1250。

在操作S1210,在用户创建导出任务后,获取异步数据导出任务。

在操作S1220,将用户创建的数据导出任务中携带的参数(例如数据业务种类和数据筛选条件等)进行封装以存入消息队列。

在操作S1230,消息队列中包括有多条消息,每条消息代表获取任务模块1110放入的一条数据导出任务。

在操作S1240,从消息队列中取出消息。

在操作S1250,处理从消息队列中取出的消息,即数据导出任务。根据数据业务配置表,获取业务人员配置的导出业务方法,以实现数据导出。

根据本公开的实施例,向消息队列中存入消息或者取出消息可以采用轮询、定时或者随机时间的方法,将用户创建数据导出任务和执行数据导出进行分离,以实现对数据导出任务的异步处理。

图13示意性示出了根据本公开实施例的定时向消息队列中存消息的流程。

如图13所示,定时向消息队列中存消息可以包括操作S1310~S1370。其中,可以由任务管理服务器107执行。

在操作S1310,参照图1,例如可以利用任务管理服务器107执行定时操作,并预先设置定时操作的参数,比如每5秒执行一次定时操作。

在操作S1320,定时遍历任务列表中每个数据导出任务。

在操作S1330,判断每个数据导出任务的执行状态是否为执行中,若是,则执行操作S1340,若否,则执行操作S1360。

在操作S1340,获得执行中的数据导出任务的执行时间,判断是否执行超时,若是,则执行操作S1350,若否,则执行操作S1370。

在操作S1350,若数据导出任务执行超时,则更新该数据导出任务的执行状态为失败。对于执行失败的数据导出任务,例如可以将结果反馈给创建该数据导出任务的用户,由用户再次创建或者联系业务人员。

在操作S1360,若数据导出任务并未执行,则该数据导出任务为待执行任务,将其添加到消息队列中。

在操作S1370,结束定时操作。另外,例如可以设置结束定时操作后,反馈执行结果。

图14示意性示出了根据本公开的实施例的应用于第一服务器的数据导出装置的框图。

如图14所示,数据导出装置1400包括获取任务模块1410、查询数据模块1420、第一确定模块1430和文件确定模块1440。该数据导出装置1400可以用于实现参考图5~图10所描述的数据导出方法。

具体地,接收请求模块1410例如可以执行操作S510,用于接收执行第一数据导出任务的调用请求。

查询数据模块1420例如可以执行操作S520,用于根据所述调用请求的信息,获得所述第一数据导出任务的导出数据量。

第一确定模块1430例如可以执行操作S530,用于基于所述第一数据导出任务的导出数据量确定数据导出方式,其中,包括在所述第一数据导出任务的导出数据量大于等于第一预设阈值时,采用多线程并发导出数据;在所述第一数据导出任务的导出数据量小于第一预设阈值时,采用单线程导出数据;

文件确定模块1440例如可以执行操作S540,用于确定至少一个数据导出文件,以将数据导出到所述至少一个数据导出文件中。

图15示意性示出了根据本公开实施例的定时从消息队列中取出任务消息并执行的流程。

如图15所示,定时向消息队列中存消息可以包括操作S1501~S1515。其中,可以由任务管理服务器107执行操作S1501~S1506和S1515,可以由数据业务服务器108、109或110中的任一个执行操作S1507~S1514。

在操作S1501,例如令任务管理服务器107以每隔5秒从消息队列中取出一个或者多个数据导出任务。

在操作S1502,对每个任务消息进行空值校验,判读取出的任务消息是否包含执行所需要的信息,若该消息为不带任何信息的空值,则该任务无法执行,则结束。若不为空值,则执行操作S1503。

在操作S1503,例如每次从消息队列中取出多条任务消息,则将多条任务消息分配给多条线程,异步执行数据导出任务。

在操作S1504,对于操作S1503开始执行的数据导出任务,在任务列表中修改执行状态为执行中,并更新执行时间。

在操作S1505,根据取出的数据导出任务,获得目标服务器的接口信息,可以参照操作S410,在此不做赘述。

在操作S1506,根据获取到的接口信息,利用泛化调用的方法,发出调用请求,可以参照操作S420。

根据本公开的实施例,可以读取业务人员根据数据业务服务器接口规定配置的具体业务类信息,然后根据具体业务类信息泛化调用数据导出任务方法。

根据本公开的实施例,例如可以在任务管理服务器中配置业务开发模块,所有数据业务服务器共用该业务开发模块。其中,该业务开发模块中,各个维护数据业务服务器的业务开发人员可以适配相应的子服务,并可以在子服务中创建一个包含有获取业务数据具体方法的子类(例如数据业务服务器的接口信息),从而根据具体获取业务方法获取数据。

在操作S1507,执行数据导出任务。例如根据数据导出任务中用户设置的筛选条件查找目标数据。

在操作S1508,根据查找到的导出数据大小及预先设置的导出阈值,判断是否并发执行任务,并根据生成文件方式及查询结果生成导出数据的文件。若并发执行任务,则执行操作S1509,若不并发执行任务,则执行操作S1511。

根据本公开的实施例,如果查询结果为空,则生成一个空文件。例如用户需要导出的数据并不存在,在连接到数据源后,无法查询到数据,则返回查询结果为空,生成一个空文件给用户,并执行结束本次数据导出,这样有利于按照预先设计的逻辑继续执行。

在操作S1509,将数据导出任务拆解为多个小数据量的数据导出任务。

在操作S1510,根据拆解得到的多个小数据量的数据导出任务,由导出数据的起始位置并发获取导出的数据。

在操作S1511,若不并发执行,则单线程执行该数据导出任务,从数据源中分页获取目标数据,并写入导出文件。

在操作S1512,由于每个文件都有一个最大下载数量限制,所以当文件的可用空间不足以支撑一个小数据量的数据导出任务完整导出数据时,应当创建多个文件。

根据本公开的实施例,每次导出数据前都应判断是否是第一次导出数据,以此确定导出文件。如果是第一次导出,则创建一个新文件,并导出数据。如果不是第一次导出数据,则直接在源文件下追加数据。另外若追加数据超过文件可用空间,则另外创建一个新文件。

在操作S1513,在数据导出文件全部创建成功后,将所有文件压缩并上传到指定下载位置,并将下载地址发送给用户,以便于用户获取导出数据。

在操作S1514,上传文件成功后,删除本地压缩文件和源文件。

根据本公开的实施例,例如可以在本地创建数据导出文件,完成数据导出后,将文件进行压缩,并上传压缩文件至云服务器,令用户从云服务器获取数据。文件上传成功后,将压缩文件和源文件删除。并向任务管理服务器107返回任务处理完成的信息。

在操作S1515,更新任务信息。例如可以在任务列表中将导出成功的任务删除,也可以更改执行状态为成功,避免对其重复处理。

利用本公开实施例的数据导出装置,通过定时扫描异步的将未完成和新建任务添加到消息队列,然后再通过定时扫描取出队列中的任务,执行相应的任务实现文件下载功能。使所有数据导出业务共用一套代码,方便集中维护。同时,在面对大数据文件导出问题,首先对下载文件数据量进行预判,如果超出单次最大的下载数量,则可将大数据量下载任务根据索引位置拆解成多个小数据量导出任务,然后采用并发的方式导出多个数据文件,提升数据导出性能。

根据本公开的实施例的模块、子模块、单元、子单元中的任意多个、或其中任意多个的至少部分功能可以在一个模块中实现。根据本公开实施例的模块、子模块、单元、子单元中的任意一个或多个可以被拆分成多个模块来实现。根据本公开实施例的模块、子模块、单元、子单元中的任意一个或多个可以至少被部分地实现为硬件电路,例如现场可编程门阵列(FPGA)、可编程逻辑阵列(PLA)、片上系统、基板上的系统、封装上的系统、专用集成电路(ASIC),或可以通过对电路进行集成或封装的任何其他的合理方式的硬件或固件来实现,或以软件、硬件以及固件三种实现方式中任意一种或以其中任意几种的适当组合来实现。或者,根据本公开实施例的模块、子模块、单元、子单元中的一个或多个可以至少被部分地实现为计算机程序模块,当该计算机程序模块被运行时,可以执行相应的功能。

例如,数据导出装置1100或数据导出装置1400中的模块可以合并在一个模块中实现,或者其中的任意一个模块可以被拆分成多个模块。或者,这些模块中的一个或多个模块的至少部分功能可以与其他模块的至少部分功能相结合,并在一个模块中实现。根据本公开的实施例,数据导出装置1100或数据导出装置1400中的模块中的至少一个可以至少被部分地实现为硬件电路,例如现场可编程门阵列(FPGA)、可编程逻辑阵列(PLA)、片上系统、基板上的系统、封装上的系统、专用集成电路(ASIC),或可以通过对电路进行集成或封装的任何其他的合理方式等硬件或固件来实现,或以软件、硬件以及固件三种实现方式中任意一种或以其中任意几种的适当组合来实现。或者,数据导出装置1100或数据导出装置1400中的模块中的至少一个可以至少被部分地实现为计算机程序模块,当该计算机程序模块被运行时,可以执行相应的功能。

图16示意性示出了根据本公开实施例的适于实现数据导出方法的计算机系统的方框图。图16示出的计算机系统仅仅是一个示例,不应对本公开实施例的功能和使用范围带来任何限制。

如图16所示,根据本公开实施例的计算机系统1600包括处理器1601,其可以根据存储在只读存储器(ROM)1602中的程序或者从存储部分1608加载到随机访问存储器(RAM)1603中的程序而执行各种适当的动作和处理。处理器1601例如可以包括通用微处理器(例如CPU)、指令集处理器和/或相关芯片组和/或专用微处理器(例如,专用集成电路(ASIC)),等等。处理器1601还可以包括用于缓存用途的板载存储器。处理器1601可以包括用于执行根据本公开实施例的方法流程的不同动作的单一处理单元或者是多个处理单元。

在RAM 1603中,存储有系统1600操作所需的各种程序和数据。处理器1601、ROM1602以及RAM 1603通过总线1604彼此相连。处理器1601通过执行ROM 1602和/或RAM 1603中的程序来执行根据本公开实施例的方法流程的各种操作。需要注意,程序也可以存储在除ROM 1602和RAM 1603以外的一个或多个存储器中。处理器1601也可以通过执行存储在一个或多个存储器中的程序来执行根据本公开实施例的方法流程的各种操作。

根据本公开的实施例,系统1600还可以包括输入/输出(I/O)接口1605,输入/输出(I/O)接口1605也连接至总线1604。系统1600还可以包括连接至I/O接口1605的以下部件中的一项或多项:包括键盘、鼠标等的输入部分1606;包括诸如阴极射线管(CRT)、液晶显示器(LCD)等以及扬声器等的输出部分1607;包括硬盘等的存储部分1608;以及包括诸如LAN卡、调制解调器等的网络接口卡的通信部分1609。通信部分1609经由诸如因特网的网络执行通信处理。驱动器1610也根据需要连接至I/O接口1605。可拆卸介质1611,诸如磁盘、光盘、磁光盘、半导体存储器等等,根据需要安装在驱动器1610上,以便于从其上读出的计算机程序根据需要被安装入存储部分1608。

本公开的实施例还包括一种计算机程序产品,其包括计算机程序,该计算机程序包含用于执行本公开实施例所提供的方法的程序代码,当计算机程序产品在电子设备上运行时,该程序代码用于使电子设备实现本公开实施例所提供的数据导出方法。

在该计算机程序被处理器1601执行时,执行本公开实施例的系统/装置中限定的上述功能。根据本公开的实施例,上文描述的系统、装置、模块、单元等可以通过计算机程序模块来实现。在一种实施例中,该计算机程序可以依托于光存储器件、磁存储器件等有形存储介质。在另一种实施例中,该计算机程序也可以在网络介质上以信号的形式进行传输、分发,并通过通信部分1609被下载和安装,和/或从可拆卸介质1611被安装。该计算机程序包含的程序代码可以用任何适当的网络介质传输,包括但不限于:无线、有线等等,或者上述的任意合适的组合。

根据本公开的实施例,可以以一种或多种程序设计语言的任意组合来编写用于执行本公开实施例提供的计算机程序的程序代码,具体地,可以利用高级过程和/或面向对象的编程语言、和/或汇编/机器语言来实施这些计算程序。程序设计语言包括但不限于诸如Java,C++,python,“C”语言或类似的程序设计语言。程序代码可以完全地在用户计算设备上执行、部分地在用户设备上执行、部分在远程计算设备上执行、或者完全在远程计算设备或服务器上执行。在涉及远程计算设备的情形中,远程计算设备可以通过任意种类的网络,包括局域网(LAN)或广域网(WAN),连接到用户计算设备,或者,可以连接到外部计算设备(例如利用因特网服务提供商来通过因特网连接)。

本公开还提供了一种计算机可读存储介质,该计算机可读存储介质可以是上述实施例中描述的设备/装置/系统中所包含的;也可以是单独存在,而未装配入该设备/装置/系统中。上述计算机可读存储介质承载有一个或者多个程序,当上述一个或者多个程序被执行时,实现根据本公开实施例的方法。

根据本公开的实施例,计算机可读存储介质可以是非易失性的计算机可读存储介质,例如可以包括但不限于:便携式计算机磁盘、硬盘、随机访问存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、便携式紧凑磁盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本公开中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。例如,根据本公开的实施例,计算机可读存储介质可以包括上文描述的ROM 1602和/或RAM 1603和/或ROM 1602和RAM 1603以外的一个或多个存储器。

附图中的流程图和框图,图示了按照本公开各种实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段、或代码的一部分,上述模块、程序段、或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个接连地表示的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图或流程图中的每个方框、以及框图或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。

本领域技术人员可以理解,本公开的各个实施例和/或权利要求中记载的特征可以进行多种组合和/或结合,即使这样的组合或结合没有明确记载于本公开中。特别地,在不脱离本公开精神和教导的情况下,本公开的各个实施例和/或权利要求中记载的特征可以进行多种组合和/或结合。所有这些组合和/或结合均落入本公开的范围。

以上对本公开的实施例进行了描述。但是,这些实施例仅仅是为了说明的目的,而并非为了限制本公开的范围。尽管在以上分别描述了各实施例,但是这并不意味着各个实施例中的措施不能有利地结合使用。本公开的范围由所附权利要求及其等同物限定。不脱离本公开的范围,本领域技术人员可以做出多种替代和修改,这些替代和修改都应落在本公开的范围之内。

相关技术
  • 数据导出方法、数据导出装置、电子设备及介质
  • PDF格式数据导出方法、装置、电子设备及可读存储介质
技术分类

06120112553859