导读:DBus是我们要介绍的在敏捷大数据(Agile BigData)背景下的第一个平台。企业中大量业务数据保存在各个业务系统数据库中,为同时解决数据同步的一致性和实时性问题,DBus(数据总线)平台应运而生。
DBus专注于数据的实时采集和实时分发,是一种基于日志的解决方案,同时能够提供消息订阅的方式给下游系统使用。本篇文章主要介绍在DBus的设计中,它是如何处理表结构变更及其带来的各种问题的。
数据库表结构变更在软件产品快速迭代过程中是普遍存在的现象,抽取数据库中的数据是DBus最重要的功能之一,那么对于数据库中表结构变更及其带来的各种问题,DBus是如何处理的呢? (本文仅讨论DBus for Oracle的实现方案)
贴源输出是DBus的基本设计原则之一,通过解析后的数据库日志获取数据转换成UMS输出到Kafka,当表结构发生变更时DBus必须能够及时的调整输出UMS的结构,以确保和数据库中表结构保持一致,这里有两个问题需要解决:
1)如何感知表结构变更?
2)表结构变更后,新的表结构要如何与OGG输出的二进制数据关联?
一、感知表结构变更
对于感知表结构变更,Oracle已经通过DDL trigger为我们提供了很好的支持,接下来我们要考虑的是如何让DBus感知到表结构变更? 我们讨论出以下两种方案:
1.1 RPC方案
在DDL trigger中调用DBus提供的REST服务,将表结构变更事件发送给DBus。
该方案思路简单容易实现,但也有一些明显的弊端,比如DBus需要提供高可用、低延时的REST服务