热门标签 | HotTags
当前位置:  开发笔记 > 数据库 > 正文

基于Oracle日志分析技术的数据库消息服务

1概述1.1问题的提出现在很多应用都是将数据存储在数据库中,并不断从数据库中读出数据并加以处理。在业务处理中

1 概述 1.1 问题的提出 现在很多应用都是将数据存储在数据库中,并不断从数据库中读出数据并加以处理。在业务处理中

1 概述 1.1 问题的提出

现在很多应用都是将数据存储在数据库中,并不断从数据库中读出数据并加以处理。在业务处理中,应用经常被分为两种类型:数据消费者应用(简称“生产者”或“生产者应用”)、数据生产者应用(简称“消费者”或“消费者应用”),消费者是以往数据库中写数据为主的应用,而生产者是从数据库中读取数据的应用。在传统的设计模式、开发模式中,消费者都是通过对数据库的不断轮询来获取数据库数据的,这种设计模式功能上能满足应用的需求,但从资源使用与效率上却消耗太大而且效率不高,因为:应用查询一次数据库需要建立数据库连接、占用数据库的SQL缓冲、内存缓冲以及数据库的CPU时间片,并且还占用网络带宽;如果数据量比较大且应用没有做增量获取数据的处理,那么每轮询一次并把最新的数据结果集读取到应用中所需要消耗的时间是很长的;随着生产者、消费者越来越多、越来越复杂,这种通过轮询来获取最新数据的方法在资源消耗、效率上的表现将越来越不如意。

1.2 解决方案概述

为了解决上述问题,本文提出基于日志分析技术的数据库消息服务,它是通过对Oracle日志文件的监控与分析以从数据库外部的方式获取Oracle数据库的变化事件,包括Oracle数据库管理系统中DDL、DML等SQL操作,并能够按照应用预先定制的格式与数据内容将捕获的事件内容转化为消息中间所认识的消息,继而通过消息中间件发送给订阅了该消息的相关消费者应用。

关心数据库变化的消费者应用通过该系统可以实时的获取变更信息,避免了对数据库的重复连接与轮询,在提高了实时性的同时减少了数据库资源占用量。

基于日志分析技术的数据库消息服务特别适合于那些对实时反应能力要求比较高而且且数据库变化事件发生随机性大的场合;而且它也提供了一种应用之间松耦合的高效通信方式,方便分布式软件的开发,即,消息生产者应用可以在消息消费者应用不在线的情况下,对数据库进行操作,且操作的结果消息将保留在消息中间件,而消息消费者应用可以在消息生产者不在线的情况下,从消息中间件中读取消息。

2 数据库变化信息捕获技术研究与初步比较

学者们一直致力于解决数据库变化捕获的问题,到目前为止,已经出现了多种捕获数据库变化事件的技术,其中,由于Oracle数据库使用最广泛,因此,对Oracle数据库变化事件的捕获方法是最多、最全面的,这些技术中包括:数据库轮询技术、数据库触发器技术、基于程序控制逻辑的数据变化技术、基于LogMiner的Oracle日志捕获技术。下面对这几种技术分别进行介绍,最后,对将这些技术与本文介绍的日志监控与分析技术进行比较。

2.1 数据库轮询技术

在开篇提出的问题中,对对这种数据库变化的捕获方法进行了介绍,并指出了其局限性与缺点,即:消耗资源太多、效率比较低。

2.2 数据库触发器技术

数据库触发器技术[1]是通过为感兴趣的数据建立触发器,在数据有变化时,数据库管理系统会根据数据库操作的类型(Insert/Update/Delete)而激活相应的触发器,从而在触发器代码中我们可以添加我们对数据库变化事件的处理代码。该技术的使用比较简单,在目前应用中使用比较普遍。

这种方法具有反应快、效率高的优势。它同样具有数据库轮询技术占用资源高的缺点,因为如果消费者应用很多且关注的数据源不一样,那么就需要为每一个表都建立Insert、Update、delete三个触发器,如果该数据库中有1000个消费者应用关心的表,就需要建立3000个触发器,那么一旦数据生产者对数据库操作很频繁,那么这将极大的占用数据库的内存、CPU资源,从而导致数据库服务器运行的性能降低。

