发明内容
有鉴于此,本申请实施例的目的是提供一种数据回流的方法和装置,实现快速、高效的数据回流。
为实现上述目的,本申请实施例提供了如下技术方案:
一种数据回流的方法,包括:
将待回流数据从数据仓库抽取到内存中;
根据待回流数据的回流规则确定所抽取的每个待回流数据在生产系统中的目的表;按照所确定的每个待回流数据在生产系统中的目的表将待回流数据进行发送。
将待回流数据从数据仓库抽取到内存中具体为:
通过多个线程同时将待回流数据从数据仓库抽取到内存中。
按照所确定的每个待回流数据在生产系统中的目的表将待回流数据进行发送具体为:
将所有的待回流数据按照在生产系统中的目的表进行分组;
通过多个线程将待回流数据按所述分组进行发送,其中每个线程中每个分组中的待回流数据都被发送至生产系统中的同一个目的表。
所述数据回流规则根据所述生产系统中的目的表的数目以及所述待回流数据的属性确定。
所述待回流数据的属性包括:所述待回流数据的中数字位的数值或者所述待回流数据某个字符串类型字段某一位或者几位的值。
一种数据回流的装置,包括:
抽取单元,用于将待回流数据从数据仓库抽取到内存中;
确定单元,用于根据待回流数据的回流规则确定所抽取的每个待回流数据在生产系统中的目的表;
分发单元,用于按照所确定的每个待回流数据在生产系统中的目的表将待回流数据进行发送。
所述抽取单元,具体通过多个线程同时将待回流数据从数据仓库抽取到内存中。
所述分发单元包括:
分组子单元,用于将所有的待回流数据按照在生产系统中的目的表进行分组;
发送子单元,用于通过多个线程将待回流数据按所述分组进行发送,其中每个线程中每个分组中的待回流数据都被发送至生产系统中的同一个目的表。
所述数据回流规则根据所述生产系统中的目的表的数目以及所述待回流数据的属性确定。
所述待回流数据的属性包括:所述待回流数据的中数字位的数值或者所述待回流数据某个字符串类型字段某一位或者几位的值。
可见,在本申请实施例中,将待回流数据从数据仓库抽取到内存中;根据数据回流规则确定所抽取的每个待回流数据在生产系统中的目的表;按照所确定的每个待回流数据在生产系统中的目的表将待回流数据进行发送。本申请实施例有效解决了回流过程中数据仓库大表中的数据回流到多个生产系统中小表的问题。本申请实施例所提供的方法使得数据回流过程中,数据仓库表只需要将待回流数据准备好即可,避免了现有技术中将数据仓库的一个大表分成与生产系统对应的多个小表的冗余操作,极大的提高了回流的配置效率,也极大的降低了回流耗费的时间。
具体实施方式
为了使本技术领域的人员更好地理解本申请中的技术方案,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都应当属于本申请保护的范围。
请参考图1,为本申请实施例一方法流程图,可以包括以下步骤:
S101,将待回流数据从数据仓库抽取到内存中;
而本申请实施例中,首先将待回流的数据从数据仓库抽取到内存中。
实际应用中,将待回流数据从数据仓库抽取到内存时,可以通过多个线程同时进行,例如通过10个线程从数据仓库中同时抽取待回流数据到内存中。这样可以提高数据抽取的速率。将待回流数据抽取到内存中可以一次将数据仓库中的所有数据均抽取到内存中,也可以分批抽取,当处理完当前批次的待回流数据后再处理下一批次的待回流数据,这样可以提高处理的效率。
S102,根据数据回流规则确定所抽取的每个待回流数据在生产系统中的目的表;
数据回流规则规定了数据仓库中的数据具体回流到生产系统中的哪个目的表,数据回流规则可以根据生产系统中目的表的数目以及待回流数据的属性确定。例如可以根据待回流数据的某数字字段的值除以生成系统中目的表的数据得到的余数来确定;或者根据待回流数据某个字符串类型字段某几位的值来确定;或者通过对行数据中一列或多列的值进行特殊的函数变化后的结果来确定。
数据仓库中的每个待回流的数据在生产系统中都有目的表,即一个待回流数据要被送往的生产系统中的数据库中的具体的表。一个待回流数据可能只有一个目的表,也可能有多个目的表。
通过S102就确定了每个待回流数据在生产系统中的目的表,就相当于给所有的待回流数据打上了标签。
S103,按照所确定的每个待回流数据在生产系统中的目的表将待回流数据进行发送。
如前所述,通过S102,已经为待回流数据都打好了标签,此时,就是根据每个待回流数据的标签将它们从内存中分别进行发送,发送到它们在生产系统中的目的表中去。实际应用中可以分批将待回流数据抽取到内存中,当确定了该批次中的每个待回流数据在生产系统中的目的表后,将该批次待回流数据从内存发送到相应的目的表中,通过这种方式可以提高数据回流的效率。
可选地,为了提高数据的发送效率,仍然可以通过多个线程对待回流的数据进行同时发送。
进一步地,可以通过如下方式进行:
首先,按照待回流数据在生产系统中的目的表对所有的待回流数据进行分组。
例如,现在有100个待回流数据,通过S102之后,确定它们在生产系统中共有15个目的表,编号分别为001~015,那么就将目的表为001的待回流数据归为001组,将目的表为002的待回流数据归为002组,依次类推,直至将目的表为015的数据归为015组。
然后,通过多个线程将待回流数据进行发送,其中每个线程中每个分组的待回流数据都被发送至生产系统中的同一个目的表。
仍然以上面的情况为例,例如可以通过一个5个线程同时发送上述100个待回流数据,分三批次发送,每个批次发送5个组的数据,例如001~005组的待回流数据作为第一个批次进行发送。其中线程1可以用来发送001组的待回流数据,这组数据的目的表都是编号为001的生产系统中的目的表。依此类推,线程5可以用来发送005组的待回流数据,这组数据的目的表都是编号为005的生产系统中的目的表。
当然,每个组的待回流数据的数据流可能是不等的,那么可能有的线程的数据发送的快,有的发送的慢,应用中可以根据实际情况对每个线程发送的组次进行调节,例如可以将数据最多的组与数据最少的组放在同一个线程中发送,这样从整体上使各个线程发送的数据量达到平衡,最终实现在最短的时间内将所有的待发送数据发送完。
现有的生产系统的数据库将一个逻辑表数据分布到多个物理表中,这使得数据仓库中数据的回流面临了极大的挑战,现有的方法是在数据仓库建立与生产系统中对应的多个物理表,即针对生产系统中每一个分表在数据仓库中建立对应表,首先将数据仓库中大表的数据分别插入到多个分表里,然后将数据仓库中分表中的数据回流到生产系统中对应的生产分表里,这导致在初始化的时候要在数据仓库产生大量的分表和配置工作,配置规则和数量异常庞大,也导致了整体回流时间的延长和复杂度的提高,从而严重的影响了将数据仓库中的数据同步到生产系统中的效率和简便性。
本申请实施例有效解决了回流过程中数据仓库大表中的数据回流到多个生产系统中小表的问题。本申请实施例所提供的方法使得数据回流过程中,数据仓库表只需要将待回流数据准备好即可,避免了现有技术中将数据仓库的一个大表分成与生产系统对应的多个小表的冗余操作,极大的提高了回流的配置效率,也极大的降低了回流耗费的时间。
下面以一个网络中的应用为例对本申请实施例所提供的方法进行进一步的说明。
例如现在要统计电子商务网站上某个用户在近期可能感兴趣的商品,参见图2,对统计结果进行数据分流操作具体包括:
S201,将用户感兴趣的商品放到推荐商品表里,并在数据仓库中生成一个结果表recommend_item_list。
结果表的结构可以参见表1。
表1
User_id |
用户ID |
Item_id |
商品ID |
从表1中可以看出,结果表包括用户ID以及用户所感兴趣的商品的ID。
S202,从数据库中将待回流的结果表中的数据抽取到内存中。
本申请实施例中,为了提高数据抽取速度,通过10线程同时从数据仓库的结果表中抽取数据。
当采用多线程从数据仓库中抽取数据时,为了避免数据被重复抽取,可以预先设定每个线程的数据抽取范围,这样多个线程分工协作,就能够高效地实现待回流数据的抽取工作。
S203,根据用户的数字ID与1024相除得到的余数(处理函数为用户数字ID与1024相除得到的余数)进行分表,不同的余数分到不同的目的表中。如果ID是字符串,则可以对字符串进行函数处理,将待回流数据对应到目的表中。例如如果目的表为24个,则可以根据字符串的第一位的字母将待回流数据与24个目的表进行对应。
本申请实施例中,生产系统中存在1024张表,编号为recommend_item_list_0001~recommend_item_list_1024,结构与数据仓库中的结果表相同。
本申请实施例中采用的回流规则为根据用户的数字ID与1024相除得到的余数进行分表的。实际上,当分流完成后,每个目的表中的数据内容仅是数据仓库中结果表数据的一个子集,是根据用户的数字ID与1024相除得到的余数进行分表的,不同的余数分到不同的目的表中。
S204,按照待回流数据在生产系统中的目的表将所有的待回流数据分成1024个组。
S205,通过16个线程将待回流数据进行发送,其中每个线程中每个分组的待回流数据都被发送至生产系统中的同一个目的表。
在本申请实施例中,待回流数据被分成1024个组,每个组中的数据都有相同的目的表。为了提高待回流数据的回流速度,本申请实施例通过16个线程来同时发送待回流的数据。每个线程发送64组待回流数据。
具体的线程数和每个线程发送的待回流数据的分组个数可以根据实际设备的情况确定,本申请对此不做限定。
现有技术在进行数据回流时会根据生产系统的要求在数据仓库中生成对应的1024张表,对表结构的变更可能导致表的数据计算和回流时间变长,成为回流的瓶颈,严重的可能会导致回流时间非常长。如果回流数据的时间被延迟到生产系统数据库负载高峰期的时段,还将影响到生产系统的稳定,本申请实施例所提供的方法只需要在数据仓库中生成一个结果表即可,然后确定每个待回流数据的目的表,根据待回流数据的目的表发送数据,避免了在数据仓库中建立众多分表的过程,从而保存了数据仓库原有的数据结构,从而避免了因为对数据仓库结构的改变而可能导致的表的数据计算和回流时间变长,回流时间非常长,甚至影响到生产系统的稳定的问题,极大地缩短了数据回流的时间,提高了数据回流的效率。
参见图3,本申请实施例还提供一种数据回流的装置,包括:
抽取单元301,用于将待回流数据从数据仓库抽取到内存中;
确定单元302,用于根据待回流数据的回流规则确定所抽取的每个待回流数据在生产系统中的目的表;
数据回流规则可以根据生产系统中的目的表的数目以及所述待回流数据的属性确定。待回流数据的属性包括:所述待回流数据的中数字位的数值或者所述待回流数据某个字符串类型字段某一位或者几位的值。
例如,本申请一实施例中的数据规则就根据目的表数目以及待回流数据的数字位的数据值确定。
分发单元303,用于按照所确定的每个待回流数据在生产系统中的目的表将待回流数据进行发送。
实际应用中,为了提高本申请实施例所提供的进行数据回流操作的效率,所述抽取单元301具体通过多个线程同时将待回流数据从数据仓库抽取到内存中。
参见图4,本申请另一实施例中,所述分发单元303包括:
分组子单元401,用于将所有的待回流数据按照在生产系统中的目的表进行分组;
发送子单元402,用于通过多个线程将待回流数据进行发送,其中每个线程中的待回流数据都被发送至生产系统中的同一个目的表。
例如,现在有100个待回流数据,通过确定单元302确定了每个待回流数据的目的表首先通过分组子单元401对它们进行分组,假设确定单元302确定它们在生产系统中共有15个目的表,编号分别为001~015,则分组子单元401就将目的表为001的待回流数据归为001组,将目的表为002的待回流数据归为002组,依次类推,直至将目的表为015的数据归为015组。发送子单元通过一个5个线程同时发送上述100个待回流数据,分三批次发送,每个批次5各组,例如001~005组的待回流数据作为第一个批次进行发送。其中线程1可以用来发送001组的待回流数据,这组数据的目的表都是编号为001的生产系统中的目的表。依此类推,线程5可以用来发送005组的待回流数据,这组数据的目的表都是编号为005的生产系统中的目的表。
当然,每个组的待回流数据的数据流可能是不等的,那么可能有的线程的数据发送的快,有点发送的慢,实际应用中发送子单元可以根据实际情况对每个线程发送的组次进行调节,例如可以将数据最多的组与数据最少的组放在同一个线程中发送,这样从整体上使各个线程发送的数据量达到平衡,最终实现在最短的时间内将所有的待发送数据发送完。
本申请实施例所提供的装置避免了在数据仓库中建立众多分表的过程,保存了数据仓库原有的数据结构,从而避免了因为对数据仓库结构的改变而可能导致的表的数据计算和回流时间变长,回流时间非常长,甚至影响到生产系统的稳定的问题,极大地缩短了数据回流的时间,提高了数据回流的效率。有效解决了回流过程中数据仓库大表中的数据回流到多个生产系统中小表的问题。
为了描述的方便,描述以上装置时以功能分为各种单元分别描述。当然,在实施本申请时可以把各单元的功能在同一个或多个软件和/或硬件中实现。
通过以上的实施方式的描述可知,本领域的技术人员可以清楚地了解到本申请可借助软件加必需的通用硬件平台的方式来实现。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本申请各个实施例或者实施例的某些部分所述的方法。
本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于系统实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
本申请可用于众多通用或专用的计算系统环境或配置中。例如:个人计算机、服务器计算机、手持设备或便携式设备、平板型设备、多处理器系统、基于微处理器的系统、置顶盒、可编程的消费电子设备、网络PC、小型计算机、大型计算机、包括以上任何系统或设备的分布式计算环境等等。
本申请可以在由计算机执行的计算机可执行指令的一般上下文中描述,例如程序模块。一般地,程序模块包括执行特定任务或实现特定抽象数据类型的例程、程序、对象、组件、数据结构等等。也可以在分布式计算环境中实践本申请,在这些分布式计算环境中,由通过通信网络而被连接的远程处理设备来执行任务。在分布式计算环境中,程序模块可以位于包括存储设备在内的本地和远程计算机存储介质中。
虽然通过实施例描绘了本申请,本领域普通技术人员知道,本申请有许多变形和变化而不脱离本申请的精神,希望所附的权利要求包括这些变形和变化而不脱离本申请的精神。