和开发人员讨论一个业务需求和简单实现

前几天一个开发的同事来找我咨询一个问题,说是咨询,其实是开发的同事也不是非常清楚里面的逻辑,因为历史系统,历史原因,各种原因吧,所以我也是带着试试看的态度来帮助了这位同事。
这位同事知道这个咨询我的是一个存储过程。基本思路是从千万级的表table1中查出结果集,然后在table2,table3,table4都插入数据。
这个存储过程是怎么触发的呢,从开发同事那里得到的信息是在大概每周三凌晨运行一次,但是具体怎么触发的他们就无从得知了。要确认这个信息也花了一点时间。首先排除crontab,然后在scheduler中开始查找。

因为scheduler不像pl/sql还可以直接从dba_source里面可以模糊匹配出来需要的信息。所以这个时候借助了dba_scheduler_jobs这个数据字典,直接找到近半个月的执行情况。
select owner,job_name,last_start_date,end_date,NEXT_RUN_DATE from dba_scheduler_jobs where last_start_date between to_timestamp('2015-12-01 05:00:00','yyyy-mm-dd hh24:mi:ss') and to_timestamp('2015-12-10 08:00:00','yyyy-mm-dd hh24:mi:ss') and owner='XXXX' order by LAST_START_DATE;
通过这个语句得到了一个粗略的job执行列表,如果想查看更多的明细可以使用,比如job为test_vip_v3,则可以通过下面的方式来得到job的定义语句。
select dbms_metadata.get_ddl('PROCOBJ', 'TEST_VIP_V3',SCHEMA=>'XXXX') from dual;
其实也是花了一些功夫,总算定位到了,其实最后回过头来看,其实通过dba_scheduler_jobs中的另外几个字段也能够定位到。
得到的执行频率定义为 'FREQ=WEEKLY;BYDAY=WED;BYHOUR=1;BYMINUTE=3;BYSECOND=25' 这个信息和开发同学的描述是一致的,而且经过确认确实是。
好了,问题基本清楚了,他们开始尝试提出一些想法,其实也算是需求吧。

目前的业务实现,在每次dml操作table 2之后,还是需要对比修改前和修改后的数据变化,把一部分过滤后的数据插入到一个新的日志表中。
按照这种情况那就是需要在每次操作前都需要把表table2的数据做一个逻辑备份或者逻辑复制了。所以这个工作比较简单,就是创建一套同样的表结构,然后每次操作前做一个基本的备份即可。
后面的操作就如下所示了。其实按照之前描述的,其实就是需要创建一个表table5,table6,而两者做minus运算的部分,因为他们目前还评估不了,所以我就建议他们这个步骤先设置为手动,如果两个表数据量太大,但是minus运算结果集不大,可以考虑在备库做这类查询,把结果集缓存出来,从备库反推到主库。
如果数据量不大,那么就可以直接考虑在主库做这类操作。所以这个步骤考虑到手工触发,我就建议他们提供一个存储过程来代替,再手工也不能纯手工操作。到时候开发同事或者DBA都可以代劳。

所以这个简单的需求,最后就可以分解出下面几件需要做的事情
1.开发同学提供table 5,table 6的ddl语句
2.开发同事提供两个表minus运算的语句和条件,DBA来查看是否有更多的优化空间
3.根据优化建议,可以建议补充哪些相关的索引,一起确认哪些索引在table5,table6中是否需要,是否需要再添加。
4.开发同学提供minus的细节,把这个包装成独立的存储过程
5.table5在每次更新前需要truncate,然后重新初始化,开发同学提供初始化逻辑。
6.DBA对现有流程进行性能评估,查看是否有改进的空间。
大体聊了十多分钟,然后就达成了上面的共识,然后就是分阶段来完成了。
今天已经周三了,从目前的情况来看,
table5数据量在千万,但是minus的过滤结果集不大,所以这个操作就放到主库执行即可,
minus数据merge进入table 6的过程耗时在2分钟,已经达到了预期目标。所以可以考虑把这个存储过程直接揉入原有的存储过程中,就不用单独在定义一个job来触发了。
没有其它业务受到影响
所以这么一个简单的业务需求就基本划上了句号。听开发同事反馈,以前有的时候job会执行几个小时,那么这种活就是优化的部分了,我还是比较喜欢这种提升空间大的活。距离下次周三还有几天,还有很大的空间可以改善。
可以看到一个本来开发也不熟悉的流程经过我们的讨论和确认逐渐清晰起来,也确实解决了不少的潜在问题,毕竟我们只是做一个方案的执行者,我们也可以引导他们。给他们适当的建议。

时间: 2024-10-13 08:35:41

和开发人员讨论一个业务需求和简单实现的相关文章

实施项目--为什么开发人员一直在抱怨需求变动

几年前的某个时候,公司大伙都等着下班我却等着晚上加班,因为产品经理对产品的某个功能进行了调整和修改,我必须加班将其修改完善.对于这种事情我已经数不清了,产品经理的每一次变动都得让我们技术部门的同学们加班到深夜甚至到天明,如今回忆起来历历在目!今天这个文章我们不谈论是谁的责任,也不去抨击产品经理的无能,说说技术人员为什么总是在抱怨需求在变动这些事, 希望大家踊跃讨论.   一. 抱怨现象 最近我做了实施人员,经常到各个客户工厂去给他们实施项目,在这个过程中我了解到了软件的真实使用者,在这之间我就成

