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

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

如果按照开发的需求,需要抽取保留前一天的增量数据,这个需求还是需要好好斟酌的。
因为是评估,还是要做一些工作的,不能凭空来想决定可不可行,
首先来抓取了
我抓取了部分用户下表中数据的增长情况,这个过程还是在备库完成,基本每天的数据变化频率不高,下面是test_account_log的数据情况,test_protect_log的频率要更低一些。
2015-10-05       7487
2015-10-06       8140
2015-10-07       8436
2015-10-08       7763
2015-10-09      13933
2015-10-10      15391
2015-10-11       9357
2015-10-12       7680
2015-10-13       5575
2015-10-14       5427
2015-10-15       5697
2015-10-16       6095
2015-10-17       7370
2015-10-18       6869
2015-10-19       5634
2015-10-20       5562
2015-10-21       4900
2015-10-22        694
可以看出每天的数据变更其实不大,10多个累计起来就几万,还是比较小的,从增量数据的情况来看,还是很容易能够实现的。
如果每天的都在百万,千万,那就需要进一步评估确认了。
于是我提了下面几个问题,把这些问题的责任人都指定,谁来负责确认哪些都标明,因为这个还是需要协同来完成。
1.提供增量抽取sql语句   --开发同学
请从业务上评估,提供增量抽取sql语句。
    取昨天的增量:
后续得到开发同学的反馈,发现这个operation_date字段上没有相关的索引,也就意味着这种抽取还是会有潜在的风险。
select * from test_account_log where operation_date>=to_date(‘2015-10-25’,’yyyy-mm-dd’) and operation_date=to_date(‘2015-10-25’,’yyyy-mm-dd’) and operation_date<to_date(‘2015-10-26’,’yyyy-mm-dd’)

2. 目前test_account_log,test_protect_log没有operation_date相关的索引,需要创建额外的索引  --开发同学,DBA
因为不存在相关的索引,所以还是需要考虑能够添加索引,如果能够添加,索引列是为多个相关字段还是单单为operation_date
开发同学的反馈,创建索引的语句为:
create index account_log_date on test_account_log (operation_date)
create index protect_log_date on test_protect_log (operation_date)
对这个索引的创建,我需要从历史的sql执行情况来分析是否合适,是否会有潜在的原因导致执行计划的变更。
3.请确认是否operation_date为变化字段,如果这个值发生变化,增量抽取的数据就会有问题。--开发同学
比如 log_id          uid     operation_date
         1              100    2015-10-21 xxxx
如果发生变化
          1             100    2015-10-23 xxxx
在增量抽取的数据中就会存在重复数据(log_id,uid.xxxx)
这一点看似会忽略,但是却是至关重要,因为仅仅根据开发的需求来完成,如果不考虑这种数据变更的影响,那后面就会有非常多的隐患。
得到开发同学的反馈为:
该表的数据都不会变化,只会增加。因为这个表是一个历史数据表,所以里面的数据是不会修改的。

4.汇总后的表放哪儿确认完再讨论,技术上是可以支持的。不过基于安全和后期数据量的情况,还是需要找领导审批   --找主管审批确认
所以一个简单的问题仔细分析之后,还是在于其范围之内,可以很容易就实现的。后续的就是实施的过程了,当然这个过程会有很多的转折点,可能会对这个需求产生更大的影响,甚至推翻需求重来,后续再来解读。
</to_date(‘2015-10-26’,’yyyy-mm-dd’)

时间: 2024-10-02 01:33:12

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

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

在之前的博文中分享过两篇关于数据同步的问题,链接如下: http://blog.itpub.net/23718752/viewspace-1817817/ http://blog.itpub.net/23718752/viewspace-1819981/ 最开始开发的同事也是提出想让我做一个数据的增量同步,起初他们是希望能够根据时间戳来得到增量的数据,这种方案有一个缺点就是对于update,delete的操作,这种数据变更就很难从源库中去甄别.所以最后我还是建议他们通过物化视图的增量刷新来实现这

两台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