专利名称:一种数据导出的方法和装置的制作方法
技术领域:
本申请涉及软件测试领域,特别涉及一种数据导出的方法和装置。
背景技术:
在企业级应用系统中,经常需要将数据库中保存的部分或全部原始数据进行导 出,即是转换为其他格式的数据文件,以便于后续的阅读或修改。现有技术中,有一种单线程导出数据的方法,当接收到用户的一个导出操作请求 时,需要根据该导出操作请求从数据库中查询相应的数据,然后再将查询到的数据写入到 文本文件中,并将该文本文件转换为目标格式的文件,转换时可以采用修改文件扩展名等 方式。但是,该方法存在的缺点,一个导出操作请求仅由一个线程单独响应完成,当需要 导出的数据量较大时,因为每次只能启动一个线程进行导出,就会使得从数据库中查询数 据的过程非常慢,同时将数据写入到文本文件的响应时间也过长,这就降低了数据导出效率。总之,目前需要本领域技术人员迫切解决的一个技术问题就是如何能够创新的 提出一种数据导出的方法,以解决现有技术中在需要导出大数据量的情况下,导致的数据 导出效率较低的问题。
发明内容
本申请所要解决的技术问题是提供一种数据导出的方法,用以解决现有技术中在 需要导出大数据量的情况下,导致的数据导出效率较低的问题。本申请还提供了一种数据导出的装置,用以保证上述方法在实际中的实现及应用。为了解决上述问题,本申请公开了一种数据导出的方法,包括接收待导出数据的导出条件和导出配置信息,所述导出配置信息包括单个任务的 最大线程数,和,每个线程的单次记录数;根据所述导出条件、最大线程数和单次记录数生成导出任务;依据所述导出任务对所述待导出数据进行导出。优选的,所述导出配置信息还包括缓存失效时间;则所述方法还包括根据所述导出条件从数据库中获取所述待导出数据的第一记录数;比较所述第一记录数与上一次相同导出条件下保存的第二记录数;当所述第一记录数与第二记录数相等时,判断所述上一次进行导出操作时的导出 时间是否在所述缓存失效时间内;如果否,则执行所述根据所述导出条件、最大线程数和单次记录数生成导出任务 的步骤。
优选的,所述依据所述导出任务对所述待导出数据进行导出之后,还包括保存本次导出时的导出条件和记录总数。优选的,所述根据所述导出条件、最大线程数和单次记录数生成导出任务,具体包 括根据所述导出条件从数据库中获取所述待导出数据的第一记录数;根据所述单次记录数和所述第一记录数,计算当前任务的线程个数;按照所述线程个数创建线程,并按照所述单次记录数为每个所述创建的线程分配 数据区间;按照所述数据区间启动所述创建的每一个线程。优选的,所述依据所述导出任务对所述待导出数据进行导出,具体包括获取每个线程的数据区间对应的待导出数据;调用相应的目标格式文件组件,将所述待导出数据生成对应个数的目标格式的文 件。优选的,所述依据所述导出任务和导出条件对所述待导出数据进行导出之后,还 包括在同步模式下,直接将所述导出的结果文件返回至客户端。本申请公开了一种数据导出的装置,包括接收模块,用于接收待导出数据的导出条件和导出配置信息,所述导出配置信息 包括单个任务的最大线程数,和,每个线程的单次记录数;生成模块,用于根据所述导出条件、最大线程数和单次记录数生成导出任务;导出模块,用于依据所述导出任务对所述待导出数据进行导出。优选的,所述装置还包括获取模块,用于从数据库中获取所述待导出数据的第一记录数;比较模块,用于比较所述第一记录数与上一次相同导出条件下导出时的第二记录 数;判断模块,用于当所述第一记录数与第二记录数相等时,判断所述上一次进行导 出操作时的导出时间是否在所述缓存失效时间内;执行模块,用于当所述判断模块的结果为否时,执行所述根据所述最大线程数和 单次记录数生成导出任务的步骤。优选的,还包括保存模块,用于保存本次导出时的导出条件和导出的记录总数。优选的,所述生成模块具体包括第一获取子模块,用于从数据库中获取所述待导出数据的第一记录数;计算子模块,用于根据所述单次记录数和所述第一记录数,计算当前任务的线程 个数;创建线程子模块,用于按照所述线程个数创建线程,并按照所述单次记录数为每 个所述创建的线程分配数据区间;启动线程子模块,用于按照所述数据区间启动所述创建的每一个线程。优选的,所述导出模块具体包括
第二获取子模块,用于获取每个线程的数据区间对应的待导出数据;生成子模块,用于调用相应的目标格式文件组件,将所述待导出数据生成对应个 数的目标格式的文件。优选的,还包括返回模块,用于在同步模式下,直接将所述导出的结果文件返回至客户端。与现有技术相比,本申请包括以下优点在本申请实施例中,通过待导出数据的导出条件和导出配置信息,所述导出配置 信息包括单个任务的最大线程数,和,每个线程的单次记录数;可以由根据所述导出条件、 最大线程数和单次记录数生成导出任务;依据所述导出任务对所述待导出数据进行导出。 在本申请实施例中,所述最大线程数即为当前导出操作请求可以分配的线程个数,即是通 过将当前导出操作分配至多个线程来完成,由此,避免了在大数据量情况下,单线程操作的 响应时间过长的问题,提高了大数据量的导出效率。当然,实施本申请的任一产品并不一定 需要同时达到以上所述的所有优点。
为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现 有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本 申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可
以根据这些附图获得其他的附图。
图1是本申请的--种·〔据导出的方法实施例1的流程图2是本申请的--种·〔据导出的方法实施例2的流程图3是本申请的--种·〔据导出的方法实施例3的流程图4是本申请的--种·〔据导出的装置实施例1的结构框图
图5是本申请的--种·〔据导出的装置实施例2的结构框图
图6是本申请的-一种·〔据导出的装置实施例3的结构框图。
具体实施例方式下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完 整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于 本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他 实施例,都属于本申请保护的范围。本申请可用于众多通用或专用的计算装置环境或配置中。例如个人计算机、服务 器计算机、手持设备或便携式设备、平板型设备、多处理器装置、包括以上任何装置或设备 的分布式计算环境等等。本申请可以在由计算机执行的计算机可执行指令的一般上下文中描述,例如程序 模块。一般地,程序模块包括执行特定任务或实现特定抽象数据类型的例程、程序、对象、组 件、数据结构等等。也可以在分布式计算环境中实践本申请,在这些分布式计算环境中,由 通过通信网络而被连接的远程处理设备来执行任务。在分布式计算环境中,程序模块可以 位于包括存储设备在内的本地和远程计算机存储介质中。
本申请的主要思想包括,本申请实施例中采用多个线程来处理用户的每一个导出 请求,即是通过接收到的导出配置信息,所述导出配置信息包括单个任务的最大线程数, 和,每个线程的单次记录数,并根据所述最大线程数和单次记录数,还有待导出数据的导出 条件生成导出任务;最后依据所述导出任务对所述待导出数据进行导出。由于所述单个任 务的最大线程数即是当前导出操作任务可以分配的最大线程个数,这样就可以通过最大线 程数,以及每一个线程的单次记录数来生成导出任务,从而无需在大数据量的情况下,采用 多线程导出的方式,就减少了导出操作请求的响应时间,从而提高了数据的导出效率。参考图1,示出了本申请一种数据导出的方法实施例1的流程图,可以包括以下步 骤步骤101 接收待导出数据的导出条件和导出配置信息,所述导出配置信息包括 单个任务的最大线程数,和,每个线程的单次记录数;在本实施例中,所述待导出数据的导出条件可以理解为导出结果文件的筛选条 件,例如数据库中存储有大量的客户数据,其中客户数据中包括客户所属地区及所属行 业。若要导出某一地区A的某一行业B的客户数据,则A和B即为该导出操作的导出条件, 所述客户数据则为待导出数据,所述待导出数据存放在数据库中;因为本申请实施例中采 用多个线程来处理用户的一个导出请求,则所述导出配置信息可以包括单个任务的最大 线程数和每个线程的单次记录数;所述单个任务的最大线程数为用户的每一个导出请求可 以分配的最大线程数目,所述每个线程的单次记录数为每一个线程能够处理的记录数目, 所述记录是数据库的一个基本概念,在实际中一个记录就对应数据库中的一行原始数据; 就前面例子而言,一个记录就是一个客户数据;例如,当最大线程数为80,单次记录数为10 万时,表示用户的每个导出请求最多可以分配给80个线程来处理,每一个线程最多可以处 理10万个记录;当待导出数据为客户数据,所述记录的总数即为客户的总数;步骤102 根据所述导出条件、最大线程数和单次记录数生成导出任务;在本步骤中,具体可以通过导出条件从数据库中获取到所述待导出数据的记录 数,即是对所述待导出数据进行导出时的总记录数,在本申请实施例中称为第一记录数;其 中,所述待导出数据的记录数和数据库中的数据区间一一对应,所述数据区间即是与记录 数对应的数据库中的待处理数据;同时根据所述最大线程数可以为用户的该次导出请求创 建相应个数的线程,再根据所述第一记录数和单次记录数为所述创建的线程分配记录数, 所述第一记录数与所述单次记录数相除的商即是当前任务所需的线程个数;例如,当查询到所述第一记录数为16万时,而每个线程的单次记录数为10万个, 则需要创建两个线程,第一个线程处理10万个记录,第二个线程处理6万个记录;步骤103 依据所述导出任务对所述待导出数据进行导出。启动所述创建的每一个线程之后,根据所述记录数对应的数据区间,调用相应的 目标格式文件组件将所述待导出数据生成目标格式的文件,例如,EXCEL文件。所述数据区 间为在数据库中的具体是从哪一行到哪一行的一块区间数据,所述记录数是多少个,则在 数据库中对应的数据区间就有多少行数据;其中,需要说明的是,每一个线程对应一个目标 格式的文件,在步骤102中创建了多少个线程,则本步骤中对应生成多少个目标格式的文 件,则需要根据前面的两个线程生成两个EXCEL文件。在实际应用中,在同步模式下,可以直接将所述导出的结果文件返回至客户端,如果是异步模式下,则系统可以不返回该导出的结果文件给客户端,可以保存在文件系统中, 用户在后续需要该导出结果文件时,可以通过结果管理组件提供的导出结果下载页面来从 文件系统中查询结果文件。在本实施例中,将用户发起的一次导出请求操作,通过多个线程来实现数据的导 出,和现有技术中单线程处理导出请求操作相比,可以在待导出数据的数据量较大的时候, 能够减少系统的响应时间,从而提高待导出数据的导出效率。参考图2,示出了本申请一种数据导出的方法实施例2的流程图,可以包括以下步 骤步骤201 接收待导出数据的导出条件和导出配置信息,所述导出配置信息包括 单个任务的最大线程数、缓存失效时间和每个线程的单次记录数;在本实施例中,所述导出配置信息还可以包括缓存失效时间,所述缓存失效时间 为预先设定的一个时间参数,例如,可以为60分钟,或12小时;所述缓存失效时间表示在该 段时间内,可以认为在相同导出条件下的相邻两次导出操作的导出数据是相同的;即是如 果相同导出条件下的相邻两次导出操作的导出数据尽管内容是一致的,但是如果两次间隔 时间超出了所述缓存失效时间,则在实际中就认为这两次的导出数据并不是相同的;其中, 所述缓存失效时间可以根据对于待导出数据的精度要求,或者数据库中待导出数据的读写 特点进行设定;所述缓存失效时间越短则精度越高;例如,当数据库中“写”的操作较多,就 可以将缓存失效时间适当调小一点,如果“写”的操作较少,一两天内都不会更新,则可以适 当的将所述缓存失效时间适当的调大一点;具体缓存失效时间的设置可以根据统计数据库 中相邻两次“写”操作的平均时间间隔设定,可以设置缓存失效时间小于相邻两次“写”操 作的平均时间间隔。所述单个任务的最大线程数、缓存失效时间和每个线程的单次记录数可以根据需 要预先设定,当然还可以采用默认值,例如,所述最大线程数的默认值为80,所述单次记录 数默认值为10万个,所述缓存失效时间的默认值为60分钟;步骤202 根据所述导出条件从数据库中获取所述待导出数据的第一记录数;所述数据库中保存有待导出数据,根据导出条件可以查询到相应的待导出数据, 所述数据库中还包括有导出该待导出数据的第一记录数;步骤203 比较所述第一记录数与上一次相同导出条件下导出时的第二记录数;获取到上一次相同的导出条件下导出时的第二记录数,该第二记录数为相同导出 条件下与本次导出时间上最接近的一次导出操作时的记录总数;步骤204 当所述第一记录数与第二记录数相等时,判断所述上一次进行导出操 作时的导出时间是否在所述缓存失效时间内,如果否,则进入步骤205,如果是,则直接获取 上一次的导出结果文件;当所述第一记录数与所述第二记录数相等时,则继续判断上一次进行导出操作时 的导出时间,是否在所述缓存失效时间内,如果在该缓存失效时间内,则表示上一次导出时 的数据与本次需要导出的待导出数据相同,则此时直接从文件系统中获取到上一次的导出 结果文件,作为本次导出的导出结果文件即可;如果不在所述缓存失效时间内,则表示上一 次导出时的数据与本次的待导出数据并不相同,则进入步骤205;步骤205 根据所述导出任务、最大线程数和单次记录数生成导出任务;
步骤206 依据所述导出任务对所述待导出数据进行导出。步骤207 保存本次导出时的导出条件和导出的记录总数。在本实施例中,还需要将本次导出的导出条件和导出时的记录总数记录下来,以 便于下一次导出时,能够根据保存的记录总数来判断是否需要直接返回已有的导出结果文 件。其中,当第一记录数与第二记录数相等时,记录总数就与两者均相等;当所述第一记录 数与第二记录数不相等时,所述记录总数与所述第一记录数相等。本实施例与上一个实施例的不同之处在于,本实施例可以提前判断与本次导出操 作相邻的导出操作是否与本次导出的导出条件相等,如果相同,则直接获取到已有的导出 结果文件即可,如果不相等,则再进行待导出数据的导出操作,这样就能够在提高导出请求 的响应速度的同时,还能够提高数据的导出效率。参考图3,示出了本申请一种数据导出的方法实施例3的流程图,可以包括以下步 骤步骤301 接收待导出数据的导出条件和导出配置信息,所述导出配置信息包括 单个任务的最大线程数,和,每个线程的单次记录数;步骤302 根据所述导出条件从数据库中获取所述待导出数据的第一记录数;步骤303 根据所述单次记录数和所述第一记录数,计算当前任务的线程个数;将所述第一记录数与所述单次记录数相除,所得的商即为当前任务需要启动的线 程个数;如果得到的商为小数,则向上取整数作为商;步骤304 按照所述线程个数创建线程,并按照所述单次记录数为每个所述创建 的线程分配数据区间;按照步骤303中创建的线程个数和单次记录数为各个线程分配数据区间,例如, 当第一个线程的记录数为10万个时,则该第一个线程的数据区间的起始位置为第1个记录 对应的待导出数据在数据库中的位置,结束位置为第10万个记录对应的待导出数据在数 据库中的位置;步骤305 按照所述数据区间启动所述创建的每一个线程;按照所述为每个线程分配的数据区间启动每一个线程,其中,所述线程的个数即 为数据区间的块数,也即是将所有的待导出数据进行了分块,每一个线程负责其中一块待 导出数据的导出操作;步骤306 获取每个线程的数据区间对应的待导出数据;根据数据区间从数据库中查询获得对应的待导出数据;步骤307 调用相应的目标格式文件组件,将所述待导出数据生成对应个数的目 标格式的文件。可以调用相应的目标格式文件组件,例如EXCEL组件,来将该若干个待导出数据 生成对应个数的EXCEL格式的文件;本实施例还可以包括步骤308 在同步模式下,直接将所述导出的结果文件返回至客户端。对于前述的各方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但 是本领域技术人员应该知悉,本申请并不受所描述的动作顺序的限制,因为依据本申请,某 些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作和模块并不一定是本申请所必须的。与上述本申请一种数据导出的方法实施例1所提供的方法相对应,参见图4,本申 请还提供了一种数据导出的装置实施例1,在本实施例中,该装置可以包括接收模块401,用于接收待导出数据的导出条件和导出配置信息,所述导出配置信 息包括单个任务的最大线程数,和,每个线程的单次记录数;在本实施例中,所述待导出数据的导出条件可以理解为导出结果文件的筛选条 件,例如数据库中存储有大量的客户数据,其中客户数据中包括客户所属地区及所属行 业。若要导出某一地区A的某一行业B的客户数据,则A和B即为该导出操作的导出条件, 所述客户数据则为待导出数据,所述待导出数据存放在数据库中;因为本申请实施例中采 用多个线程来处理用户的一个导出请求,则所述导出配置信息可以包括单个任务的最大 线程数和每个线程的单次记录数;所述单个任务的最大线程数为用户的每一个导出请求可 以分配的最大线程数目,所述每个线程的单次记录数为每一个线程能够处理的记录数目, 所述记录是数据库的一个基本概念,在实际中一个记录就对应数据库中的一行原始数据; 就前面例子而言,一个记录就是一个客户数据;生成模块402,用于根据所述导出条件、最大线程数和单次记录数生成导出任务;具体的,所述生成模块502可以通过导出条件从数据库中获取到所述待导出数据 的记录数,即是对所述待导出数据进行导出时的总记录数,在本申请实施例中称为第一记 录数;其中,所述待导出数据的记录数和数据库中的数据区间一一对应,所述数据区间即是 与记录数对应的数据库中的待处理数据;同时根据所述最大线程数可以为用户的该次导出 请求创建相应个数的线程,再根据所述第一记录数和单次记录数为所述创建的线程分配记 录数,所述第一记录数与所述单次记录数相除的商即是当前任务所需的线程个数;导出模块403,用于依据所述导出任务对所述待导出数据进行导出。启动所述创建的每一个线程之后,根据所述记录数对应的数据区间,调用相应的 目标格式文件组件将所述待导出数据生成目标格式的文件,需要说明的是,每一个线程对 应一个目标格式的文件。本实施例中,所述装置可以通过多个线程来实现数据的导出,和现 有技术中单线程处理导出请求操作相比,可以在待导出数据的数据量较大的时候,能够减 少系统的响应时间,从而提高待导出数据的导出效率。与上述本申请一种数据导出的方法实施例2所提供的方法相对应,参见图5,本申 请还提供了一种数据导出的装置的优选实施例2,在本实施例中,该装置具体可以包括接收模块501,用于接收待导出数据的导出条件和导出配置信息,所述导出配置信 息包括单个任务的最大线程数、缓存失效时间和每个线程的单次记录数;在本实施例中,所述导出配置信息还可以包括缓存失效时间,所述缓存失效时间 为预先设定的一个时间参数,例如,可以为60分钟,或12小时;所述缓存失效时间表示在该 时间内,相同导出条件的相邻两次导出操作的待导出数据相同;其中,所述缓存失效时间可 以根据对于待导出数据的精度要求,或者数据库中待导出数据的读写特点进行设定;所述 缓存失效时间越短则精度越高;例如,当数据库中“写”的操作较多,就可以将缓存失效时间 适当调小一点,如果“写”的操作较少,一两天内都不会更新,则可以适当的将所述缓存失效 时间适当的调大一点;其中,所述导出配置信息在实际中还可以采用配置组件来实现。所述单个任务的最大线程数、缓存失效时间和每个线程的单次记录数可以根据需要预先设定,当然还可以采用默认值,例如,所述最大线程数的默认值为80,所述单次记录 数默认值为10万个,所述缓存失效时间的默认值为60分钟;获取模块502,用于从数据库中获取所述待导出数据的第一记录数;所述数据库中保存有待导出数据,根据导出条件可以查询到相应的待导出数据, 所述数据库中还包括有导出该待导出数据的第一记录数;比较模块503,用于比较所述第一记录数与上一次相同导出条件下导出时的第二 记录数;所述比较模块503获取到上一次相同的导出条件下导出时的第二记录数,该第二 记录数为相同导出条件下与本次导出时间上最接近的一次导出操作时的记录总数;判断模块504,用于当所述第一记录数与第二记录数相等时,判断所述上一次进行 导出操作时的导出时间是否在所述缓存失效时间内;当所述第一记录数与所述第二记录数相等时,则继续判断上一次进行导出操作时 的导出时间,是否在所述缓存失效时间内,如果在该缓存失效时间内,则表示上一次导出时 的数据与本次需要导出的待导出数据相同,则此时直接从文件系统中获取到上一次的导出 结果文件,作为本次导出的导出结果文件即可;如果不在所述缓存失效时间内,则表示上一 次导出时的数据与本次的待导出数据并不相同;其中,需要说明的是,在实际应用中,前述四个模块的功能可以通过缓存组件来实 现;执行模块505,用于当所述判断模块的结果为否时,执行所述根据所述最大线程数 和单次记录数生成导出任务的步骤。导出模块506,用于依据所述导出任务对所述待导出数据进行导出。保存模块507,用于保存本次导出时的导出条件和导出的记录总数。在本实施例中,还需要由保存模块607将本次导出的导出条件和导出时的记录总 数记录下来,以便于下一次导出时,能够根据保存的记录总数来判断是否需要直接返回已 有的导出结果文件。其中,当第一记录数与第二记录数相等时,记录总数就与两者均相等; 当所述第一记录数与第二记录数不相等时,所述记录总数与所述第一记录数相等。与上述本申请一种数据导出的方法实施例2所提供的方法相对应,参见图6,本申 请还提供了一种数据导出的装置的优选实施例2,在本实施例中,该装置具体可以包括接收模块601,用于接收待导出数据的导出条件和导出配置信息,所述导出配置信 息包括单个任务的最大线程数,和,每个线程的单次记录数;第一获取子模块602,用于从数据库中获取所述待导出数据的第一记录数;计算子模块603,用于根据所述单次记录数和所述第一记录数,计算当前任务的线 程个数;创建线程子模块604,用于按照所述线程个数创建线程,并按照所述单次记录数为 每个所述创建的线程分配数据区间;启动线程子模块605,用于按照所述数据区间启动所述创建的每一个线程。第二获取子模块606,用于获取每个线程的数据区间对应的待导出数据;生成子模块607,用于调用相应的目标格式文件组件,将所述待导出数据生成对应 个数的目标格式的文件。
返回模块608,用于在同步模式下,直接将所述导出的结果文件返回至客户端。需要说明的是,本说明书中的各个实施例均采用递进的方式描述,每个实施例重 点说明的都是与其他实施例的不同之处,各个实施例之间相同相似的部分互相参见即可。 对于装置类实施例而言,由于其与方法实施例基本相似,所以描述的比较简单,相关之处参 见方法实施例的部分说明即可。还需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个 实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间 存在任何这种实际的关系或者顺序。术语“包括”、“包含”或者其任何其他变体意在涵盖非 排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素, 而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固
有的要素。在没有更多限制的情况下,由语句“包括一个......”限定的要素,并不排除在
包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。以上对本申请所提供的一种数据导出的方法和装置进行了详细介绍,本文中应用 了具体个例对本申请的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解 本申请的方法及其核心思想;同时,对于本领域的一般技术人员,依据本申请的思想,在具 体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本申请 的限制。
权利要求
1.一种数据导出的方法,其特征在于,该方法包括接收待导出数据的导出条件和导出配置信息,所述导出配置信息包括单个任务的最大 线程数,和,每个线程的单次记录数;根据所述导出条件、最大线程数和单次记录数生成导出任务; 依据所述导出任务对所述待导出数据进行导出。
2.根据权利要求1所述的方法,其特征在于,所述导出配置信息还包括缓存失效时间; 则所述方法还包括根据所述导出条件从数据库中获取所述待导出数据的第一记录数; 比较所述第一记录数与上一次相同导出条件下保存的第二记录数; 当所述第一记录数与第二记录数相等时,判断所述上一次进行导出操作时的导出时间 是否在所述缓存失效时间内;如果否,则执行所述根据所述导出条件、最大线程数和单次记录数生成导出任务的步骤。
3.根据权利要求2所述的方法,其特征在于,所述依据所述导出任务对所述待导出数 据进行导出之后,还包括保存本次导出时的导出条件和记录总数。
4.根据权利要求1所述的方法,其特征在于,所述根据所述导出条件、最大线程数和单 次记录数生成导出任务,具体包括根据所述导出条件从数据库中获取所述待导出数据的第一记录数; 根据所述单次记录数和所述第一记录数,计算当前任务的线程个数; 按照所述线程个数创建线程,并按照所述单次记录数为每个所述创建的线程分配数据 区间;按照所述数据区间启动所述创建的每一个线程。
5.根据权利要求4所述的方法,其特征在于,所述依据所述导出任务对所述待导出数 据进行导出,具体包括获取每个线程的数据区间对应的待导出数据;调用相应的目标格式文件组件,将所述待导出数据生成对应个数的目标格式的文件。
6.根据权利要求4所述的方法,其特征在于,所述依据所述导出任务和导出条件对所 述待导出数据进行导出之后,还包括在同步模式下,直接将所述导出的结果文件返回至客户端。
7.一种数据导出的装置,其特征在于,该装置包括接收模块,用于接收待导出数据的导出条件和导出配置信息,所述导出配置信息包括 单个任务的最大线程数,和,每个线程的单次记录数;生成模块,用于根据所述导出条件、最大线程数和单次记录数生成导出任务; 导出模块,用于依据所述导出任务对所述待导出数据进行导出。
8.根据权利要求7所述的装置,其特征在于,所述装置还包括 获取模块,用于从数据库中获取所述待导出数据的第一记录数;比较模块,用于比较所述第一记录数与上一次相同导出条件下导出时的第二记录数; 判断模块,用于当所述第一记录数与第二记录数相等时,判断所述上一次进行导出操作时的导出时间是否在所述缓存失效时间内;执行模块,用于当所述判断模块的结果为否时,执行所述根据所述最大线程数和单次 记录数生成导出任务的步骤。
9.根据权利要求7所述的装置,其特征在于,还包括保存模块,用于保存本次导出时的导出条件和导出的记录总数。
10.根据权利要求7所述的装置,其特征在于,所述生成模块具体包括 第一获取子模块,用于从数据库中获取所述待导出数据的第一记录数;计算子模块,用于根据所述单次记录数和所述第一记录数,计算当前任务的线程个数;创建线程子模块,用于按照所述线程个数创建线程,并按照所述单次记录数为每个所 述创建的线程分配数据区间;启动线程子模块,用于按照所述数据区间启动所述创建的每一个线程。
11.根据权利要求7所述的装置,其特征在于,所述导出模块具体包括 第二获取子模块,用于获取每个线程的数据区间对应的待导出数据;生成子模块,用于调用相应的目标格式文件组件,将所述待导出数据生成对应个数的 目标格式的文件。
12.根据权利要求7所述的装置,其特征在于,还包括返回模块,用于在同步模式下,直接将所述导出的结果文件返回至客户端。
全文摘要
本申请提供了数据导出的方法和装置,所述方法包括接收待导出数据的导出条件和导出配置信息,所述导出配置信息包括单个任务的最大线程数,和,每个线程的单次记录数;根据所述导出条件、最大线程数和单次记录数生成导出任务;依据所述导出任务对所述待导出数据进行导出。与现有技术不同的是,在本申请实施例中,所述方法及装置避免了在大数据量情况下,单线程操作的响应时间过长的问题,提高了大数据量的导出效率。
文档编号G06F9/38GK101996067SQ20091016648
公开日2011年3月30日 申请日期2009年8月19日 优先权日2009年8月19日
发明者奎跃翔 申请人:阿里巴巴集团控股有限公司