记一次数据同步需求的改进(三)

在之前的博文中分享过两篇关于数据同步的问题,链接如下:
http://blog.itpub.net/23718752/viewspace-1817817/
http://blog.itpub.net/23718752/viewspace-1819981/
最开始开发的同事也是提出想让我做一个数据的增量同步,起初他们是希望能够根据时间戳来得到增量的数据,这种方案有一个缺点就是对于update,delete的操作,这种数据变更就很难从源库中去甄别。所以最后我还是建议他们通过物化视图的增量刷新来实现这个需求,对于dml的操作情况得到的增量数据都可以很轻松同步。
下面的图是在改进前和改进后数据库层面归档日志的切换频率,可以看到使用物化视图的增量刷新之后,redo生成量大大降低,已经从统计图中看不到日志切换的影响了。

那么这种方案是不是一定是最好的呢。实践和时间真是检验这些的一把标尺。
首先修改前和修改后这个同事进行了确认,一切都在计划之中,数据刷新速度很快,而且他们这边也没有任何的影响,但是当天下午又有几个部门的同事就开始主动找我了,一部分说他们的程序端开始报错了。另一部分说他们访问不到这个表了,希望我来看看。所以问题看似解决了,还是需要一步一步来,我们来总结一下。
第一个问题是程序端开始报错,是因为在重建表的过程中,我也不知道会影响到他们的部分,所以这个时候会有一个改进之处就是在做这类变更的时候还是需要发一个公告,或者维护声明,这样可以提前安排,提前告知,不过因为是统计业务,简单沟通之后,他们重新查看,程序里就恢复正常了。
接着第二个问题,是另外的同事说程序里提示表找不到了。
我再简单说说问题背景,这个表做了分库分表,所以目前存在12个用户,4个数据库中存在同样名字的表,但是里面的数据是不同的。在统计库1中是目前是创建了物化视图,然后对外显示是一个视图,其实这个视图就是包含了这十二个物化视图的数据。结构如下所示。

而目前的情况是现在存在一个统计库2需要访问统计库1中这个表的数据。这个时候情况就是下面的样子。
统计库2是通过db
link来访问统计库1中的这个”表“的,为什么一定需要在统计库2中也要这个表呢,为什么不能放在统计库1里直接查呢,我也带着这个疑问和开发同事进行
了确认,得到的反馈是因为统计库2中也存在一个表,假设为表2,表2和统计库1中的这个”表“需要关联。

如果按照这样的情况,为什么在统计库2中访问不了了,关键的原因还是在于这个视图,在统计库2中是无法直接访问统计库1中这个视图的。尽管创建了同义词,存在db link,但是统计库1中的基表没有相应的db link在统计库2中。
所以一种思路就是在统计库2中也创建12个db link的同义词,然后在统计库2中也创建出一个视图来。所以实现方式如下图所示。

这种方式这是解决了这种访问的问题,而且看起来确实还比较繁琐。统计库1要做的事情,统计库2也需要再做一遍,统计2中需要基于统计库1中的12个物化视图在统计库2中也创建出12个同义词来,然后在统计库2本地创建出一个视图。
那么还有什么改进思路呢,而且还需要保证性能和可用性。
其实还有一种思路,那就是统计库2中也使用物化视图来增量刷新,但是这个增量刷新不是取四个分库的数据,而是直接从统计库1中增量刷新即可。每次统计库1刷新之后,统计库2再刷新一次,得到的就是增量的数据了。采用下面的方式即可。

这种方式能够保证在本地的方式,所以说其实本地的才是最好的。当然也需要一定的空间,而且这个空间需要应该还是需要的,而且也算是合理的。

时间: 2024-07-31 16:31:56

记一次数据同步需求的改进(三)的相关文章

记一次数据同步需求的改进(一)

最近有个需求,开发的同事找到我,提出了下面的需求 由于平台业务发展需要,需要将test_account_log 和test_protect_log 表前一天的增量同步到新增的两张表上 对于这个需求看起来还是蛮简单的.自己结合这两张报的设计方式发现没那么简单. 首先对这两个表做了分库分表,从图中可以看到,其实分成了4个库,16个用户,每个用户按照业务逻辑保存了一部分的明细数据,从目前的数据量来看,累计数据还不算大. 如果按照开发的需求,需要抽取保留前一天的增量数据,这个需求还是需要好好斟酌的. 因

两台SqlServer数据同步解决方案

server|sqlserver|解决|数据|数据同步 前些天遇到特殊需求,两台SqlServer服务器天隔一方,需要实效性很高的数据同步.     大家知道通过internet网,要高准确性和高实效性的实现两台数据库数据同步是个棘手的问题.     网络上找了些资料,有一篇文章可供参考http://www.sxsoft.com/technology_test/show_news.asp?id=450,文章中介绍了Sqlserver的出版和订阅方法来同步数据.根据文章做了下试验,是可以的,有以下