求助:请求GIS开发人员协助一个小项目(价格面议,包车费)

问题描述 提供一个地图数据包放到web服务器上,用户可以在浏览器上查看地图即可.手机:13811926365. 解决方案 解决方案二:哥们哪里的,可加我Q:179936244详聊解决方案三:最好是北京的开发人员.解决方案四:哈,北京太远了,在深圳.解决方案五:楼主可以联系我,北京QQ251294556解决方案六:做个网站,调用google或者51的免费地图可以不解决方案七:QQ:4818472

在ASP.NET 2.0中操作数据之二:创建一个业务逻辑层_自学过程

导言 本教程的第一节所描述的数据访问层(Data Access Layer,以下简称为DAL)已经清晰地将表示逻辑与数据访问逻辑区分开了.不过,即使DAL将数据访问的细节从表示层中分离出来了,可它却不能处理任何的业务规则.比如说,我们可能不希望产品表中那些被标记为"停用"的产品的"分类编号"或"供应商编号"被更新:我们还可能需要应用一些资历规则,比如说我们都不希望被比自己的资历还要浅的人管理.另外一个比较常见的情况就是授权,比如说只有那些具有特殊

SQL Server自动化运维系列——关于邮件通知那点事(.Net开发人员的福利)

原文:SQL Server自动化运维系列--关于邮件通知那点事(.Net开发人员的福利) 需求描述 在我们的生产环境中,大部分情况下需要有自己的运维体制,包括自己健康状态的检测等.如果发生异常,需要提前预警的,通知形式一般为发邮件告知. 邮件作为一种非常便利的预警实现方式,在及时性和易用性方面也有着不可替代的优点. 所以,在本篇中将详细的分析下在SQL Server中的邮件通知功能及使用方式等.  本篇实现 1.通过SQL Server自带的邮件功能实现运维的预警及检测 2.利用数据库邮件组件代

.net开发人员常犯的错误分析小结_实用技巧

1.认为必须要用Visual Studio.NET来开发.NET应用        那些对微软.NET开发不了解的人误以为:利用.NET框架开发应用软件时必须要用到Visual Studio.NET.这并不正确.你只需安装可在微软网站上免费下载的.NET框架即可.         安装了.NET框架,你就可以应用你最喜爱的文本编辑器和.NET工具命令行来进行开发.而且,你还可以应用第三方开发工具,如SharpDevelop.         欲彻底了解Visual Studio.NET有关的讨论

开发人员SWIG快速入门

C 和 C++++ 被公认为(理当如此)创建高性能代码的首选平台.对http://www.aliyun.com/zixun/aggregation/7155.html">开发人员的一个常见要求是向脚本语言接口公开 C/C++ 代码,这正是 Simplified Wrapper and Interface Generator (SWIG) 的用武之地.SWIG 允许您向广泛的脚本语言公开 C/C++ 代码,包括 Ruby.Perl.Tcl 和 Python.本文使用 Ruby 作为公开 C/

开发人员、程序员与计算机科学家三者之间的区别

导读:原文作者Alan Skorkin写了一篇<The Difference Between A Developer, A Programmer And A Computer Scientist>,文中讲述如何区分程序员.开发人员和计算机科学家之间的区别,发表了个人见解.现将译文<开发人员.程序员与计算机科学家三者之间的区别>转载,以下是文章内容: 我经常使用这三个几乎可以互换的词,是的,甚至包括计算机科学家.毕竟,我们中的大多数人都拥有计算机科学学位,那这三者有什么不同呢?然而,

技术开发人员适应其他部门提需求的一个经验

  我发现,我们很多技术人员往往无限度适应需要人员,跟着提需求人的思路走,陷入进去了. 我的经验是:"以问题为导向,而非需求为导向".提需求者,可能很多自己都不是很清楚自己想要什么样,想得与说的往往不一样.只有技术辛苦做出来后,用了一下,发现不是自己想要的.重做!双方都痛苦.这是很多同行的技术人员的深切感悟.我觉得,我们陷入了提需求者的思维引导中去了.以解决问题为导向,实际就是把:"你想做成什么样?".换成:"你要解决什么问题?",技术了解他要解

怎么去面试一个asp.net开发人员?

问题描述 我呢是09年毕业的,一直都在做.net相关的开发.目前,大小混到了一个主管的位置,因为人事变动,公司需要招人.对于这方面呢,多少欠缺一些经验.目前我发现了一些问题,1.问理论相关的,大多是从书上或者网络上了解的,背出来了比如:我问,值类型和引用类型的区别,照本宣科似的背出来了(值类型被分配在栈,引用类型被分配在堆中,有程序猿分配--):getpost的区别,几乎答案全是,GET的URL会有长度上的限制,则POST的数据则可以非常大,POST比GET安全,因为数据在地址栏上不可见.能说出