一种OGG同步实现Mongo多库连接方法及系统
文献发布时间:2023-06-19 09:27:35
技术领域
本发明涉及计算机技术领域,更具体地说,涉及到一种OGG同步实现Mongo多库连接方法及系统。
背景技术
OGG是一种基于日志的结构化数据复制软件,能够实现大量交易数据的实时捕捉,变换和投递,实现源数据库与目标数据库的数据同步,保持最少10ms的数据延迟。
OGG可实现Oracle到Oracle,Oracle到MySQL,Oracle到MongDB的同构或异构表同步,灵活、稳定、配置化操作的优点,让OGG在数据同步领域,使用越来越广,收获了一批忠实粉,DBA同步数据的首选,相比同构表的同步,异构表的同步要二次开发。我们项目中很多是做OGG中的Oracle到MongDB异构同步,涉及到多个库的操作时,以OGG主数据HandlerProperties连接实例,需要写入其他数据库时,HandlerProperties实例切换数据库名,这样就会出现一次数据同步多个源,就要多次切换,多线程操作时会出现线程不安全,加锁则会有同步卡顿现象,效率低。
本发明内容
为了克服现有技术的不足,本发明提供一种OGG同步实现Mongo多库连接方法解决多线程操作时线程不安全且加锁有同步卡顿以及效率低的问题。
本发明解决其技术问题所采用的技术方案是:一种OGG同步实现Mongo多库连接方法,包括以下步骤:
步骤一:应用系统将目标数据写入Oracle数据库;
步骤二:消息中转OGG监控Oracle数据库中变化的数据;
步骤三:消费OGG利用R进程解析队列消息为json格式数据,所述json格式数据包括A数据和B数据;
步骤四:基于配置类HandlerProperties,根据线程1将所述A数据写入MongoDB集群A库a表;
步骤五:基于配置类HandlerProperties2,根据线程2将所述B数据写入MongoDB集群B库b表。
优选地,消息中转OGG监控Oracle数据库中变化的数据之后,所述步骤还包括:
E进程抽取变化的数据推送至所述消费OGG。
优选地,消费OGG利用R进程解析队列消息为json格式数据,所述json格式数据包括A数据和B数据之前,所述步骤还包括:
R进程预先加载配置信息,所述配置信息包括源表、目标表以及MongoDB连接库信息。
优选地,R进程预先加载配置信息之后,所述步骤还包括:
生成配置类HandlerProperties;
创建另一个配置类HandlerProperties2。
优选地,创建另一个配置类HandlerProperties2之后,所述步骤还包括:
R进程读取E进程推送的队列消息。
一种OGG同步实现Mongo多库连接系统,所述系统包括:
第一写入单元,用于应用系统将目标数据写入Oracle数据库;
监控单元,用于消息中转OGG监控Oracle数据库中变化的数据;
解析单元,用于消费OGG利用R进程解析队列消息为json格式数据,所述json格式数据包括A数据和B数据;
第二写入单元,用于基于配置类HandlerProperties,根据线程1将所述A数据写入MongoDB集群A库a表;
第二写入单元,用于基于配置类HandlerProperties2,根据线程2将所述B数据写入MongoDB集群B库b表。
优选地,所述系统还包括:
抽取单元,用于E进程抽取变化的数据推送至所述消费OGG。
优选地,所述系统还包括:
加载单元,用于R进程预先加载配置信息,所述配置信息包括源表、目标表以及MongoDB连接库信息。
优选地,所述系统还包括:
生成单元,用于生成配置类HandlerProperties;
创建单元,用于创建另一个配置类HandlerProperties2。
优选地,所述系统还包括:
读取单元,用于R进程读取E进程推送的队列消息。
本发明的有益效果是:应用系统将目标数据写入Oracle数据库;消息中转OGG监控Oracle数据库中变化的数据;消费OGG利用R进程解析队列消息为json格式数据,所述json格式数据包括A数据和B数据;基于配置类HandlerProperties,根据线程1将所述A数据写入MongoDB集群A库a表;基于配置类HandlerProperties2,根据线程2将所述B数据写入MongoDB集群B库b表;从而实现OGG同步Mongo多库连接,进而提高了OGG同步Mongo多库连接的效率。
附图说明
图1是一种OGG同步实现Mongo多库连接方法的流程示意图。
图2是一种OGG同步实现Mongo多库连接系统的功能模块图。
图3是一种OGG同步实现Mongo多库连接系统的框架图。
图4是多线程数据写入时序图。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
以下结合具体实施例对本发明的具体实现进行详细描述:
实施例一:
图1示出了本发明实施例一提供的一种OGG同步实现Mongo多库连接方法的实现流程,为了便于说明,仅示出了与本发明实施例相关的部分,详述如下:
在步骤S101中,应用系统将目标数据写入Oracle数据库;
在步骤S102中,消息中转OGG监控Oracle数据库中变化的数据;
优选地,消息中转OGG监控Oracle数据库中变化的数据之后,所述步骤还包括:
E进程抽取变化的数据推送至所述消费OGG。
在步骤S103中,消费OGG利用R进程解析队列消息为json格式数据,所述json格式数据包括A数据和B数据;
优选地,消费OGG利用R进程解析队列消息为json格式数据,所述json格式数据包括A数据和B数据之前,所述步骤还包括:
R进程预先加载配置信息,所述配置信息包括源表、目标表以及MongoDB连接库信息。
优选地,R进程预先加载配置信息之后,所述步骤还包括:
生成配置类HandlerProperties;
创建另一个配置类HandlerProperties2。
优选地,创建另一个配置类HandlerProperties2之后,所述步骤还包括:
R进程读取E进程推送的队列消息。
在步骤S104中,基于配置类HandlerProperties,根据线程1将所述A数据写入MongoDB集群A库a表;
在步骤S105中,基于配置类HandlerProperties2,根据线程2将所述B数据写入MongoDB集群B库b表。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分步骤是可以通过程序来指令相关的硬件来完成,所述的程序可以存储于一计算机可读取存储介质中,所述的存储介质,如ROM/RAM、磁盘、光盘等。
实施例二:
图2示出了本发明实施例二提供的一种OGG同步实现Mongo多库连接系统的结构,为了便于说明,仅示出了与本发明实施例相关的部分,详述如下:
第一写入单元201,用于应用系统将目标数据写入Oracle数据库;
监控单元202,用于消息中转OGG监控Oracle数据库中变化的数据;
解析单元203,用于消费OGG利用R进程解析队列消息为json格式数据,所述json格式数据包括A数据和B数据;
第二写入单元204,用于基于配置类HandlerProperties,根据线程1将所述A数据写入MongoDB集群A库a表;
第二写入单元205,用于基于配置类HandlerProperties2,根据线程2将所述B数据写入MongoDB集群B库b表。
优选地,所述系统还包括:
抽取单元,用于E进程抽取变化的数据推送至所述消费OGG。
优选地,所述系统还包括:
加载单元,用于R进程预先加载配置信息,所述配置信息包括源表、目标表以及MongoDB连接库信息。
优选地,所述系统还包括:
生成单元,用于生成配置类HandlerProperties;
创建单元,用于创建另一个配置类HandlerProperties2。
优选地,所述系统还包括:
读取单元,用于R进程读取E进程推送的队列消息。
在本申请实施例中,应用系统将目标数据写入Oracle数据库;消息中转OGG监控Oracle数据库中变化的数据;消费OGG利用R进程解析队列消息为json格式数据,所述json格式数据包括A数据和B数据;基于配置类HandlerProperties,根据线程1将所述A数据写入MongoDB集群A库a表;基于配置类HandlerProperties2,根据线程2将所述B数据写入MongoDB集群B库b表;从而实现OGG同步Mongo多库连接,进而提高了OGG同步Mongo多库连接的效率;各单元的具体实施方式可参考实施例一的描述,在此不再赘述。
实施例三:
图3示出了本发明实施例三提供的一种OGG同步实现Mongo多库连接系统的框架图,为了便于说明,仅示出了与本发明实施例相关的部分,其中包括:
1、应用系统将数据写入Oracle数据库;
2、消息中转OGG监控Oracle数据变化,E进程抽取(抽取进程)变化的数据推送到消费OGG;
3、消费OGG,R进程(消费进程)先加载配置信息,如:源表、目标表、目标数据库信息(本应用是mongoDB的连接库信息),生成配置类HandlerProperties,一个R进程只有一个配置文件,自动加载只能生成一个配置类HandlerProperties,可以在二次代码开发中创建另一个配置类HandlerProperties2,初始化时,将HandlerProperties中源表、及目标数据库连接属性复制形式设置到HandlerProperties2中,再固定设置HandlerProperties目标数据库设置为A库,固定设置HandlerProperties2目标数据库设置为B库;
4、R进程读取E进程推送过来的消息队列,解析队列消息为json格式;
5、把json格式的数据,按业务逻辑,分成两部分数据,a数据写入A库a表,b数据写入B库b表;
6、写入A库时,拿配置类HandlerProperties,执行a表写入,写入B库时,拿配置类HandlerProperties2,然后执行写入b表,A、B库数据写入在同一个线程中是按先后顺序执行。
实施例四:
图4示出了本发明实施例三提供的多线程数据写入时序图,为了便于说明,仅示出了与本发明实施例相关的部分,其中包括:
当有两个进程处理一批数据时,线程1,先执行拿到配置类HandlerProperties,将a数据写入a表,拿配置类HandlerProperties2,准备写入b表时,网络延迟,线程1卡住,此时线程2进来,先拿到配置类HandlerProperties,准备写a数据,这时线程1恢复了,继续执行b表写入,再拿配置类HandlerProperties2写入B表,这样线程2在线程1延迟的情况下,也不会造成干扰,线程1总能准确的将a、b数据写入正确的目标数据,线程2如线程1方法相同。。
本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各实施例的单元及算法步骤,能够以电子硬件或者计算机软件和电子硬件的结合来实现。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。
专业技术人员可以对每个特定的应用来使用不同的方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉技术领域的人员在本发明揭露的技术范围内,可轻易想到变化或者替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以权利要求的保护范围为准。
- 一种OGG同步实现Mongo多库连接方法及系统
- 一种基于mongo数据库的搜索系统