具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
图1为本发明实施例提供的一种数据同步处理方法的流程图,如图1所示,本实施例的方法包括如下步骤:
步骤100,依序从CRM数据库中读取多条数据变更日志至输入队列中;
随着CRM系统与BOSS系统的解耦的势在必行,CRM系统中存储的用户数据的变更轨迹,必须严格按照原变更顺序及变更方式同步到BOSS系统中。在CRM系统管理了大量的用户资料数据,而对于每个用户资料的每次变更,例如数据的插入、修改、删除及变更字段等,CRM系统均会采用触发器或其他技术手段将该变更轨迹以数据变更日志的方式记录到CRM数据库中。本实施例中,为了实现CRM系统与BOSS系统间的用户数据变更轨迹的同步,设置在CRM-BOSS同步接口的数据同步设备中的数据读取模块将从CRM数据库中顺序读取出各数据变更日志,并将读取出的多条数据变更日志依序存储至输入队列中。该输入队列具有预设大小的存储容量,能够存储一定长度的数据变更日志。
步骤101,同时对输入队列中的多条数据变更日志进行分析处理,生成对应的多条SQL语句;
数据读取模块依序将从CRM数据库中读取出的多条数据变更日志输入至输入队列之后,数据同步设备中的分析处理模块将对输入队列中的各数据变更日志进行分析处理,以根据数据变更日志中的数据变更信息生成对应的SQL语句。在本实施例中,数据同步设备对各数据变更日志进行的分析处理采取并行处理的方式,即在本实施例中,分析处理模块采用多个分析处理子进程,同时对输入队列中的各数据变更日志进行分析处理,以同时生成对应的SQL语句,从而提高系统的整体处理速度。
步骤102,按照数据变更日志的读取顺序,依序将生成的多条SQL语句输出至BOSS数据库中,以使BOSS系统依序执行每条SQL语句,实现与CRM系统的数据同步。
在根据各数据变更日志生成了对应的SQL语句之后,数据同步设备并不立即将生成的SQL语句输出至BOSS系统中。由于在CRM系统中,各个用户数据的变更都是存在一定的时间顺序的,该时间顺序决定了CRM系统中存储的所有数据变更日志都是按照其生成顺序排列在CRM数据库中的,因此为了保证BOSS系统中存储的用户的数据资料与CRM系统中保存的数据资料保持同步,不发生任何错误,对于数据同步设备而言,必须严格按照数据变更日志在CRM数据库中的排列顺序,将对应的SQL语句输出至BOSS系统的数据库中,以使BOSS系统按照SQL语句的入库顺序,依序执行每条SQL语句,从而依序执行与CRM系统中同样的数据变更操作。
因此在本步骤中,数据同步设备在依据各数据变更日志生成了对应的SQL语句之后,将按照上述步骤100中对数据变更日志的读取顺序,依序将生成的对应的多条SQL语句输出至BOSS数据库中,以使BOSS系统能够依序地执行每条SQL语句。由于在上述步骤100中,数据读取模块从CRM数据库中对各数据变更日志的读取是依序进行的,即是按照CRM数据库的排列顺序依次读取的,因此在本步骤中,依照数据变更日志的读取顺序将对应的SQL语句输出至BOSS系统中,能够保证BOSS系统与CRM系统之间的数据同步。
本实施例的数据同步处理方法,通过在从CRM数据库中读取出多条数据变更日志之后,对读取出的数据变更日志进行并行处理,同时生成对应的多条SQL语句,而在生成了多条SQL语句后,将生成的各SQL语句按照对应的数据变更日志的读取顺序,输出至BOSS系统数据库中,从而在保证了CRM系统与BOSS系统的数据更改顺序一致的前提下,大大缩短了CRM-BOSS系统间数据同步处理的时间,提高了数据同步处理的速度,降低了CRM数据库的缓存负担。
图2为本发明实施例提供的另一种数据同步处理方法的流程图,如图2所示,本实施例的方法包括如下步骤:
步骤200,依序从CRM数据库中读取多条数据变更日志至输入队列中;
步骤201,按照数据变更日志的读取顺序,为输入队列中的每条数据变更日志对应设置连续的序号标识;
在本实施例中,当设置在CRM系统和BOSS系统同步接口之间的数据同步设备依序从CRM数据库中读取出多条数据变更日志,并将其缓存至输入队列中之后,还将按照数据变更日志的读取顺序,即按照数据变更日志在CRM数据库中的生成顺序,为输入队列中每条数据变更日志对应设置一连续的序号标识。具体地,该序号标识可以从0开始,依次加1,各序号标识标记了各条数据变更日志在CRM系统产生的先后顺序,而为每一条数据变更日志对应设置序号标识的目的在于:使数据同步设备在之后对各数据变更日志进行分析处理,以及进行将分析处理后的SQL语句输出至BOSS数据库中,能够根据该序号标识控制对应的每条SQL语句的入库先后顺序。
步骤202,同时对输入队列中的多条数据变更日志进行分析处理,生成对应的携带有序号标识的多条SQL语句;
在将各数据变更日志写入至输入队列中,以及为输入队列中的各数据变更日志对应设置了连续的序号标识后,数据同步设备中的分析处理模块将对输入队列中的各数据变更日志进行分析处理,以生成对应的SQL语句。在本实施例中,分析处理模块中加载了多个并行的分析处理子进程,在对各数据变更日志进行分析处理的过程中,各分析处理子进程将同时从输入队列中依序提取出对应数目的数据变更日志,并同时对各数据变更日志进行分析处理操作,以同时生成对应数目的多条SQL语句。
具体地,由于在本实施例的上述步骤201中,数据同步设备为读取至输入队列中的各数据变更日志对应设置了连续的序号标识,而在本步骤的分析处理过程,对各数据变更日志中的序号标识并没有进行实质的分析处理,因此,生成的SQL语句中将同样携带对应的该序号标识,用于标识每条SQL语句对应的数据变更在CRM系统中的产生顺序。
此外需要说明的是,在本步骤中,分析处理模块中加载的分析处理子进程的数目并不需要与输入队列的预设存储容量能够存储的数据变更日志的数目一致,而且在实际应用中,将输入队列能够存储的最大数据变更日志的数目设置为大于分析处理子进程的总数目为较优的实现方式。而这样设置的目的在于:分析处理模块的各分析处理子进程在每次从输入队列提取数据变更日志以进行分析处理时,都可以使每个分析处理子进程得到充分的利用,而且在每次分析处理模块根据提取出的各数据变更日志生成了对应的SQL语句之后,数据读取模块无需等待下次分析处理过程的进行,而是可以再一次从CRM数据库中依序读取相应数目的数据变更日志至输入队列中,即数据提取和分析处理是两个异步的过程。
这样,在本实施例的数据同步处理方法中,对数据变更日志的分析处理和对数据变更日志从CRM数据库中的读取可以同时进行,而且对于每个分析处理子进程而言,其分析处理完一条数据变更日志后,可以接着从输入队列中提取下一条数据变更日志进行分析处理,同样无需其余并列的分析处理子进程的处理完成。由于实际应用中,通常数据变更日志读取的速度远快于对数据变更日志的分析处理速度,因此在每个分析处理子进程处理完一条数据变更日志后,无需等待输入队列对数据变更日志的读取时间,而是可以直接地再次依序从输入队列中进行日志的提取和分析处理,从而节省了数据读取的等待时间,从整体上加快了处理速度。
步骤203,按照SQL语句的序号标识,将生成的每条SQL语句对应写入至缓存列表的对应序号的每个存储单元中,以使缓存列表中存储SQL语句的顺序与SQL语句的序号标识的排列顺序一致;
当分析处理模块对多条数据变更日志进行分析处理,生成了对应的多条SQL语句后,由于在本实施例中,各分析处理子进程对各数据变更日志的分析处理速度并不一致,即各SQL语句的生成存在先后顺序,而若直接按照SQL语句的产生顺序将各SQL语句输出至BOSS数据库中,将导致BOSS系统中的用户数据与CRM系统中的数据存在偏差。因此,在本实施例中,为了保证能够将SQL语句能够按照各对应的数据变更日志在CRM系统中产生时间的先后顺序,依序输出至BOSS数据库中,数据同步设备还将进行一系列特殊的排序处理,以保证BOSS系统与CRM系统之间的数据同步。
具体地,在本实施例中,设置了一个用于对分析处理模块生成的SQL语句进行缓存管理的缓存列表,该缓存列表具有一定的存储容量,且设置有一定数目的存储单元,每个存储单元用于存储一条SQL语句。对于每个分析处理子进程而言,当该分析处理子进程生成了一条SQL语句后,将按照生成的该SQL语句中携带的序号标识,将该SQL语句写入至缓存列表的对应序号的每个存储单元中,且SQL语句写入至缓存列表中之后,各SQL语句在缓存列表中的排列顺序应当满足与SQL语句的序号标识的排列顺序保持一致。
优化地,在本实施例中,本步骤对SQL语句在缓存列表的各存储单元的写入还可以包括如下子步骤:
步骤2030,计算各SQL语句的序号标识与已输出至BOSS数据库的SQL语句的数目的差值;
步骤2031,判断上述差值是否小于等于缓存列表的预设长度L,若是则执行步骤2032,若否则执行步骤2034;
在本实施例中,对于分析处理模块输出的每一条SQL语句在缓存列表中的缓存位置,可以通过计算每条SQL语句在缓存列表中对应的存储单元相对于当前指针所指向的当前存储单元的偏移量而得到。具体地,在本实施例中,用于缓存SQL语句的缓存列表具体为一环形队列,每次将SQL语句写入至缓存列表的位置均可以根据当前指针指向的当前存储单元的序号、以及该SQL语句对应的存储单元相对当前存储单元的偏移量决定。但是由于缓存列表中预设的存储单元的个数有限,即缓存列表能够容置SQL语句的条数有限,因此,若直接将分析处理后生成的所有SQL语句均写入至缓存列表中,有可能造成前一SQL语句还未输出至BOSS数据库中,便被后一SQL语句覆盖,而导致最终BOSS数据库的数据发生错误。
于是,为了避免发生上述错误,本实施例中,在计算各SQL语句在缓存列表中对应存储单元的序号,并将SQL语句写入至缓存列表之前,数据同步处理装置将计算生成的各SQL语句的序号标识与当前已输出至BOSS数据库中的SQL语句总数目之间的差值。计算该差值的目的在于,将该差值与缓存列表的预设长度进行比较,以判别是否应当将生成的SQL语句写入至缓存列表中,还是应当等待缓存列表中对应存储单元中的SQL语句输出至BOSS数据库中后,再将生成的该SQL语句写入至缓存列表中。
步骤2032,按照公式Mi=MOD(i-Mall,L),计算每条SQL语句在缓存列表中对应的存储单元相对于当前指针的偏移量;
具体地,设Ni为第i条SQL语句的序号标识,Mall为当前已输出至BOSS数据库的SQL语句的总数目,若SQL语句的序号标识与当前已输出至BOSS数据库中的SQL语句总数目之间的差值Ni-Mall小于缓存列表的预设长度L,代表该SQL语句在缓存列表中对应存储单元中存储的前一条SQL语句已经被输出至BOSS数据库中,即代表数据同步设备可以将该SQL语句写入至缓存列表中。于是,数据同步设备根据该SQL语句的序号标识Ni与Mall之间的差值,计算该SQL语句在缓存列表中对应的存储单元相对于当前指针的偏移量。
具体地,每个SQL语句在缓存列表中对应的存储单元序号与当前指针指向的当前存储单元的序号之间的偏移量可以根据公式Mi=MOD(Ni-Mall,L)计算得到。该公式中,Mi为第i条SQL语句对应的存储单元相对当前指针的偏移量,Ni为第i条SQL语句的序号标识,L为缓存列表的总长度,Mall为则当前已输出至BOSS数据库的SQL语句的总数目。
举例说明,图3为本发明实施例中缓存列表对存储的各SQL语句的输出进行控制的示意图。如图3所示,假设在本实施例中缓存列表的长度L为16,对应设置有16个存储单元,在初始状态,已输出至BOSS数据库的SQL语句的总数目Mall为0,若需要往缓存列表中写入序号标识为4的SQL语句,则根据上述公式可以计算得到M4=MOD(4-0,16)=4,即序号标识为4的SQL语句应当写入至相对当前指针的偏移量为4的存储单元中。
步骤2033,将SQL语句写入至缓存列表中从当前指针指向的存储单元开始,向后偏移对应的偏移量个数目的存储单元中,并执行步骤204;
计算了每个分析处理子进程生成的SQL语句后,数据同步设备将根据当前指针,以及根据计算得到的每个SQL语句对应的偏移量,将每个SQL语句写入至缓存列表的从当前指针指向的当前存储单元开始,向后偏移对应的偏移量个数目的存储单元的存储单元中,并继续执行步骤204。
步骤2034,进入等待状态,以等待缓存列表中新的SQL语句的输出;
而若在上述步骤2031中,SQL语句的序号标识与当前已输出至BOSS数据库中的SQL语句总数目之间的差值Ni-Mall大于缓存列表的预设长度L,代表该SQL语句在缓存列表中对应存储单元中存储的前一条SQL语句还未被输出至BOSS数据库中,即代表数据同步设备此时暂不能将该SQL语句写入至缓存列表中。于是,数据同步设备将该SQL语句写入进程则将进入等待的状态,等待缓存列表中空间足够时再将新的SQL语句写入。
步骤204,当缓存列表中存在序号标识连续SQL语句时,依序将序号标识连续的至少一条SQL语句依序输出至BOSS数据库中;
而由于分析处理模块中,各分析处理子进程的处理速度并不一致,因此可能出现序号标识在前的数据变更日志还未对应生成SQL语句时,序号标识在后的数据变更日志便已经分析处理完成,生成了序号标识在后的SQL语句,因此此时缓存列表中写入的SQL语句将出现如图3B所示的情形。如图3B所示,序号标识为1、3、4的SQL语句预先生成,被写入缓存列表中,但此时序号标识为0、2的SQL语句还未生成,对于此种情形,数据同步设备并不将序号标识为1、3、4的SQL语句输出,而是等待序号标识为0和2的SQL语句的写入,再依序将序号标识为0-5的SQL语句,从而可以保证输出至BOSS数据库中的SQL语句的顺序。
因此在本实施例中,缓存列表在输出SQL语句至BOSS数据库中之前,将对其缓存的所有SQL语句进行检测,只有在检测到其中存在了序号标识连续SQL语句时,才依序将该序号标识连续的各SQL语句输出。如此一来,可以保证了输出至BOSS数据库中的SQL语句都是按照其对应的数据变更日志在CRM系统的变更顺序执行的,从而保证了BOSS数据库中的用户数据与CRM数据库中的用户数据是同步的,不会出现任何差错。
步骤205,根据输出至BOSS数据库的SQL语句的当前数目M,将当前指针向后偏移M个存储单元,并将输出至BOSS数据库的SQL语句的总数目Mall更新为Mall+M,并返回至步骤2030中。
而在输出了一组SQL语句至BOSS数据库之后,为了使保证写入至缓存列表中的SQL语句的有序性及准确性,数据同步设备将根据输出至BOSS数据库的SQL语句的数目,对缓存列表的当前指针所指向的当前存储单元进行更新,并返回至上述步骤203中的按照各SQL语句的序号标识,将生成的各SQL语句对应写入至缓存列表的对应序号的每个存储单元中的步骤。
具体地,由于缓存列表为一环形的存储队列,因此数据同步设备将当前指针循环向后跳转数目为M个的存储单元,M为此次输出至BOSS数据库的SQL语句。此时,输出至BOSS数据库的SQL语句的总数目Mall被更新为Mall+M,其中,M为输出至BOSS数据库的SQL语句的当前数目。如图3D所示,若将序号标识为0-4的SQL语句输出至BOSS数据库之后,当前指针向后偏移了5个存储单元的位置,指向了缓存列表的第5个存储单元,而其此时输出至BOSS数据库的SQL语句的总数目Mall更新为5。从而数据同步设备可以根据新的Mall值,对上次生成的还未写入至缓存列表中的SQL语句,以及新生成的SQL语句的序号标识进行判断,以根据判断结果,再次向缓存列表中写入新的SQL语句。
此外还需要说明的是,在本实施例中,当缓存列表依序将存储的连续序号标识的SQL语句输出至BOSS数据库时,可以先将各SQL语句输出至一输出列表中,例如如图3所示,可以将0-4的SQL语句写入至输出列表进行暂时存储,然后再依序将输出列表中的SQL语句输出至BOSS数据库中,从而进一步地提高了处理的速度。
本实施例的数据同步处理方法,通过在从CRM数据库中读取出多条数据变更日志之后,为各数据变更日志设置对应的序号标识,对读取出的数据变更日志进行并行处理,同时生成对应的多条SQL语句,而在生成了多条SQL语句后,将生成的各SQL语句按照对应的序号标识,有序地输出至BOSS系统数据库中,从而在保证了CRM系统与BOSS系统的数据更改顺序一致的前提下,大大缩短了CRM-BOSS系统间数据同步处理的时间,提高了数据同步处理的速度,降低了CRM数据库的缓存负担。
本领域普通技术人员可以理解:实现上述方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成,前述的程序可以存储于一计算机可读取存储介质中,该程序在执行时,执行包括上述方法实施例的步骤;而前述的存储介质包括:ROM、RAM、磁碟或者光盘等各种可以存储程序代码的介质。
图4为本发明实施例提供的一种数据同步处理设备的结构示意图,如图4所示,本实施例的数据同步处理设备包括数据读取模块11、分析处理模块12和数据输出模块13。其中数据读取模块11用于依序从CRM数据库中读取多条数据变更日志至输入队列中;分析处理模块12用于同时对输入队列中的多条数据变更日志进行分析处理,生成对应的多条SQL语句;数据输出模块13用于按照数据变更日志的读取顺序,依序将对应的多条SQL语句输出至BOSS数据库中,以使BOSS系统依序执行每条述SQL语句,实现与CRM系统的数据同步。
其中,本实施例所涉及的所有功能模块、以及其所涉及的具体工作过程,可以参考上述数据同步处理方法所涉及的实施例揭露的相关内容,在此不再赘述。
本实施例的数据同步处理设备,通过在从CRM数据库中读取出多条数据变更日志之后,对读取出的数据变更日志进行并行处理,同时生成对应的多条SQL语句,而在生成了多条SQL语句后,将生成的各SQL语句按照对应的数据变更日志的读取顺序,输出至BOSS系统数据库中,从而在保证了CRM系统与BOSS系统的数据更改顺序一致的前提下,大大缩短了CRM-BOSS系统间数据同步处理的时间,提高了数据同步处理的速度,降低了CRM数据库的缓存负担。
图5为本发明实施例提供的另一种数据同步处理设备的结构示意图,如图5所示,在上一实施例的技术方案的基础上,本实施例的数据同步处理设备还包括序号标识设置模块14,用于在数据读取模块11依序从CRM数据库中读取多条数据变更日志至输入队列中之后,按照数据变更日志的读取顺序,为输入队列中的每条数据变更日志对应设置连续的序号标识。而分析处理模块12具体用于同时对输入队列中的多条数据变更日志进行分析处理,生成对应的携带有序号标识的多条SQL语句。
进一步地,本实施例中的数据输出模块13还可以包括语句写入模块131和输出模块132。其中,语句写入模块131用于按照SQL语句的序号标识,将生成的每条SQL语句对应写入至缓存列表的对应序号的每个存储单元中,以使缓存列表中存储SQL语句的顺序与SQL语句的序号标识的排列顺序一致;而输出模块132则用于当缓存列表中存在序号标识连续SQL语句时,将序号标识连续的至少一条SQL语句依序输出至BOSS数据库中。
更进一步地,本实施例中的语句写入模块131还可以包括计算子模块1311和写入子模块1312。其中计算子模块1311用于若SQL语句的序号标识与当前已输出至BOSS数据库的SQL语句的数目的差值小于缓存列表的预设长度时,按照公式Mi=MOD(Ni-Mall,L),计算SQL语句在缓存列表中对应的存储单元相对于当前指针指向的当前存储单元的偏移量,其中,Ni为第i条SQL语句的序号标识,Mi为序号标识为i的SQL语句在缓存列表中对应的存储单元相对于当前存储单元的偏移量,L为缓存列表的预设长度,Mall为当前已输出至BOSS数据库的SQL语句的数目。写入子模块1312用于将SQL语句写入至缓存列表中从当前指针指向的存储单元开始,向后偏移对应的偏移量个数目的存储单元的存储单元中。
此外,本实施例的数据同步设备还包括更新模块15,用于在输出模块132将序号标识连续的至少一条SQL语句依序输出至BOSS数据库中之后,据输出至BOSS数据库中的SQL语句的当前数目M,将当前指针向后偏移M个存储单元,并将当前输出至BOSS数据库的SQL语句的数目更新为Mall+M,并返回至语句写入模块131执行按照SQL语句的序号标识,将生成的每条SQL语句写入至缓存列表的对应的每个存储单元中的步骤。
更进一步地,本实施例中的数据读取模块11还可以用于,在分析处理模块12同时对输入队列中的多条数据变更日志进行分析处理,生成对应的多条SQL语句之后,重复执行依序从CRM数据库中读取多条数据变更日志至输入队列中的步骤,以覆盖输入队列中已完成分析处理的数据变更日志。
其中,本实施例所涉及的所有功能模块、以及其所涉及的具体工作过程,同样可以参考上述数据同步处理方法所涉及的实施例揭露的相关内容,在此不再赘述。
本实施例的数据同步处理设备,通过在从CRM数据库中读取出多条数据变更日志之后,为各数据变更日志设置对应的序号标识,对读取出的数据变更日志进行并行处理,同时生成对应的多条SQL语句,而在生成了多条SQL语句后,将生成的各SQL语句按照对应的序号标识,有序地输出至BOSS系统数据库中,从而在保证了CRM系统与BOSS系统的数据更改顺序一致的前提下,大大缩短了CRM-BOSS系统间数据同步处理的时间,提高了数据同步处理的速度,降低了CRM数据库的缓存负担。
图6为本发明实施例提供的一种数据同步处理系统的结构示意图。如图6所示,本实施例的数据同步处理系统包括上述的数据同步处理设备1,以及分别与数据同步处理设备1连接的CRM数据库2和BOSS数据库3。
具体地,本实施例所涉及的所有功能模块、以及其所涉及的具体工作过程,可以参考上述数据同步处理方法以及数据同步处理设备所涉及的实施例揭露的相关内容,在此不再赘述。
本实施例的数据同步处理系统,通过在数据同步处理设备从CRM数据库中读取出多条数据变更日志之后,为各数据变更日志设置对应的序号标识,对读取出的数据变更日志进行并行处理,同时生成对应的多条SQL语句,而在生成了多条SQL语句后,将生成的各SQL语句按照对应的序号标识,有序地输出至BOSS系统数据库中,从而在保证了CRM系统与BOSS系统的数据更改顺序一致的前提下,大大缩短了CRM-BOSS系统间数据同步处理的时间,提高了数据同步处理的速度,降低了CRM数据库的缓存负担。
最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。