kettle数据同步的五种方案

数据同步:当数据源发生改变时,其他相关数据也跟着发展变化.根据需求不同可采取以下方案. 1.触发器 在数据库建立增删改的触发器.触发器将变更放到一张临时表里.oracle同步cdc 优点:实时同步 缺点:影响到业务系统,因为需要在业务系统建立触发器 2.日志 通过分析源数据库日志,来获得源数据库中的变化的数据.oracle异步cdc 优点:不影响业务系统 缺点:有一定得延时,对于没有提供日志分析接口的数据源,开发的难度比较大 3.时间戳 在要同步的源表里有时间戳字段,每当数据发生变化,时间戳会记

数据同步-C/S架构的数据库异步同步问题

问题描述 C/S架构的数据库异步同步问题 开发语言:C# 数据库:sql server 想实现功能: 把服务器上的数据库down到本地,客户端使用时操作本地数据库,固定时间或服务器数据库连通的情况下,将本地数据同步到服务器的数据库中. 目的:在服务器关闭.或断网情况下,可以保证客户端使用的稳定性. 希望大神们指点迷津,提供一些可行性方案,十分感谢! 解决方案 关键看你的业务需求. 比如说电子词典完全可以离线工作,在线更新词库. 但是银行卡pos刷卡就绝对不能离线工作. 没有什么一劳永逸的办法,你

《Ember.js实战》——2.6 Ember.js实现各层间数据同步

2.6 Ember.js实现各层间数据同步 本章前面我们看到了一个数据同步模型,其可以确保数据始终在客户端和服务器端之间保持同步(见图2-2).在这个模型中,应用程序8个步骤中就有6个需要显式跟踪并关注应用程序内部状态.反观Ember.js框架如何使用绑定.控制器以及清晰的模型层来尽可能多地自动化样板代码,孰优孰劣就很清楚了.图2-8展示了一个改进后的概念模型. Ember.js方式的步骤减少了,这是因为我们把更多的样板代码留给了Ember.js框架,而你仍完全掌控着应用的数据流.与前面模型相比

数据同步华丽上位,大数据离线处理高枕无忧

       大数据时代,业务量不断增长,大批量的数据离线同步已成了不可获缺的工具.        阿里云数据集成是开源DataX的服务化版本,支持400种异构数据源之间的数据同步,同时支持作业级别和数据源级别的流控.分布式并发运行以及脏数据阈值处理,是大数据处理中不可缺失的数据同步工具.        而越是使用越频繁的产品,更容易成为用户关注的焦点. 尤其在操作界面上,如果逻辑层次分配不够清晰,也会带来非常大的工作量. 1.重复报错的显示让操作更简单 2.界面的视觉交互,是获取信息的主入口

阿里云大数据利器Maxcompute学习之--数据同步任务常见日志报错总结

在使用大数据开发套件时最常用的就是数据同步模块,工单里最常见的问题就是其中数据同步的问题,这里总结一些常见一些从Maxcompute到其他数据源的同步任务报错案例,主要是日志中出现数据回滚写入的问题.   那首先看下日志中数据回滚的原因,当数据写入rds或者hybridDB等一些支持事务的数据库中,数据批量写入,一旦由于各种原因没有写入成功,这个批次的数据会回滚重新写入,如果再次写入失败,就会报脏数据的错误导致任务失败.数据写入失败可能是以下原因导致回滚.1,脏数据(数据值超过数据类型最大范围,

大数据开发套件中数据同步-日志报错回滚信息的一些问题总结

在使用大数据开发套件时最常用的就是数据同步模块,工单里最常见的问题就是其中数据同步的问题,这里总结一些常见一些从MaxCompute(原名ODPS)到其他数据源的同步任务报错案例,主要是日志中出现数据回滚写入的问题. 那首先看下日志中数据回滚的原因,当数据写入rds或者hybridDB等一些支持事务的数据库中,数据批量写入,一旦由于各种原因没有写入成功,这个批次的数据会回滚重新写入,如果再次写入失败,就会报脏数据的错误导致任务失败.数据写入失败可能是以下原因导致回滚.1,脏数据(数据值超过数据类

基于OGG Datahub插件将Oracle数据同步上云

本文用到的 阿里云数加-大数据计算服务MaxCompute产品地址:https://www.aliyun.com/product/odps 一.背景介绍 随着数据规模的不断扩大,传统的RDBMS难以满足OLAP的需求,本文将介绍如何将Oracle的数据实时同步到阿里云的大数据处理平台当中,并利用大数据工具对数据进行分析. OGG(Oracle GoldenGate)是一个基于日志的结构化数据备份工具,一般用于Oracle数据库之间的主从备份以及Oracle数据库到其他数据库(DB2, MySQL