技术开发 频道

Oracle技术嘉年华2011:专访数据库专家

    【IT168 专稿】2011年10月20日-10月21日,“Oracle技术嘉年华”在北京国宾酒店隆重举行,这是暨年初数据库技术大会后的又一次Oracle数据库盛会。

  本次Oracle技术嘉年华(OTN China Tour)集结了数十位国内外Oracle ACE Director专家,在两天时间内分享交流Oracle、MySQL、Java等方面的技术知识。

  这次活动由ACOUG发起,由云和恩墨、IT168、ITPUB联合主办。作为IT168技术频道的编辑,本人采访了具有多年数据库开发与项目管理经验的数据库专家怀晓明先生,畅谈Oracle数据库开发方面的话题。以下是采访部分内容:

  数据库异军突起 何去何从

  作为数据库方面的专家,怀晓明主要谈到了几大数据库在目前市场中的情况,以及企业系统开发建设中存在的一些问题。他表示,数据库近些年一直处于快速发展之中,除了传统的商业数据库例如Oracle、IBM的DB2、微软的SQL Server,其它的开源数据库,例如MySQL、PostgreSQL异军突起,逐渐增大了市场占有率。随着SNS的兴起,各种NoSQL数据库如Cassandra、MongoDB、Hadoop等也逐渐为大众所知晓。

  无论是传统的关系型数据库还是新兴的NoSQL数据库,无法一概而论谁绝对好谁绝对差,在不同的场景下不同的产品有各自的优势所在,企业在选择数据库的时候更多的应该考虑自己的实际需求,选择适合自己应用的数据库。抛开开发与维护成本不说,至少从技术层面,应从比如对性能的要求,对存储容量的要求,对数据存储结构的要求,以及对安全性的要求等方面去决定究竟该采用哪种或者哪几种数据库。举个例子,Hadoop很热,但若你没有很大数据量要去处理,就没必要跟风用Hadoop。

  数据库开发:企业系统开发不应忽视的关键点

  企业在选用不同数据库上存在纠结不休的主要原因是有相当一部分企业认为当前用的数据库性能太差,需要换个新的数据库。比如“某某数据库太烂了,业务还没到高峰时,做个查询都要十几秒才能出来,太慢了……”,但他们可能并不知道,其实真正的原因很可能是库表设计不合理或开发人员写SQL的水平太糟糕导致的。他他曾经亲自处理过一条运行需要3分钟的SQL,最终将其优化到3秒钟就可以执行完毕。这种情况下,如果仅仅是换个数据库或者增强硬件设施,那不知道额外花多少钱,而且还未必能达到优化后的效果。

  有统计数据表明,在针对数据库的优化中,大约10%的问题是从网络和系统层面调整便可以解决的,大约20%的问题是从数据库系统本身调整就可以解决,而高达60%~70%的问题,却必须从数据库的设计与开发上面去解决。他所了解的一部分软件开发公司实际上已经意识到技术在节约企业成本方面的重要性了,但是还不够深入,重维护而轻开发的现象依然普遍存在。

  从他了解到的情况来看,大部分的DBA平时都在忙于救火,启停数据库、调整数据库参数、SQL调优、备份恢复等工作是家常便饭,整天忙于这些技术要求不低但又重复性很高的工作。其实DBA们也不愿意这样,由于系统设计和软件开发水平太差,导致他们不得不接受“一直都很忙,到处在补漏”这个残酷的现实。通俗点说,就是一直在打小怪物,除了涨涨经验值升升级,还是一直在打小怪物,这奥特曼当得够憋屈的。

  可喜的是,一部分DBA认识到这方面的问题,主动介入到系统设计阶段,在数据建模、库表设计上严格把关,并对开发写的每一条SQL都进行评审,评审合格的SQL才允许上线运行。将DBA迁移无疑对提高系统的整体质量有很大的帮助,但这得借助公司层面的大力支持——嗯,你猜的没错,他是在说淘宝的模式。

  如何提高开发系统的性能

  一般公司没有这样的意识也没有这样的资源来做,那如何提高所开发的系统的性能呢?他觉得有以下几方面可以去做:

  1. 依据需求做好数据模型规划,做好库表设计。规划时注意一定的可扩展性和灵活性,以适应可能发生的需求变更。但这不是说要一味的无原则的去迎合需求变更,要学会说不。

  2. 深入学习数据库开发技术。例如有一定数据库开发经验的同学可以跟着《剑破冰山——Oracle开发艺术》一书来学习,此书实战性很强,仔细品味能给你带来很多好思路和好方法,你可以轻松应用到你的实际开发中。

  3. 了解SQL的运行机制。作为数据库开发人员,没必要像DBA那样对数据库的各个方面都要掌握,但最基本的SQL的运行机制要了解清楚。你需要知道绑定变量的优势以及在什么情况下用最合适,你需要了解普通索引、反向索引、函数索引等几种常见的索引并知道何时用最合适,你需要知道批处理的优势,你需要知道分析函数的好处等等。仅仅做到以上几点,你开发的系统的运行效率将能大大提高。

  以上几点并非相互孤立的,它们是相互联系相互制约又相互促进的。例如若库表设计不好,那SQL写得再牛也没啥用;同样,库表设计得很好但SQL写得很差劲,同样无法让系统跑得快。一般中小企业的中小型系统,做到以上三点,那就很不错了。如此开发出的系统,不仅能降低DBA的救火成本,为售后工作减轻极大的压力,还有助于提高工程师们的自信心,能更加高效的建设好下一个系统,无形中降低了企业的人力成本,这是一个企业和员工双赢的局面,何乐而不为?!

  说完这些,你肯定要问,那如何提高数据库开发水平呢?如果你是初学者,那建议你先学好基本的SQL语法,掌握增删改查,掌握表的各种常用连接,然后再学习官方文档(例如SQL开发指南一类的文档)上的内容,因为不同的数据库在非标准的功能上是会有自己特有的语法的。基础打好后就该上进了,以Oracle为例,对于具备了一定的Oracle数据库开发基础的开发者来说,除了刚才提到的《剑破冰山——Oracle开发艺术》一书外,你还可以到ITPUB论坛的Oracle数据库开发版(http://www.itpub.net/forum-3-1.html)等版块发帖询问在学习、开发中碰到的问题,这样就能快速提高你的数据库开发水平了。

0
相关文章