从触发器的内部机理来分析,该技术是建立在数据库内部的捕获技术,因此消息的捕获都是由数据库内部进程通过回调机制来实现的,故它将比较占用数据库的资源。

2.3 基于程序控制逻辑的数据变化技术

基于程序控制逻辑的数据变化技术是通过为需要跟踪的多个表建立一个跟踪表来记录其变化情况,跟踪表的结构比较简单,主要是记录变化的表名、操作类型等轻量级的数据,而跟踪程序,即数据库事件捕获程序对跟踪表进行轮询,比如著名的数据库同步产品Data Mirror的早期版本就是通过该技术来捕获数据库变化的。

由此可见,该技术是绕过数据库管理系统的内部功能来实现数据捕获,其优势是比较节省数据库资源,虽然它也是一种轮询技术,但比普通的数据库轮询技术更加节省资源,因为它查询的不是整个数据表,而是记录数据变化的“跟踪表”。该技术的缺点是,作为一种轮询技术,同样需要占用CPU的时间片资源,同时,如果数据生产者对数据库的操作很频繁,由于需要对跟踪表进行写入、读取操作,将导致效率比较低的问题。

2.4 基于LogMiner的Oracle日志捕获技术

LogMiner[2]是Oracle公司从产品8.0以后提供的一个有用的分析工具,使用该工具可以轻松获得Oracle重作日志文件中的具体内容,特别是,该工具可以分析出所有对于数据库操作的DML(insert、update、delete等)语句,另外还可分析得到一些必要的回滚SQL语句。该工具特别适用于调试、审计或者回退某个特定的事务。 目前很多应用都通过LogMiner来获得数据库的变化事件。

与前面几种技术相比,LogMiner的优势是它从数据库的外部日志来捕获数据库变化信息,因此,不占用数据库与系统的资源。

LogMiner的缺点是,它首先需要把Oracle的数据字典导出到一个文件中,比较适合于数据字典不再变化的应用,如果数据字典变化了,那么需要重新执行LogMiner的配置流程;同时,它对应用提供的接口是PL/SQL接口,不适合应用开发工作。

2.5 日志监控与分析技术

本文所介绍的日志监控与分析技术,是通过监控Oracle的Redo日志文件以及对该文件进行手工分析,抽取出最新变化的SQL语句与数据,并为上层提供定制的访问接口,从而实现数据变化事件捕获的能力。

与上述四种方法相比,日志监控与分析技术是自身研究的技术,可以控制对外提供的访问接口,即可以提供SQL语句,也可以提供变化的数据;同时从外部对数据变化进行监控,不占用数据库的资源;并且由于分析、捕获的是变化的最新日志内容,因此,数据捕获的效率很高。通过实际的应用效果来分析,日志监控与分析技术是所有数据变化捕获技术中综合评价最好的一种技术。

3 体系结构设计与功能概述

基于日志分析技术的数据库消息服务的体系结构如下图所示。由数据生产者应用、数据消费者应用、消息中间件、数据库消息转换、日志监控与分析、数据库管理系统等组成。

其中,数据生产者应用、数据消费者应用、数据库管理系统应用系统固有的部分,而数据库消息转换、日志监控与分析是组成日志分析技术的数据库消息服务的关键部件。因此,在下面的介绍中,将重点对消息中间件、数据库消息转换、日志监控与分析两大核心功能模块进行介绍:

图1 基于日志分析技术的数据库消息服务务体系结构


3.1 消息中间件

消息中间件是实现应用程序之间松耦合通信的一种机制,它的工作机是订阅/分发或者是主动拉取机制。其中订阅/分发机制是应用程序对它感兴趣的某个消息队列进行注册、订阅,然后该应用就继续它的应用流程,当消息中间件系统产生一个该消息队列中的内容后,就能通过Windows的回调机制主动将数据推送到应用程序中。当然,消息中间件系统也提供拉取机制,即等待应用程序来读取消息。

