银行数据开发日常2
第二章:原始积累
2005年7月25日,星期一,上午9:30
银行信贷部会议室
李明远跟随王海燕穿过几道走廊,来到了信贷部的会议室。这是他入职后第二周的第一天,按照约定,他们要与信贷部经理张志强会面,了解信贷部门的数据需求。
会议室里,一位五十岁左右、身材微胖的中年男子正在翻阅文件。他抬起头,目光锐利地打量着进来的两人。
"张经理,这位是我们信息科技部新来的李明远,北大计算机硕士,我跟您提过的。"王海燕介绍道。
张志强点点头,没有起身,只是示意他们坐下:"听说你们要了解我们信贷部的数据需求?"语气中带着一丝不易察觉的防备。
李明远感受到了对方的态度,但仍然保持着专业的微笑:"是的,张经理。我们希望了解信贷部在数据使用过程中遇到的问题,看看是否能提供一些技术支持。"
这位张经理看起来对IT部门有些抵触,得小心应对。李明远心想。
张志强冷哼一声:"问题多了去了。每次做贷款审批,都要从好几个系统里拉数据,客户的存款信息在核心系统,贷款历史在信贷系统,征信报告又是单独的系统。整合这些数据花费我们大量时间,而且经常出错。"
"您能具体说说数据整合过程中遇到的主要困难吗?"李明远拿出笔记本,认真记录。
张志强的表情稍微缓和了一些,开始详细描述信贷审批流程中的数据问题:客户信息不一致、数据格式不统一、历史数据查询困难、跨系统数据难以整合等。他说话时不时用手指敲击桌面,显示出对这些问题的不满。
"最让人头疼的是,同一个客户在不同系统中的信息可能完全不一样。比如张三,在核心系统里可能叫'张三',在信贷系统里可能是'张三(三级客户)',在国际业务系统里又变成了'ZHANG SAN'。我们得手动确认这是同一个人!"
李明远若有所思:"这确实是个问题。听起来,您需要的是一个统一的客户视图,能够整合不同系统中的客户信息。"
这正是数据仓库的典型应用场景,通过建立客户维度表解决数据孤岛问题。李明远在心里分析着。
"没错!"张志强双手一拍,"我们需要的就是这个。但是IT部门总是说系统太复杂,做不到。"他看向王海燕,眼神中带着些许责备。
王海燕解释道:"确实,目前我们的系统架构下,实现实时的数据整合有技术难度。但是..."他看了看李明远,"也许我们可以考虑其他方案。"
李明远接过话题:"张经理,我有个初步想法。虽然实时整合所有系统的数据确实有难度,但我们可以建立一个专门的数据集市,定期从各系统抽取信贷相关的数据,进行清洗和整合,为信贷审批提供统一的数据视图。"
张志强皱眉:"听起来很复杂,能行吗?"
"技术上是可行的。"李明远解释道,"我们可以使用ETL技术——提取、转换、加载,将各系统的数据整合到一起。当然,这需要一定的开发周期。"
我得小心不要过度承诺,数据整合项目失败率很高,尤其是在这种复杂的环境下。李明远提醒自己。
张志强思考了一会儿:"好吧,如果真能解决我们的问题,值得一试。不过我要提醒你,年轻人,我们信贷部门已经被IT部门的'解决方案'失望过很多次了。"
会议结束后,李明远和王海燕走在回信息科技部的路上。
"张志强这个人不太好打交道,但他是银行的老人了,对业务非常了解。"王海燕解释道,"他对IT部门有些成见,主要是因为过去几次系统改造都没能解决他们的实际问题。"
李明远点点头:"我能理解。不过,他提出的问题确实是数据整合的典型挑战。要解决这些问题,我需要深入学习一下我们的Oracle数据库和系统架构。"
王海燕拍了拍他的肩膀:"这正是我想听到的。从明天开始,我会给你安排一些时间,带你深入了解我们的数据库环境。"
2005年7月26日,星期二,上午10:00
银行信息科技部
李明远的电脑屏幕上显示着Oracle SQL Developer的界面,一行行SQL语句在黑色的查询窗口中闪烁。王海燕坐在他旁边,耐心地解释着银行Oracle 9i数据库的架构和特点。
"我们银行的核心业务数据主要存储在Oracle 9i数据库中,这是目前金融行业最常用的关系型数据库之一。"王海燕指着屏幕上的表结构图说道,"Oracle的优势在于稳定性和安全性,这对银行业务至关重要。"
李明远认真听着,不时提出问题:"我看到很多表名都是缩写,而且没有注释,这给理解数据结构带来了困难。"
这种命名方式在老系统中很常见,但对新人非常不友好。如果能建立一个数据字典,将大大提高开发效率。李明远暗自记下这个想法。
"这是历史遗留问题。"王海燕叹了口气,"早期系统开发时,存储空间和性能都是考虑因素,所以采用了简短的表名和字段名。现在我们有一份数据字典文档,但并不完整,很多定义需要靠经验来理解。"
接下来的几个小时里,王海燕详细讲解了Oracle数据库的核心概念:表空间、数据文件、段、区、块等物理存储结构,以及实例、SGA、后台进程等内存和进程架构。
"数据库优化是个大课题。"王海燕打开了一个复杂的SQL查询,"看这个查询,它需要连接七个表,处理上百万条记录,如果不优化,可能要运行几小时。"
李明远仔细分析着查询语句:"我看到了问题,这里没有使用适当的索引,而且连接条件可以优化。"
王海燕眼前一亮:"没错!你对SQL优化有研究?"
"在学校做过一些相关项目。"李明远谦虚地说,"不过实际环境肯定更复杂。"
"确实如此。理论和实践往往有差距。"王海燕指着屏幕,"比如这个查询,按理论应该使用索引,但实际上全表扫描反而更快,因为我们的数据分布特点和硬件配置的原因。"
李明远若有所思:"所以优化需要考虑具体环境和数据特点。"
学校里学的理论在实际环境中并不总是适用,需要结合实际情况灵活应用。这也是为什么经验如此重要。李明远在心里总结道。
"正是如此。"王海燕点点头,"接下来我们看看PL/SQL,这是Oracle的过程化SQL语言,我们很多业务逻辑都是通过它实现的。"
王海燕展示了几个银行常用的存储过程和触发器,解释了它们在业务