CN103365873B - 业务数据的推送方法及装置 - Google Patents
业务数据的推送方法及装置 Download PDFInfo
- Publication number
- CN103365873B CN103365873B CN201210088626.3A CN201210088626A CN103365873B CN 103365873 B CN103365873 B CN 103365873B CN 201210088626 A CN201210088626 A CN 201210088626A CN 103365873 B CN103365873 B CN 103365873B
- Authority
- CN
- China
- Prior art keywords
- data
- propelling
- change
- propelling movement
- module
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本申请公开了一种业务数据的推送方法及装置。其中,该方法包括:在检测到客户端的业务层调用数据对象访问层进行业务数据的变更操作时,截取该进行变更操作的业务数据,以得到变更数据;按照推送规则来解析截取到的变更数据,以获取需要执行推送任务的推送数据;在数据库事务提交之后,异步启动推送任务,以发送推送数据至搜索引擎服务器。通过本申请,能够实现大幅度缩短业务***中的数据库与搜索引擎服务器之间同步数据的延时时间,从而达到了减少搜索引擎服务器的维护成本,提高用户体验。
Description
技术领域
本申请涉及互联网领域,具体而言,涉及一种业务数据的推送方法及装置。
背景技术
在内部运营业务***中执行用户查询数据时,***可以提供基于数据库的数据检索功能,在数据库中的数据量较少的情况下(例如一百万数据以内的情况),该基于数据库的数据查询功能可以快速响应用户的查询需求。但随着***数据库中数据量的增长,例如数据量在超过一百万之后,上述基于数据库的查询功能已经无法快速响应用户的查询需求,即***对用户查询请求的响应速度快速下降,因此,***提供的数据查询功能在数据量超过一定限度的情况下性能较差。
为了解决上述问题,现有技术可以采用搜索引擎技术来提高查询功能的性能,该技术的响应速度不会随着数据量的增长而有明显的性能下降。具体的,现有技术通过创建业务***中的数据库数据和搜索引擎服务器之间的数据同步关系来实现数据查询功能,同时搜索引擎服务器主动以一定的频率访问业务***中的数据库服务器上数据库变更的数据,并以SQL查询的方式查询数据库中的静态数据,当业务***中的数据库服务器上数据库数据发生变更时构建新数据的索引。具体的可以采用如下步骤实现构建索引的流程:
步骤S1,当业务***操作数据库数据变更的时候,比如执行新增、修改、删除数据库数据,数据库触发器会记录数据库中被变更数据对象的标识号码ID,并将其保存在一张日志表里。
步骤S2,搜索引擎服务器启动一个定时钟任务,定时循环的从步骤S1的日志表里读取变更数据对象的标识号码ID,搜索引擎根据该标识号码ID来查询多个表组合的数据库视图,从而获取到对应的数据。
步骤S3,搜索引擎服务器根据步骤S2获取到的数据来构建索引。
上述现有技术实现了,当业务***中的数据库中的数据发生变更后,搜索引擎服务器可以以一定的时间间隔(例如1-5分钟左右)从业务***中的数据库中读取这些变更数据的标识号码ID,并根据该标识号码ID获取对应的变更数据,并建立变更数据的索引。
但上述方案存在如下问题:首先,业务***中的数据库与搜索引擎服务器之间数据同步的时间延迟过长,用户需要过一定的时间间隔(例如1-5分钟左右)之后才能利用搜索引擎服务器查询到业务***中的数据库中发生变更的数据;其次,以SQL查询的方式获取业务***中的数据库中的静态数据,在特定的业务场景下有严重的性能问题。比如在业务***中的某个业务场景下,如果在短时间内,有大量的数据变更的话,搜索引擎服务器在从业务***中的服务器获取到数据之后构建增量索引会超过预定的时间间隔的延迟;另外,随着数据量越来越大,SQL查询性能也会越来越慢,从而降低了搜索引擎服务器获取业务***中的服务器中更新数据的效率。
目前针对相关技术的搜索引擎服务器定时读取业务***的数据库服务器中的数据库数据的方式,会导致在业务***中的数据库数据变更较大的情况下,搜索引擎服务器和业务***中的数据库之间同步数据不一致的问题,目前尚未提出有效的解决方案。
发明内容
针对相关技术的搜索引擎服务器定时读取业务***的数据库服务器中的数据库数据的方式,会导致在业务***中的数据库数据变更较大的情况下,搜索引擎服务器和业务***中的数据库之间同步数据不一致的问题,本申请的主要目的在于提供一种业务数据的推送方法及装置,以解决上述问题。
为了实现上述目的,根据本申请的一个方面,提供了一种业务数据的推送方法,该方法包括:在检测到客户端的业务层调用数据对象访问层进行业务数据的变更操作时,截取该进行变更操作的业务数据,以得到变更数据;按照推送规则来解析截取到的变更数据,以获取需要执行推送任务的推送数据;在数据库事务提交之后,异步启动推送任务,以发送推送数据至搜索引擎服务器。
进一步地,在截取该进行变更操作的业务数据,以得到变更数据之前,方法还包括:预设客户端中用于进行截取操作的截取条件和用于确定推送任务的命名空间,以获取配置文件;根据配置文件中的截取条件来启动截取业务数据的操作。
进一步地,按照推送规则来解析截取到的变更数据,以获取需要执行推送任务的推送数据包括:解析变更数据,以获取变更数据的属性,其中,在获取到的属性指示确定变更数据是实体对象的情况下,解析实体对象,如果解析结果与预设的命名空间相同,则标记实体对象为需要执行推送任务的推送数据;在获取到的属性指示确定变更数据是SQL语句的情况下,提取SQL语句中的命名空间,并将SQL语句中的命名空间与预设的命名空间进行比较,在相同的情况下,则标记SQL语句的操作数据为需要执行推送任务的推送数据。
进一步地,在数据库事务提交之后,异步启动推送任务,以发送的推送数据至搜索引擎服务器包括:通过对数据对象访问层DAO进行面向切面编辑AOP的初始化操作,来实时监控数据库事务的提交操作,在监控到数据库事务提交之后,调用推送函数;根据推送函数来启动读取保存的推送数据;发送推送数据至搜索引擎服务器。
进一步地,在发送推送数据至搜索引擎服务器之前,方法还包括:提取推送数据中的关键字段值;根据关键字段值在数据库中查找得到对应的一个或多个数据对象;将获取到的所有数据对象按照预定格式进行组装,以获取符合格式规定的推送数据。
进一步地,在按照推送规则来解析截取到的变更数据,以获取需要执行推送任务的推送数据之后,方法还包括:将得到的推送数据缓存至线程本地变量中。
为了实现上述目的,根据本申请的另一方面,提供了一种业务数据的推送装置,该装置包括:拦截模块,用于在检测到客户端的业务层调用数据对象访问层进行业务数据的变更操作时,截取该进行变更操作的业务数据,以得到变更数据;处理模块,用于按照推送规则来解析截取到的变更数据,以获取需要执行推送任务的推送数据;推送模块,用于在数据库事务提交之后,异步启动推送任务,以发送推送数据至搜索引擎服务器。
进一步地,装置还包括:配置模块,用于预设客户端中用于进行截取操作的截取条件和用于确定推送任务的命名空间,以获取配置文件;启动模块,用于根据配置文件中的截取条件来启动截取业务数据的操作。
进一步地,处理模块包括:解析模块,用于解析变更数据,以获取变更数据的属性;第一标记模块,用于在获取到的属性指示确定变更数据是实体对象的情况下,解析实体对象,如果解析结果与预设的命名空间相同,则标记实体对象为需要执行推送任务的推送数据;第二标记模块,用于在获取到的属性指示确定变更数据是SQL语句的情况下,提取SQL语句中的命名空间,并将SQL语句中的命名空间与预设的命名空间进行比较,在相同的情况下,则标记SQL语句的操作数据为需要执行推送任务的推送数据。
进一步地,推送模块包括:监控模块,用于通过对数据对象访问层DAO进行面向切面编辑AOP的初始化操作,来实时监控数据库事务的提交操作,在监控到数据库事务提交之后,调用推送函数;读取模块,用于根据推送函数来启动读取保存的推送数据;发送模块,用于发送推送数据至搜索引擎服务器。
进一步地,装置还包括:提取模块,用于提取推送数据中的关键字段值;查询模块,用于根据关键字段值在数据库中查找得到对应的一个或多个数据对象;组装模块,用于将获取到的所有数据对象按照预定格式进行组装,以获取符合格式规定的推送数据。
通过本申请,采用在检测到客户端的业务层调用数据对象访问层进行业务数据的变更操作时,截取该进行变更操作的业务数据,以得到变更数据;按照推送规则来解析截取到的变更数据,以获取需要执行推送任务的推送数据;在数据库事务提交之后,异步启动推送任务,以发送推送数据至搜索引擎服务器,上述实施例在业务数据更新到数据库之前拦截变更的业务数据,并根据已经配置好的推送规则确定该拦截到的变更数据是属于推送任务,并在数据库事务提交后,异步启动将推送数据推送给搜索引擎服务器,该过程独立于业务***中的数据库中数据的更新过程。由于业务***中的变更数据在到达数据库之前就被拦截并进行推送处理,并且是在数据库事务提交之后异步启动开始将推送数据发送给搜索引擎服务器,因此,搜索引擎服务器不需要定时从业务***中的数据库中读取已经保存的更新数据,即数据在业务***中的数据库和搜索引擎服务器中几乎是同步更新的。从而解决了搜索引擎服务器定时读取业务***中的数据库服务器中的数据库数据的方式,会导致在业务***中的数据库数据变更较大的情况下,搜索引擎服务器和业务***中的数据库之间同步数据不一致的问题,进而实现大幅度缩短业务***中的数据库与搜索引擎服务器之间同步数据的延时时间,从而达到了减少搜索引擎服务器的维护成本,提高用户体验的效果。
附图说明
此处所说明的附图用来提供对本申请的进一步理解,构成本申请的一部分,本申请的示意性实施例及其说明用于解释本申请,并不构成对本申请的不当限定。在附图中:
图1是根据本申请实施例的业务数据的推送装置结构示意图;
图2是包括了图1所示的业务数据的推送装置的业务***框架结构示意图;
图3是根据图1所示实施例的业务数据推送装置的功能结构示意图;
图4是根据本申请实施例的业务数据的推送方法的流程图;以及
图5是根据图4所示实施例的业务数据的推送方法的详细流程图。
具体实施方式
需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互组合。下面将参考附图并结合实施例来详细说明本申请。
图1是根据本申请实施例的业务数据的推送装置结构示意图;图2是包括了图1所示的业务数据的推送装置的业务***框架结构示意图;图3是根据图1所示实施例的业务数据推送装置的功能结构示意图。
如图1所示,本申请该实施例所提供的业务数据的推送装置可以包括:拦截模块10,用于在检测到客户端的业务层调用数据对象访问层进行业务数据的变更操作时,截取该进行变更操作的业务数据,以得到变更数据;处理模块30,用于按照推送规则来解析截取到的变更数据,以获取需要执行推送任务的推送数据;推送模块50,用于在数据库事务提交之后,异步启动推送任务,以发送推送数据至搜索引擎服务器。
本申请上述实施例中,在业务数据更新到数据库之前,推送装置首先通过拦截模块10来拦截变更的业务数据,并将得到的变更数据发送给处理模块30,由处理模块30根据已经配置好的推送规则确定该拦截到的变更数据是属于推送任务,并在数据库事务提交后,异步启动将推送数据推送给搜索引擎服务器,该过程独立于业务***中的数据库中数据的更新过程。由于业务***中的变更数据在到达数据库之前就被拦截并进行推送处理,并且是在数据库事务提交之后异步启动开始将推送数据发送给搜索引擎服务器,因此,搜索引擎服务器不需要定时从业务***中的数据库中读取已经保存的更新数据,即数据在业务***中的数据库和搜索引擎中几乎是同步更新的,比较现有的搜索引擎服务器定时读取业务***中的数据库中数据的方式,本申请上述实施例实现了在业务***中的数据库数据变更较大的情况下,搜索引擎服务器和业务***中的数据库之间同步数据保持一致的效果,大幅度缩短了业务***中的数据库与搜索引擎服务器之间同步数据的延时时间,从而达到了减少搜索引擎服务器的维护成本,提高用户体验的效果。上述实施例中业务数据被拦截之后,再发送给数据对象访问层,用于更新业务***中的数据库中的数据。
具体的,结合图2和图3可知,上述实施例中的业务数据的推送装置是一种内嵌在业务***架构中的实时数据推送框架。
如图2所示,该业务***结构包括:web层,业务层,数据对象访问层,本申请中图3所示的实时数据推送框架处于整个业务***架构的底层,其中,图2中用于拦截数据变更操作的拦截模块处于“业务层”和“数据对象访问层”之间,该拦截模块执行图3中的数据拦截功能,即在业务层调用数据对象访问层进行数据操作的时候,“业务层”对数据对象的任何变更操作都会被拦截模块拦截到,即对变更数据进行了拦截,在拦截到变更的数据对象之后,将拦截到的变更数据发送至用于完成“实时数据推送”服务的处理模块,该处理模块通过对拦截到的变更数据进行解析来执行图3中的数据解析功能,即根据已经配置好的推送规则,来决定拦截到的变更数据是否作为推送任务推送给搜索引擎服务器,在启动任务线程完成数据解析和数据组装后,如果图2中的事务监控模块监控到数据库事务提交的情况,***异步启动一个线程,把变更的数据从业务***中的业务层拦截后再推送到搜索引擎服务器,即完成了图3中的数据推送监控功能和异步数据推送功能。
在大部分的应用场景下,上述实施例大幅度的缩短了数据库与搜索引擎之间的同步变更数据的延时时间,非常大的提升了用户体验。另外,采用本申请上述方案进一步创建搜索引擎的索引,可以大大缩减创建索引的延时时间。
优选地,图3中的线程内通讯功能进一步实现了在确定拦截到变更数据为需要推送的数据之后,把推送数据缓存在线程内通讯通道里,在数据库事务提交后,再消费通讯通道里的需要推送的变更数据,具体的,可以将得到的推送数据缓存至线程本地变量中,线程本地变量ThreadLocal可以保证每个线程都有自己的本地变量,并且不会被其他线程修改数据,提高了推送数据的稳定性。另外,图3中的线程池管理功能提供了对线程的管理,比如设置线程容量以及线程的生命周期。
由上可知,本申请的关键之处在于,比较现有的推送技术都是在数据更新后提取数据,图3所示的实时数据推送框架在业务数据更新到数据库前,对更新前的业务数据进行拦截,并对拦截到的数据进行解析之后异步推送给搜索引擎服务器。
本申请上述实施例的业务数据的推送装置还可以包括:配置模块,用于预设客户端中用于进行截取操作的截取条件和用于确定推送任务的命名空间,以获取配置文件;启动模块,用于根据配置文件中的截取条件来启动截取业务数据的操作。上述实施例预先设置了截取条件,例如可以设置对哪些数据库表进行拦截,从而排除了不需要进行推送的业务数据,***推送变更数据过程中避免了浪费***资源。
具体的,本申请中的实时数据推送框架可以是spring框架的插件,如图2所示,在业务***启动时,会初始化spring框架,进而初始化了实时数据推送框架中配置文件的内容。配置文件的内容可以包括:设置需要拦截的数据库表的命名空间、需要拦截的字段(例如ID号)等。
本申请上述实施例中的处理模块30可以包括:解析模块301,用于解析变更数据,以获取变更数据的属性;第一标记模块302,用于在获取到的属性指示确定变更数据是实体对象的情况下,解析实体对象,如果解析结果与预设的命名空间相同,则标记实体对象为需要执行推送任务的推送数据;第二标记模块303,用于在获取到的属性指示确定变更数据是SQL语句的情况下,提取SQL语句中的命名空间,并将SQL语句中的命名空间与预设的命名空间进行比较,在相同的情况下,则标记SQL语句的操作数据为需要执行推送任务的推送数据。
具体的,在完成业务数据的拦截操作之后,图3中的数据解析功能首先通过解析模块301来判断拦截到变更数据是实体对象还是SQL语句,如果是实体对象,则解析该实体对象,如果解析得到的命名空间与预设的数据库的命名空间相同,则标志该数据库操作需要启动数据推送任务;如果是SQL语言方式的数据变更,则直接拦截并提取命名空间与预设的数据库的命名空间进行比较,相同的情况下,标志当前数据库操作需要启动数据推送任务。
本申请上述实施例中的推送模块50可以包括:监控模块501,用于通过对数据对象访问层DAO进行面向切面编辑AOP的初始化操作,来实时监控数据库事务的提交操作,在监控到数据库事务提交之后,调用推送函数;读取模块502,用于根据推送函数来启动读取保存的推送数据;发送模块503,用于发送推送数据至搜索引擎服务器。优选地,上述推送装置还可以包括:保存模块,用于将得到的推送数据缓存至线程本地变量中。
具体的,如图3所示的数据推送监控功能,实现了在业务***启动进行初始化的过程中,首先会对业务***的数据对象访问层DAO进行面向切面编辑AOP的初始化操作,从而保证任何数据库的操作都可以被监测到,在监测到数据库事务提交后,会调用一个推送函数callback,从而触发实时推送框架对线程本地变量ThreadLocal里的数据进行消费。上述推送模块50采用了异步数据推送的方式,采用线程异步的方式进行数据推送任务,保证了数据推送不影响正常的业务操作。
另外,该数据推送监控功能还提供了对整个框架中的其他模块的运行过程的监控,一旦有任何一个步骤出现了异常,会记录当时***运行的异常信息,主要包括拦截到的数据是否正常,并通知技术人员异常信息,技术人员可以根据这些信息再次触发数据推送任务。
本申请上述实施例的装置还可以包括:提取模块,用于提取推送数据中的关键字段值;查询模块,用于根据关键字段值在数据库中查找得到对应的一个或多个数据对象;组装模块,用于将获取到的所有数据对象按照预定格式进行组装,以获取符合格式规定的推送数据。本申请上述实施例实现了在将推送数据发送至搜索引擎服务器之前,可以通过提取模块来提取推送数据的关键字段值,例如推送数据的ID号,根据这个关键字段值在数据库中查询其他的数据对象,并将所有的数据对象都发送给搜索引擎数据库,保证了推送数据的完整性。例如可以根据客户的ID号在数据库中查询该客户的订单对象的数据。
图4是根据本申请实施例的业务数据的推送方法的流程图;图5是根据图4所示实施例的业务数据的推送方法的详细流程图。
如图4所示,该方法包括如下步骤:
步骤S102,通过图1中的拦截模块10来实现在检测到客户端的业务层调用数据对象访问层进行业务数据的变更操作时,截取该进行变更操作的业务数据,以得到变更数据。具体的,该步骤通过图3中的数据拦截功能实现,在业务层调用数据对象访问层进行业务数据的变更操作时,拦截变更操作的业务数据。
步骤S104,通过图1中的处理模块30来按照推送规则来解析截取到的变更数据,以获取需要执行推送任务的推送数据。具体的,该步骤通过图3中的数据解析功能来实现根据以及配置好的拦截规则,确定拦截到的业务数据是否是需要推送给搜索引擎服务器,其中,推送规则为预先设定的一个或多个条件,根据这些条件来确定该拦截到的变更数据是属于推送任务。
步骤S106,通过图1中的推送模块50来实现在数据库事务提交之后,异步启动推送任务,以发送推送数据至搜索引擎服务器。该步骤中采用线程异步的方式进行数据推送任务,保证了数据推送不影响正常的业务操作。
本申请上述实施例中,在业务数据更新到数据库之前拦截变更的业务数据,并根据已经配置好的推送规则确定该拦截到的变更数据是属于推送任务,并在数据库事务提交后,异步启动将推送数据推送给搜索引擎服务器,该过程独立于数据库中数据的更新过程。由于变更数据在到达数据库之前就被拦截并进行推送处理,并且是在数据库事务提交之后异步启动开始将推送数据发送给搜索引擎,因此,搜索引擎不需要定时从数据库中读取已经保存的更新数据,即数据在数据库和搜索引擎中几乎是同步更新的,比较现有的搜索引擎服务器定时读取数据库中数据的方式,本申请上述实施例实现了在数据库数据变更较大的情况下搜索引擎服务器和数据库之间同步数据保持一致的效果,大幅度缩短了数据库与搜索引擎之间同步数据的延时时间,从而达到了减少搜索引擎服务器的维护成本,提高了用户体验的效果。上述实施例中业务数据被拦截之后,再发送给数据对象访问层,用于更新数据库中的数据。
优选地,本申请上述实施例的步骤S104之后,可以通过图1中的保存模块将得到的推送数据缓存至线程本地变量中。该步骤通过图3的线程内通讯功能实现在确定拦截到变更数据为需要推送的数据之后,把推送数据缓存在线程内通讯通道里,即将推送数据暂时存储在一个ThreadLocal类型的线程本地变量里。线程本地变量ThreadLocal可以保证每个线程都有自己的本地变量,并且不会被其他线程修改数据。
本申请上述实施例中,在步骤S102截取该进行变更操作的业务数据,以得到变更数据之前,方法还可以包括如下步骤:预设客户端中用于进行截取操作的截取条件和用于确定推送任务的命名空间,以获取配置文件;根据配置文件中的截取条件来启动截取业务数据的操作。上述实施例预先设置了截取条件,例如可以设置对哪些数据库表进行拦截,从而排除了不需要进行推送的业务数据,***推送变更数据过程中避免了浪费***资源。
具体的,本申请中的实时数据推送框架可以是spring框架的插件,在业务***启动时,会初始化spring框架,进而初始化了实时数据推送框架中配置文件的内容。具体的,初始化的配置文件可以主要包括以下内容:
1)配置截取条件,用来表示需要对哪张数据库表(例如客户表)的操作进行拦截。
例如,哪些数据库表的操作进行拦截的配置内容的示例如下:
2)配置用于确定推送任务的命名空间,即配置包括该数据库表的数据对象访问框架中的命名空间ibatis namespace。
3)配置需要拦截业务数据的字段,比如ID字段。
4)配置数据对象访问DAO层的面向切面编程AOP的初始化。在业务***启动时,实时推送框架首先对***的DAO层进行AOP的初始化,从而可以保证任何的数据库操作都可以被框架监测,例如,当监测到针对客户表有任何数据变更操作时,都会触发框架执行拦截操作,并触发对拦截到的业务数据进行数据解析。
本申请上述实施例中,步骤S104按照推送规则来解析截取到的变更数据,以获取需要执行推送任务的推送数据的步骤包括:解析变更数据,以获取变更数据的属性,其中,在获取到的属性指示确定变更数据是实体对象的情况下,解析实体对象,如果解析结果与预设的命名空间相同,则标记实体对象为需要执行推送任务的推送数据;在获取到的属性指示确定变更数据是SQL语句的情况下,提取SQL语句中的命名空间,并将SQL语句中的命名空间与预设的命名空间进行比较,在相同的情况下,则标记SQL语句的操作数据为需要执行推送任务的推送数据。
具体的,上述实施例通过图3中实时数据推送框架完成对需要执行推送任务的推送数据的筛选过程,具体包括如下步骤:
步骤A、在完成业务数据的拦截操作后,数据推送框架中的数据解析功能对拦截到的业务数据进行解析。
步骤B、判断拦截到的业务数据是实体对象还是SQL语句,如果拦截到的业务数据时实体对象,则进入步骤C,如果拦截到的业务数据时SQL语句,则进入步骤D。
步骤C、如果是实体对象,则对实体对象进行解析,解析结果是数据对象访问的技术框架ibatis的命名空间namespace。如果解析出来的命名空间namespace与配置的数据库表的命名空间namespace(namespace的配置是在***启动前就配置好的)匹配,则标志该实体对象对应的数据库操作需要启动数据推送任务。
步骤D、如果是SQL方式的数据变更,则直接根据拦截到的命名空间namespace与配置的数据库表的命名空间namespace进行匹配,如果相同则标志该SQL语句对应的数据库操作需要启动数据推送任务。
优选地,当业务数据推送框架得到匹配的结果后,需要把拦截到的推送数据暂时存储在一个线程本地变量ThreadLocal类型的变量里。该线程本地变量ThreadLocal可以保证每个线程都有自己的本地变量,并且不会被其他线程修改数据。提高了推送数据的稳定性。
本申请上述实施例中,步骤S106中,在数据库事务提交之后,异步启动推送任务,以发送推送数据至搜索引擎服务器的步骤可以包括:通过对数据对象访问层DAO进行面向切面编辑AOP的初始化操作,来实时监控数据库事务的提交操作,在监控到数据库事务提交之后,调用推送函数;根据推送函数来启动读取保存在线程本地变量中的推送数据;发送推送数据至搜索引擎服务器。上述功能采用了异步数据推送的方式,采用线程异步的方式进行数据推送任务,保证了数据推送不影响正常的业务操作。
具体的,上述实施例中,图3所示的实时数据推送框架开发了spring数据库事务管理的插件,可以对数据库事务的提交操作进行监控。当spring数据库事务提交后,会调用一个推送函数callback,从而触发实时推送框架对线程本地变量ThreadLocal中的数据进行消费。
本申请上述实施例中,在发送线程本地变量中的推送数据至搜索引擎服务器之前,方法还可以包括如下步骤:提取推送数据中的关键字段值;根据关键字段值在数据库中查找得到对应的一个或多个数据对象;将获取到的所有数据对象按照预定格式进行组装,以获取符合格式规定的推送数据。上述实施例实现了在将推送数据发送至搜索引擎服务器之前,可以提取推送数据的关键字段值,例如推送数据的ID号,根据这个关键字段值在数据库中查询其他的数据对象,并将所有的数据对象都发送给搜索引擎数据库,保证了推送数据的完整性。
具体的,结合图5,本申请上述实施例具体实现方式步骤如下:
步骤S20,业务***中的业务***启动时,初始化实时推送的配置文件,在业务数据更新到数据库之前,根据配置文件来执行拦截变更的业务数据的操作。
步骤S40,对拦截到的变更数据进行解析,得到需要推送的变更数据。具体的,可以通过实施步骤A至步骤D来确定需要执行推送任务的变更数据,既得到推送数据。
步骤S60,将解析后的符合配置要求的推送数据缓存到线程本地变量中,既得到需要执行推送任务的变更数据,并将这些变更数据作为推送数据保存在线性本地变量中。
步骤S80,在业务***初始化之后,启动监控当前线程的数据库事务(包括新增、修改、删除操作),当监控数据库事务提交后,并对拦截到的推送数据进行处理后,实时启动数据推送任务,发送推送数据至搜索引擎服务器。
上述步骤80包括如下步骤:
步骤S801,在监控到数据库事务提交后,从线程本地变量中读取保存的推送数据。
步骤S802,从需要推送的变更数据里,即从推送数据里提取出关键字段值,如数据对象的主键ID。
步骤S803,根据该关键字段值(例如主键ID)到数据库里查找已经提交并保存的静态数据。例如,根据客户的ID,在数据库里查询该客户的订单对象的数据。
步骤S804,同时根据该保存的静态数据的数据对象获取相关的其他数据对象,并到数据库里获取其他数据对象的静态数据。
步骤S805,当获取到全部的数据对象后,框架根据预先配置的数据组装逻辑,将拦截到的推送数据按照预定义的搜索引擎需要的数据格式进行组装,从而将需要推送的业务数据组装成符合搜索引擎要求的数据格式。
步骤S806,调用搜索引擎客户端,将组装好的推送数据推送给搜索引擎服务器。具体的,组装好的业务数据是完全符合搜索引擎数据格式要求的,并且在业务数据组装好后,实时数据推送框架发起与搜索引擎的通讯,并在实时数据推送框架与搜索引擎建立连接后,把数据推送给搜索引擎。
需要说明的是,在附图的流程图示出的步骤可以在诸如一组计算机可执行指令的计算机***中执行,并且,虽然在流程图中示出了逻辑顺序,但是在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤。
本申请还可以提供一种用于运行业务数据的推送方法的计算机程序,以及用于保存上述计算机程序的存储装置。
从以上的描述中,可以看出,本申请实现了如下技术效果:解决了搜索引擎服务器定时读取数据库中数据的方式,会导致在数据库数据变更较大的情况下搜索引擎服务器和数据库之间同步数据不一致的问题,进而实现大幅度缩短了数据库与搜索引擎之间同步数据的延时时间,从而达到了减少搜索引擎服务器的维护成本,提高了用户体验的效果。
显然,本领域的技术人员应该明白,上述的本申请的各模块或各步骤可以用通用的计算装置来实现,它们可以集中在单个的计算装置上,或者分布在多个计算装置所组成的网络上,可选地,它们可以用计算装置可执行的程序代码来实现,从而,可以将它们存储在存储装置中由计算装置来执行,或者将它们分别制作成各个集成电路模块,或者将它们中的多个模块或步骤制作成单个集成电路模块来实现。这样,本申请不限制于任何特定的硬件和软件结合。
以上所述仅为本申请的优选实施例而已,并不用于限制本申请,对于本领域的技术人员来说,本申请可以有各种更改和变化。凡在本申请的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本申请的保护范围之内。
Claims (11)
1.一种业务数据的推送方法,其特征在于,包括:
在检测到客户端的业务层调用数据对象访问层进行业务数据的变更操作时,截取该进行变更操作的业务数据,以得到变更数据;
按照推送规则来解析截取到的所述变更数据,以获取需要执行推送任务的推送数据;
在数据库事务提交之后,异步启动所述推送任务,以发送所述推送数据至搜索引擎服务器。
2.根据权利要求1所述的方法,其特征在于,在截取该进行变更操作的业务数据,以得到变更数据之前,所述方法还包括:
预设所述客户端中用于进行截取操作的截取条件和用于确定推送任务的命名空间,以获取配置文件;
根据所述配置文件中的截取条件来启动截取所述业务数据的操作。
3.根据权利要求2所述的方法,其特征在于,按照推送规则来解析截取到的所述变更数据,以获取需要执行推送任务的推送数据的步骤包括:
解析所述变更数据,以获取所述变更数据的属性,其中,
在获取到的属性指示确定所述变更数据是实体对象的情况下,解析所述实体对象,如果解析结果与预设的命名空间相同,则标记所述实体对象为需要执行推送任务的推送数据;
在获取到的属性指示确定所述变更数据是SQL语句的情况下,提取所述SQL语句中的命名空间,并将所述SQL语句中的命名空间与预设的命名空间进行比较,在相同的情况下,则标记所述SQL语句的操作数据为需要执行推送任务的推送数据。
4.根据权利要求3所述的方法,其特征在于,在数据库事务提交之后,异步启动所述推送任务,以发送所述的推送数据至搜索引擎服务器的步骤包括:
通过对所述数据对象访问层DAO进行面向切面编辑AOP的初始化操作,来实时监控所述数据库事务的提交操作,在监控到所述数据库事务提交之后,调用推送函数;
根据所述推送函数来启动读取保存的所述推送数据;
发送所述推送数据至搜索引擎服务器。
5.根据权利要求1所述的方法,其特征在于,在发送所述推送数据至搜索引擎服务器之前,所述方法还包括:
提取所述推送数据中的关键字段值;
根据所述关键字段值在所述数据库中查找得到对应的一个或多个数据对象;
将获取到的所有数据对象按照预定格式进行组装,以获取符合格式规定的推送数据。
6.根据权利要求1至5中任意项所述的方法,其特征在于,在按照推送规则来解析截取到的所述变更数据,以获取需要执行推送任务的推送数据之后,所述方法还包括:将得到的所述推送数据缓存至线程本地变量中。
7.一种业务数据的推送装置,其特征在于,包括:
拦截模块,用于在检测到客户端的业务层调用数据对象访问层进行业务数据的变更操作时,截取该进行变更操作的业务数据,以得到变更数据;
处理模块,用于按照推送规则来解析截取到的所述变更数据,以获取需要执行推送任务的推送数据;
推送模块,用于在数据库事务提交之后,异步启动所述推送任务,以发送所述推送数据至搜索引擎服务器。
8.根据权利要求7所述的装置,其特征在于,所述装置还包括:
配置模块,用于预设所述客户端中用于进行截取操作的截取条件和用于确定推送任务的命名空间,以获取配置文件;
启动模块,用于根据所述配置文件中的截取条件来启动截取所述业务数据的操作。
9.根据权利要求8所述的装置,其特征在于,所述处理模块包括:
解析模块,用于解析所述变更数据,以获取所述变更数据的属性;
第一标记模块,用于在获取到的属性指示确定所述变更数据是实体对象的情况下,解析所述实体对象,如果解析结果与预设的命名空间相同,则标记所述实体对象为需要执行推送任务的推送数据;
第二标记模块,用于在获取到的属性指示确定所述变更数据是SQL语句的情况下,提取所述SQL语句中的命名空间,并将所述SQL语句中的命名空间与预设的命名空间进行比较,在相同的情况下,则标记所述SQL语句的操作数据为需要执行推送任务的推送数据。
10.根据权利要求9所述的装置,其特征在于,所述推送模块包括:
监控模块,用于通过对所述数据对象访问层DAO进行面向切面编辑AOP的初始化操作,来实时监控所述数据库事务的提交操作,在监控到所述数据库事务提交之后,调用推送函数;
读取模块,用于根据所述推送函数来启动读取保存的所述推送数据;
发送模块,用于发送所述推送数据至搜索引擎服务器。
11.根据权利要求7所述的装置,其特征在于,所述装置还包括:
提取模块,用于提取所述推送数据中的关键字段值;
查询模块,用于根据所述关键字段值在所述数据库中查找得到对应的一个或多个数据对象;
组装模块,用于将获取到的所有数据对象按照预定格式进行组装,以获取符合格式规定的推送数据。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210088626.3A CN103365873B (zh) | 2012-03-28 | 2012-03-28 | 业务数据的推送方法及装置 |
HK13114167.3A HK1186793A1 (zh) | 2012-03-28 | 2013-12-23 | 業務數據的推送方法及裝置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210088626.3A CN103365873B (zh) | 2012-03-28 | 2012-03-28 | 业务数据的推送方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN103365873A CN103365873A (zh) | 2013-10-23 |
CN103365873B true CN103365873B (zh) | 2016-08-10 |
Family
ID=49367243
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201210088626.3A Active CN103365873B (zh) | 2012-03-28 | 2012-03-28 | 业务数据的推送方法及装置 |
Country Status (2)
Country | Link |
---|---|
CN (1) | CN103365873B (zh) |
HK (1) | HK1186793A1 (zh) |
Families Citing this family (20)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103559301A (zh) * | 2013-11-14 | 2014-02-05 | 华为技术有限公司 | 更新数据的方法、数据库触发器和搜索引擎 |
CN104484187B (zh) * | 2014-12-31 | 2017-12-08 | 山东中创软件商用中间件股份有限公司 | 一种信息集成方法和*** |
CN104679559B (zh) * | 2015-02-11 | 2019-06-18 | 北京配天技术有限公司 | 单片机在线编程的方法 |
CN105025110B (zh) * | 2015-07-31 | 2018-05-08 | 中冶南方工程技术有限公司 | 一种多客户端数据修改消息精确推送方法 |
CN107958010B (zh) * | 2016-10-18 | 2020-09-01 | 北京京东尚科信息技术有限公司 | 用于在线数据迁移的方法及*** |
CN106301972A (zh) * | 2016-11-16 | 2017-01-04 | 北京集奥聚合科技有限公司 | 一种监控数据实时上推方法及*** |
CN108234600A (zh) * | 2017-12-06 | 2018-06-29 | 中国航空工业集团公司西安航空计算技术研究所 | 空地数据传输中的一种数据自动推送方法实现方法 |
CN108345646B (zh) * | 2018-01-16 | 2022-02-22 | 广东电网有限责任公司信息中心 | 一种运用拦截技术快速自动构建多维度报表的方法 |
CN109002514B (zh) * | 2018-07-04 | 2022-04-15 | 深圳市沃特沃德信息有限公司 | 适时推送服务的方法及装置 |
CN109033253A (zh) * | 2018-07-06 | 2018-12-18 | 中国电力财务有限公司 | 数据集成方法及装置 |
CN108958955A (zh) * | 2018-07-06 | 2018-12-07 | 美利车(北京)网络技术有限公司 | 一种基于消息驱动的事务处理方法及装置 |
CN108880908A (zh) * | 2018-07-09 | 2018-11-23 | 上海盛付通电子支付服务有限公司 | 一种监控方法及其服务器 |
CN109492003A (zh) * | 2018-10-22 | 2019-03-19 | 平安医疗健康管理股份有限公司 | 访问信息的处理方法和装置、以及计算机设备和存储介质 |
CN109783203B (zh) * | 2018-12-28 | 2023-05-09 | 深圳竹云科技股份有限公司 | 一种基于过程任务事务处理机制的实现方法 |
CN109902256A (zh) * | 2019-02-26 | 2019-06-18 | 北京金堤科技有限公司 | 数据的监控方法、装置、电子设备和计算机可读介质 |
CN110147334B (zh) * | 2019-05-08 | 2021-10-08 | 北京百度网讯科技有限公司 | 一种编辑内容的存储方法及终端 |
CN110334150A (zh) * | 2019-06-05 | 2019-10-15 | 上海易点时空网络有限公司 | 监测主从数据库同步延时的方法、监控终端及*** |
CN111367692B (zh) * | 2020-03-09 | 2023-08-22 | 政采云有限公司 | 一种搜索引擎数据处理方法、装置、电子设备及介质 |
CN112115140B (zh) * | 2020-08-24 | 2024-03-29 | 浪潮通用软件有限公司 | 一种通用的全文搜索引擎实时数据同步方法及装置 |
CN112269941A (zh) * | 2020-11-25 | 2021-01-26 | 北京明略软件***有限公司 | 业务实时推送方法、***、电子设备及存储介质 |
Family Cites Families (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6219694B1 (en) * | 1998-05-29 | 2001-04-17 | Research In Motion Limited | System and method for pushing information from a host system to a mobile data communication device having a shared electronic address |
US8402472B2 (en) * | 2007-09-14 | 2013-03-19 | International Business Machines Corporation | Network management system event notification shortcut |
CN101770484B (zh) * | 2008-12-31 | 2012-12-26 | 北大方正集团有限公司 | 一种网站更新实时发布的方法及*** |
CN102236709B (zh) * | 2011-07-01 | 2013-03-27 | 深圳中兴力维技术有限公司 | 一种基于Flex的监控页面显示方法及*** |
CN102333128B (zh) * | 2011-10-31 | 2014-03-12 | 河南省电力公司计量中心 | 一种Web实时数据主动推送方法 |
-
2012
- 2012-03-28 CN CN201210088626.3A patent/CN103365873B/zh active Active
-
2013
- 2013-12-23 HK HK13114167.3A patent/HK1186793A1/zh unknown
Also Published As
Publication number | Publication date |
---|---|
CN103365873A (zh) | 2013-10-23 |
HK1186793A1 (zh) | 2014-03-21 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN103365873B (zh) | 业务数据的推送方法及装置 | |
US11645210B2 (en) | Cache aware searching based on one or more files in remote storage | |
US11514032B2 (en) | Splitting a query into native query operations and post-processing operations | |
CN105138592B (zh) | 一种基于分布式架构的日志数据存储和检索方法 | |
CN111460023B (zh) | 基于Elasticsearch的业务数据处理方法、装置、设备及存储介质 | |
CN100596353C (zh) | 提供日志服务的方法及*** | |
US8090684B2 (en) | System and method for asynchronous crawling of enterprise applications | |
CN108268485A (zh) | 一种日志实时分析方法及*** | |
CN106294695A (zh) | 一种面向实时大数据搜索引擎的实现方法 | |
CN104778188A (zh) | 一种分布式设备日志采集方法 | |
US11604789B1 (en) | Bi-directional query updates in a user interface | |
KR20160097362A (ko) | 데이터베이스 시스템에서 온라인 분석 처리를 위한 데이터를 유지하는 방법 및 장치 | |
WO2016082594A1 (zh) | 数据更新处理方法及装置 | |
CN107491463B (zh) | 数据查询的优化方法和*** | |
CN112416991A (zh) | 一种数据处理方法、装置以及存储介质 | |
US20210279113A1 (en) | Resegmenting chunks of data based on source type to facilitate load balancing | |
CN110119396A (zh) | 数据管理方法及相关产品 | |
US11922222B1 (en) | Generating a modified component for a data intake and query system using an isolated execution environment image | |
CN114443599A (zh) | 数据同步方法、装置、电子设备及存储介质 | |
CN109725852B (zh) | 一种限流计数的优化方法及终端 | |
US11915044B2 (en) | Distributed task assignment in a cluster computing system | |
WO2022261249A1 (en) | Distributed task assignment, distributed alerts and supression management, and artifact life tracking storage in a cluster computing system | |
CN110019259B (zh) | 分布式索引服务引擎的数据更新方法、装置及存储介质 | |
CN113590651A (zh) | 一种基于hql的跨集群数据处理***及方法 | |
CN102799996A (zh) | 网络广告策略匹配方法及*** |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
REG | Reference to a national code |
Ref country code: HK Ref legal event code: DE Ref document number: 1186793 Country of ref document: HK |
|
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
REG | Reference to a national code |
Ref country code: HK Ref legal event code: GR Ref document number: 1186793 Country of ref document: HK |