引入消息中间件的主要目的是为了达到按需发布消息的目的,因为,不是所有的应用都需要所有消息,而是特定的应用需要接收特定的消息。

消息中间件的产品很多,有很多成熟的商用软件,比如IBM MQ Serials和Microsoft的MSMQ,也有国产软件,比如金蝶、东方通、等。在本系统中,将直接采纳中国电子科技集团第十五研究所研制的国产消息中间件。

3.2 数据库消息转换

该部件用于监听来自日志分析服务的数据库变化事件,并将数据库变化事件按照事先的订阅情况发布到消息队列中,而数据消费者可以从消息队列中实时获得最新的数据库变化的消息。它主要包括消息侦听、消息转发、消息映射管理。

3.2.1 消息侦听

该模块的主要功能是对底层日志监控与分析服务进行侦听,通过调用将该服务的回调函数,能够实时获得该服务所捕获的最新数据。

3.2.2 消息转发

该模块是对消息侦听模块所收到的消息按照预先的配置与映射,将数据变化信息转换成符合数据消费者应用所需要的格式,并将该消息按照消息中间件的消息格式进行封装,最后将该消息发送到指定的消息队列中。

3.2.3 消息映射管理

该模块的主要功能是为应用消费者提供一个配置消息的工具,消费者从数据库表中选择感兴趣的数据库表与字段集,并确定它所认识的消息内容的格式(消息转发服务将按照此格式来对消息内容进行组装),同时将为该消息确定需要发送的消息代理的名称,并维护从表到消息代理的映射关系,最后指定消息订阅的模式(实时推送/主动拉取)。

3.3 日志监控与分析

日志监控与分析模块的主要功能是对Oracle数据库的重做日志与归档日志进行监控、分析变化内容、并将变化的日志内转化成应用能理解的数据格式。它包括日志实时监控、日志内容分析与抽取两个主要模块。

3.3.1 日志实时监控

由于Oracle的重做日志与归档日志是以Windows操作系统文件的形式存在的,,因此可以通过Windows提供的机制来监控这两类日志文件的变化情况。主要是通过Windows提供的API来实现文件监控:SHChangeNotifyRegister、SHChangeNotifyDeregister与SHChangeNotifyRegister。首先调用SHChangeNotifyRegister函数将本监控进程添加到系统消息通告链中,并利用SetWindowLong函数改变监控进程的缺省的消息处理函数,当接受到系统通告消息后,根据传递的参数获得系统通告的内容并启动日志分析逻辑。退出程序时调用SHChangeNotifyDeregister函数注销系统消息通告。

3.3.2 日志内容分析与抽取

该模块的主要功能是读取Oracle重做日志、归档日志文件中内容,并获取自上次读取的时间到本次读取期间的变化的数据块;然后对获取的数据块进行分析,按照事务提取出数据变化的SQL语句、数据内容,并将提取出来的数据内容通过回调函数的形式返回给感兴趣的应用(在这里是数据库消息转换模块)。

4 关键技术实现

从上述功能可见,实现本系统最主要的关键技术包括三个部分:建立从数据库到应用之间的关系流程、建立数据库表与消息代理之间的消息映射、日志分析与抽取技术。

4.1 系统运行流程

下面是基于日志分析技术的数据库消息服务的运行流程图:




图2 基于日志分析技术的数据库消息服务的流程图

在系统运行过程中,数据生产者应用通过数据库访问接口对数据库进行Insert/updagte/delete操作来修改数据库中的数据,同时Oracle数据库将往日志文件中填写操作日志;日志监控与分析模块监控到日志文件变化后,就分析与提取日志文件的内容;数据库消息转换模块将监控到的内容转换成应用预定义的内容格式并发送到消息队列中,消息中间件将消息队列中的消息发送给数据消费者应用。这样就完成了一个完整的数据库消息捕获、转发过程。

4.2 消息映射技术

本系统的消息映射关系是通过消息映射工具来建立的,在可视化界面中,不仅可以可视化创建消息中间件里的消息队列,还可以浏览所有的Oracle数据对象,并为感兴趣的数据对象选取感兴趣的字段、确定消息格式的结构、指定消息发送的目的地(确定表与消息队列的映射关系)。如下是对数据库表与消息队列的映射关系:

表1

数据库表名

消息队列名

消息格式定义(字段值间的分隔符)

订阅方式

推荐阅读
  • 本文探讨了Web开发与游戏开发之间的主要区别,旨在帮助开发者更好地理解两种开发领域的特性和需求。文章基于作者的实际经验和网络资料整理而成。 ... [详细]
  • 本文将详细介绍如何在ThinkPHP6框架中实现多数据库的部署,包括读写分离的策略,以及如何通过负载均衡和MySQL同步技术优化数据库性能。 ... [详细]
  • window下kafka的安装以及测试
    目录一、安装JDK(需要安装依赖javaJDK)二、安装Kafka三、测试参考在Windows系统上安装消息队列kafka一、安装JDKÿ ... [详细]
  • 本文探讨了随着并发需求的增长,MySQL数据库架构如何从简单的单一实例发展到复杂的分布式系统,以及每一步演进背后的原理和技术解决方案。 ... [详细]
  • 前言无论是对于刚入行工作还是已经工作几年的java开发者来说,面试求职始终是你需要直面的一件事情。首先梳理自己的知识体系,针对性准备,会有事半功倍的效果。我们往往会把重点放在技术上 ... [详细]
  • MySQL锁机制详解
    本文深入探讨了MySQL中的锁机制,包括表级锁、行级锁以及元数据锁,通过实例详细解释了各种锁的工作原理及其应用场景。同时,文章还介绍了如何通过锁来优化数据库性能,避免常见的并发问题。 ... [详细]
  • 在Linux系统上构建Web服务器的详细步骤
    本文详细介绍了如何在Linux系统上搭建Web服务器的过程,包括安装Apache、PHP和MySQL等关键组件,以及遇到的一些常见问题及其解决方案。 ... [详细]
  • 区块链的兴起:恰逢其时,犹如1996年的互联网
    本文探讨了区块链技术的发展阶段,将其与1996年互联网的兴起进行对比,分析了当前区块链技术的现状及其未来潜力。 ... [详细]
  • JavaWeb技术架构解析
    本文探讨了JavaWeb开发中客户端与服务器端的交互模式,重点分析了B/S(浏览器/服务器)和C/S(客户端/服务器)两种架构的特点及应用场景。 ... [详细]
  • 性能测试工具的选择与应用
    本文探讨了性能测试工具的重要性及其在软件测试中的作用,重点介绍了选择合适性能测试工具的考量因素,并对几种常用的性能测试工具进行了对比分析。 ... [详细]
  • 全能终端工具推荐:高效、免费、易用
    介绍一款备受好评的全能型终端工具——MobaXterm,它不仅功能强大,而且完全免费,适合各类用户使用。 ... [详细]
  • 探索Squid反向代理中的远程代码执行漏洞
    本文深入探讨了在网站渗透测试过程中发现的Squid反向代理系统中存在的远程代码执行漏洞,旨在帮助网站管理者和开发者了解此类漏洞的危害及防范措施。 ... [详细]
  • Spring Cloud因其强大的功能和灵活性,被誉为开发分布式系统的‘一站式’解决方案。它不仅简化了分布式系统中的常见模式实现,还被广泛应用于企业级生产环境中。本书内容详实,覆盖了从微服务基础到Spring Cloud的高级应用,适合各层次的开发者。 ... [详细]
  • 本文详细介绍了使用ZooKeeper构建高可用集群的方法,包括必要的软件环境准备、配置文件调整及集群启动等关键步骤。通常,一个ZooKeeper集群由奇数个节点组成,以确保Leader选举的有效性。 ... [详细]
  • 热璞数据库与云宏达成兼容性互认证,共筑数据安全屏障
    热璞数据库与云宏信息技术有限公司近期宣布完成产品兼容性互认证,旨在提升数据安全性与稳定性,支持企业数字化转型。 ... [详细]
author-avatar
百脑汇惠州店_956
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有