专栏首页数据架构之路RDBMS变化数据设计,采集和接入大数据平台
原创

RDBMS变化数据设计,采集和接入大数据平台

变化的数据处理和捕获

在数据爆发式增长的时代,记录数据变化和演变,探究内在规律并运用到生产实践中,驱动业务的增长成为这个时代主旋律。本文就如何记录数据变化,处理数据变化谈谈自己的理解

变化数据的存储

1.1. 覆盖重写

所要更改的属性,始终保持最新值,即覆盖重写,但是该技术破坏了历史情况。需要借助其他的方式才能进行处理,这点我们在本文下面会讲到。

1.2. 增加新行

当发生属性的变化时候,不修改原来的行,而是增加新的记录行。所以原先表的设计时候,主键更加需要具备一般意义的类型,因为会出现多行共同描述一个对象,共同描述一个对象的相同成员(属性)。采用这种方式最少需要三个额外的列:行有效的时间戳,行失效的时间戳,当前行的标识。

1.3. 增加新属性

对原先修改的值,不变。对新变化的值,采用新增一列,来记录。这种运用场合有限,eg,freeschema类型的数据库,且变化频度有限且低的场合。

1.4. 增加新表

增加新的表,用来记录变化。这种一般用在源表数据量大,且属性变化较快的表,新表要维护一个属性和源表的映射。优点是对源表无侵入性修改,对写是友好的。而查询需要连表查询,会有一定的影响

### 1.5. 增加新表,同时对源表进行重写

增加新的表,用来记录变化,同时对原表的需要修改的记录进行重写,即新表纯粹就是用来记录变化的历史,优点是对源表查询是只需要查询源表,写入速度会有一定影响

变化数据的捕获

在变化数据的存储一节中,我们谈到了对变化数据存储。从方式2-5都可以对历史进行捕获。如果一个系统对原先变化数据有处理需求,在系统设计之初可以参考上面的方式。从源头开始设计会对后面的数据处理带来极大便利。如果是现有系统,且设计之初没有考虑对变化数据的处理。可以借助下面几种方式。

2.1 增加标记位

在1.1的基础之上,增加一个行变化的有效标记位。让下游系统可以进行捕获。优点需要修改的地方较为简单:1.对数据库物理设计调整,2.现有应用系统的业务逻辑进行简单调整

update source_table 
set update_col=col_value,valid=1 
where pk_col=pk_col_value

需要考虑的地方:

  1. 原系统相同记录俩次更新间隙,下游系统没有及时感知并捕获,更新操作如何处理? 从尽量不对原先业务系统产生影响的设计原则考虑,更新操作正常进行,但是对于数据采集可能会丢失一部分的数据
  2. 业务库写权限,开放给下游业务无关的系统(数据采集系统,为避免架构上的复杂性以及后期应对变化的扩展性能,一般设计为业务无关),会带来侵入式风险,即修改了标记位以外的列。
  3. 从系统性能上考虑,下游系统去扫标记位,在现有RDBMS系统上没有对数据库性能产生影响的设计。现有基本可行的方式,1. 建立B+/-Tree索引,但是对于标记位值重复量大的不是一个友好设计。2. 建立bit-map索引。bit-map最适合重复值多的场景,但是会极大影响写入性能,适用于表修改频率不多的情况。3. 脱离就技术而论技术角度看,着眼与实际业务结合,这种没有普适原则,需要对每个业务系统进行分析,但是这违背了采集系统,需要适应并尽量减少接入成本的业务无关的原则。如果数据产生之初,接入之初都很难,那系统有极大的夭折可能性。好像生小孩也是这样?

2.2 使用现成数据库技术

2.2.1 ORACLE

方式1:ORACLE作为一个商用数据提供了,完整系统描述的元数据。通过读取元数据表来记录来查询所有的更改的操作。通过下面的语句

-- SQL_FULLTEXT操作的sql语句
-- COMMAND_TYPE 命令类型,2-insert,6-update,7-delete
-- ROWS_PROCESSED 影响的行数
-- last_load_time 最近一次执行的时间
-- first_load_time 第一次执行的时间
select  SQL_FULLTEXT,DISK_READS,BUFFER_GETS,ROWS_PROCESSED,COMMAND_TYPE,CPU_TIME,USER_IO_WAIT_TIME,
PHYSICAL_READ_REQUESTS,PHYSICAL_READ_BYTES,last_load_time from V$SQL
Where SQL_FULLTEXT like '%TBL_TEST%' and COMMAND_TYPE in(2,6,7)and ROWS_PROCESSED>0

REF:ORACLE docs

方式2:利用表的触发器,通过每次写且触发触发器的动作完成更新动作的识别和解析。现有开源框架-databus,oracle的解析原理就是采用这种方式

2.2.2 SQLSEVER

sqlserver也有类似的表结构sys.dm_exec_sql_text

REF:SQL SERVER docs

oracle方式1,sqlserver的方式,利用这些方式的优点,1.完全重用现有技术,利用jdbc,select查询操作,就可以找到所有修改。2.保证库内扩展性同时,不对系统现有设计产生影响。因为对所有的表更新操作,都在v$sql中都可以找到,不需在接入数据时,对单个表进行重新设计和业务处理,所有更新查询都使用一套sql。缺点:1.需要不断轮训v$sql ,延迟在秒,分钟级别。看系统设置。2. 需要v$sql的权限,一般是管理员权限。

oracle 方式2的缺点,触发器使用会增加系统的开销,影响系统的吞吐量,特别是在频繁的更新(update,insert,delete)情况。触发器使用需要对表做谨慎评估

2.3 使用日志完成

2.3.1 简单解析型-MySQL

借助binlog的明文日志,需要设置下面俩个选项

set binlog_rows_query_log_events=1
set binlog_format=ROW
在my.cnf中配置
log-bin=binlog的目录和binlog文件前缀

所有更新的操作都会明文打印到log-bin设置的文件下。借助kafka connector-filesystem source 将binlog明文sql传输到kafka中。

2.3.2 复杂解析型-MYSQL

通过对数据库日志的挖掘,完成解析,现有的开源框架OpenReplicator,databus,mysql的解析就是借助OpenReplicator,完成对binlog的解析。

上述俩种方式的共同优点,只需要要开启binlog打印,对系统负担小,下游程序不会对现有系统产生冲击此外,使用简单型日志,还有解析明文sql,由于采用sql的通用标准,解析程序具有较好的通用性,对于后期维护负担小,而复杂解析型SQL,随着软件版本的升级binlog的解析也需要不断升级,后续维护成本较高

落地方案设计

变化数据的捕获一节中,我们对事前没有考虑存储历史变更的情况,如何捕获变化数据做了分享。综合上面几种方式的优缺点,

  1. 针对SQL Server&Oracle,做一个存储过程(v$sql的读权限,如果需要夸库或者机器可以以service application方式提供,连接使用jdbc),放到数据库定时调度任务,将数据写入到history_log表中,将history_log开方出读权限供,下游系统采用kafka connector jdbc source 进行连接,接入到kafka,需要记录上次读取的offset,history_log 表设计,如下 table schema:fino_id,sql_fulltext,exec_time,command_type fino_id:auto-inc sql_fulltext:执行更新的sql脚本 exec_time:执行时间 command_type:sql语句类型
  2. 针对mysql,则较为简单,在binlog本地磁盘部署kafka connector localfilesource,将binlog日志传输到kafka。

小结:采用这种方案主要是基于以下几点考虑:

  1. 基于客户方敏感的数据库权限要求,和客户方对关系型数据库运维技术沉淀,保证数据源头的稳定性
  2. 上下游系统弱依赖,即使下游系统出现问题,源头的数据还是存在,和持续生产的。实现源头数据较强容错
  3. 可以做到较强的扩展性,在库内以及不同数据库产品(特指sql server和oracle)不用针对单个表,做单独业务设计。降低接入成本。
  4. 数据的ETL可以放到数据平台进行统一清洗和挖掘。
  5. history_log,采用IOT表,读写请求都转化为顺序读写,实现了较高的读写性能

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

登录 后参与评论
0 条评论

相关文章

  • 大数据平台-数据采集和集成技术和工具整理

    今天谈下大数据平台构建中的数据采集和集成。在最早谈BI或MDM系统的时候,也涉及到数据集成交换的事情,但是一般通过ETL工具或技术就能够完全解决。而在大数据平台...

    IT大咖说
  • 2019年计算机大数据概述,大数据平台,数据采集、存储与分析

    大数据技术:指的是各种快速增长海量数据无法透过目前主流软件工具,在合理时间内达到撷取、管理、处理、并整理成为帮助企业快速和有效处理大数据的一种方法。

    数道云大数据
  • 湖北跨平台大数据可视化工具,波若大数据平台如何实现数据轻松采集?

    数据可视化,是关于数据视觉表现形式的科学技术研究。数据可视化是指以图形或图表格式通过人工或以其他方式组织和显示数据,以使受众能够更清楚地查看分析结果、简化正在使...

    数道云大数据
  • 大数据总线平台DBus设计思路与工作原理

    企业中大量业务数据保存在各个业务系统数据库中,过去通常的同步数据的方法有很多种,比如:

    宜信技术学院
  • MongoDB在58同城的应用实践

    孙玄@奈学教育
  • 大数据篇---hive学习第一部分 Hive概述

    如果你使用的是centOS系统,或者支持yum的系统,那么可以通过如下方式进行安装:

    用户2337871
  • 现有「数据库架构」过时了 !

    作者:Avishai Ish-Shalom是ScyllaDB公司的开发者推广人员。

    CloudBest
  • Druid:实时处理时序数据的OLAP数据库

    大数据一直是近年的热点话题,随着数据量的急速增长,数据处理的规模也从GB 级别增长到TB 级别,很多图像应用领域已经开始处理PB 级别的数据分析。大数据的核心目...

    高广超
  • 大数据工程师手册:全面系统的掌握必备知识与工具

    如何才能成为一名真正的“全栈(full-stack)”数据科学家?需要了解哪些知识?掌握哪些技能?

    AI科技大本营
  • 案例分享——现地数采在线监控平台(全套解决方案:传感器数据接入采集、数据循环存储、参数设置、图形化显示、监控报警、数据远传等)

    这套在线监控平台可扩展应用的场景很多,随着工业物联网的兴起,各种传感器采集需求、现地图形化显示需求、数据远传需求、边缘计算等需求在各种应用场景涌现,随着技术的发...

    Winter_world
  • 【DB笔试面试853】在Oracle中,什么是手动建库?手动建库有哪些步骤?

    有时候因为环境的缘故不能使用图形界面或者不能使用DBCA的静默方式来创建一个新库,那么这个时候可以考虑使用“CREATE DATABASE”这种SQL命令行来创...

    小麦苗DBA宝典
  • 大数据平台技术栈

    Flume是一个分布式的高可用的数据收集、聚集和移动的工具。通常用于从其他系统搜集数据,如web服务器产生的日志,通过Flume将日志写入到Hadoop的HDF...

    物流IT圈
  • hadoop生态系统到底谁最强?

    当你打开linkedin时,你会看到数百种不同的东西。例如,您的个人资料属性,您的朋友列表,您的技能,为您推荐的群组,朋友建议,为您推荐的公司,谁查看过您的个人...

    哒呵呵
  • 海量用户通信业务平台的设计和数据处理实践【大数据100分】

    大数据文摘
  • 平安科技汪洋:MongoDB 的平安路

    1月5日至6日即将在深圳举办的2018 MongoDB 年终盛会正在火热报名中,为使大家能对大会嘉宾及议题有更深的了解,在现场更好地互动,我们特地采访了部分嘉宾...

    MongoDB中文社区
  • 第5篇:数据库系统的实现

    前言 前面的文章中,主要都是在围绕关系数据库理论进行研究,没有涉及到数据库系统的具体实现。 虽说数据库系统的具体实现因业务环境,RDBMS等因素而异,但总体开发...

    Spark学习技巧
  • 我们对比了5款数据库,告诉你NewSQL的独到之处

    对大多数开发人员而言,SQL 以及 MySQL、PostgreSQL 等关系数据库管理系统(即 RDBMS)并不陌生。RDBMS 的基本架构原则已历经了数十年的...

    华章科技
  • Hadoop之父Doug Cutting眼中大数据技术的未来

    上次见到(膜拜)Hadoop之父Doug Cutting是在2年前,2014中国大数据技术大会上。今年Hadoop10岁,刚看到他的Hadoop十周年贺词,感觉...

    华章科技

扫码关注云+社区

领取腾讯云代金券