14827 items (1495 unread) in 26 feeds
Database
(1495 unread)
作者:Fenng 发布在 dbanotes.net. 
昨天刚胡扯完 DBA 的薪水,今天就看到 CSDN 登了对我的采访《DBA薪酬挺高 盲目从之不可取》,其实这只是时间上的巧合,这个采访在春节前就做完了。我昨天写 Blog 的时候也因为不知道 CSDN 什么时候能发布而根本没提这回事儿。
就那个”起薪最高的为 DBA“ 我上篇帖子说过了,按照各自的理解吧。其实这样的采访肯定要挨骂的,不被大骂可能就是好事情了。下面有个留言的朋友挺有意思,"这人长得像长臂猿",汗,事实是,我的胳膊的确不长,谢谢!不过真的觉得自己好像正在上树的猴子,就知道编辑要照片没好事情 :)
附一下采访的全文:
记者:由于国内的分工不够细而且你也知道中国的开发人员要求博学广用,大部分的企业不会请专门的DBA,重视度也不够高。能否结合你的经历谈一谈我国DBA近几年的境况?
Fenng:我在2005 年3月加入阿里巴巴,这几年来一直负责维护支付宝的数据库。阿里集团的DBA团队相对比较专业,也比较成熟,这几年来,也不断有新的同事加入。团队对于成员的技术要求,我个人认为在关系数据库这一块还是要尽可能的专业,然后在专业的前提上尽可能的掌握一些相关度比较高的技术,比如存储技术、数据安全等。
最近几年来,国内DBA群体发展还是比较迅速的,在国内比较大数据库技术论坛(比如ITPUB)上参与讨论的DBA从数量上看是越来越多(当然技术的深度也可能被摊薄了一些) 。近期国内也有一些DBA独立顾问涌现出来,这在几年前是不太现实的事情。这也多少说明了,数据库技术服务市场需求逐渐大了起来。
至于国内 DBA 的薪酬,我想应该比一般开发人员高一点,毕竟数据是企业的命脉,那些过去对数据不够重视的企业多少都可能受到点教训。当然,DBA的压力也相对大一些,也算是个有点风险的“工种”。对比国外的薪酬比例,国内DBA的薪酬相比国外同行还是偏低一些。
记者:你怎么看待中国DBA未来的需求?
Fenng:个人浅见,在国内未来几年,对于DBA 的需求尤其对高级DBA的需求会越来越大。目前国内经济形势大热,企业成长的速度也比较惊人,对数据的重视程度也会越来越高,从这个角度上看,是会需要比较多的专业DBA的。
另外一方面,DBA的技术级别分布基本也是呈“金字塔型”,初级的永远最多,中级次之,高级永远都是少数(注:这几句话的确挺"废")。而且,随着一部分高级DBA的职业发展规划的变化,或者是随着年龄变化,可能会转向其他岗位,空出来的岗位需求永远需要有人顶上。
记者:很多IT专业技术的入门者说想从事DBA,但不知道怎样让自己更“专业”、不知道该获得什么认证,又不知道该选择哪种数据库专攻,能否请你结合这些问题给他们些建议?
Fenng:也有朋友问我类似的问题,说“想从事 DBA”,但我觉得很多人还是隔河观景的心态,总觉得DBA这个职位是不错的,其实任何一个职位做好了都一样的,最适合自己的才是最好的。
现在在国内,证书其实没有多大用处,尤其是没有任何经验背景的情况下去考证书。很多在校的学生,找一份 Braindump ,背几天,也能考过,这样的情形下,证书基本上就贬值了,当然我不否认证书在某些时候的确是个敲门砖。
至于专攻哪种数据库,肯定还是要“物以稀为贵”,同时要考虑市场的需求程度。几年前,Oracle 领域的DBA还是比较欠缺的,所以会有一批技术人员涌入这个市场,而 Oracle 的市场也的确做的不错。但从现在的业界发展趋势看,成熟的MySQL DBA 是比较欠缺的。就我所知,很多 Web 2.0 公司都在招聘 MySQL 相关的人才。但是 MySQL 的一个最大的问题是上手太容易了,很多人就以为没有什么技术含量转而进攻其他技术领域了,但实际上,一直走下去,才会发现该技术领域其实挺宽的。我的建议是,MySQL 也是大有文章可为。
记者:Sun收购了MySQL,主流数据库背后都有了IT大牛们的支持,这是否反应了某种趋势?你认为这种趋势对DBA人员有什么影响?
Fenng:MySQL 在这一波 Web 2.0 的大潮中是个赢家,但这不保证 Sun 买来 MySQL也能成为一个赢家,至于主流与否, 还要看用户接下来的接受程度。如果 Sun 把 MySQL 束之高阁,或是奇货自居,广大用户转而拥抱 PostgreSQL 也说不定。IT 界我感觉也和历史差不多,分分合合, 没有什么是一成不变的。所以,DBA 人员也不能总抱住一家数据库吃老本,即使现在某个数据库厂家如日中天,谁知道他过几年会怎样? 对DBA来说,也要作一点技术储备才好过冬。
以上只是一家之言,贻笑方家。
有未能说透的地方欢迎大家和我邮件探讨: dbanotes@gmail.com ,或是在我的 Blog 上留言。
--EOF--
相关文章|Related Articles
评论数量(3)|Add Comments
本文网址:[www.dbanotes.net]
最近作者还说了什么? Follow Twitter / Fenng
Following on from my postings last week about future OBIEE architecture, I’ve spent a couple of evenings this week taking a closer look at the web services support in Oracle Data Integrator. Specifically, I was interested to see how ODI mappings and packages could be called by a BPEL process, and how data retrieved from a web service could be included in a mapping or process. I’m also indebted to Douglas Stevenson who’s written about this functionality in a forthcoming Oracle Scene article and who batted a few ideas about with me as I came up with my findings.
ODI in the current 10.1.3.4 release has three major areas of web service functionality;
The examples in the ODI documentation suggest installing the Oracle Data Integrator Public Web Services, and any Data Services you create, using the Apache Axis2 web services engine that you can then install into a Java application server such as Oracle OC4J. I took Douglas’ recommendation and downloaded Apache Axis2 1.2 from the Apache website, and installed it into the default OC4J home in Oracle Application Server 10.1.3.3.1 (the one that comes with Oracle SOA Suite 10g). Having a play around with the three bits of functionality, they seem to work in this way:
The Oracle Data Integrator Public Web Services is fairly straightforward and allows you to call an ODI scenario (in OWB terms, a process flow) via a web service call. A typical way you’d use ODI in this way is to call a bit of bulk data transformation as part of a business process, such as in the BPEL diagram below:

If you’ve read the recent OTN article I put together on BPEL and OBIEE, setting up ODI to work in this way is pretty similar. You add a reference to the ODI Public Web Service as a partner link in your BPEL process, then make calls to it using Invoke activities. When you add an Invoke activity that refers to the ODI Public Web Service you get a choice of three activities:
with the first activity being the one you’d need to choose.

Other than the Invoke activity, you’d also need to add a corresponding Assign activity before it to set the details of the scenario being called, the respository being connected to and so on. Once this is all in place, you can call a bit of bulk data transformation directly from your BPEL process and use this as a substitute for moving and transforming data on a message-by-message basis.
The second bit of ODI web service functionality is Data Services. Data Services allow you to take a data store in your ODI repository (usually a table or view, but it can also refer to anything that ODI recognizes as providing data) and give it a web service interface, so that outside applications can select from it, update it, delete from it and so on. ODI comes pre-configured to work with Apache Axis2, a web services engine that you can download free from the Apache website and installs pretty easily into the OC4J container in Oracle Application Server. Once you’ve defined an Axis2 data server in your Topology Manager application, like this:

you can then take any model in the Designer application and select datastores (tables, views etc) within it to publish as web services.

The technology behind this is contained in another type of knowledge module, a “Service Knowledge Module”, that takes data in for instance an Oracle database and provides the interface over it. Once you’ve selected your tables and imported the required knowledge module, you then publish the service to, for example, Axis2 wherapon you can then check out the endpoint.

The tricky bit, I found, with data services is getting the JDBC data source set up correctly. The web service that ODI generates doesn’t use your ODI connections but instead uses a JDBC data source on the application server, which in OC4J’s case needs to be set up using Enterprise Manager and then in the web.xml file for the Axis2 application. You then need to refer to it correctly in the Services tab for the data store in ODI, get any of these wrong and the service will appear to register correctly but won’t return any data, with any error messages being just cryptic java stack traces.
Anyway, the third bit of web services functionality in ODI is the ODIInvokeWebService tool, a bit of functionality you can invoke from the Package editor, analogous to process activities in OWB process flows.

This is the bit of functionality that allows you to bring in data requested via a web service into your ETL process. It works in a bit of a funny way though; first of all, its a package step, not an operation or activity you include in mapping, so you can’t “join” to a web service in an interface (analogous to a mapping in OWB), you have to request the data separately, put it into a relational table and then joint to that, if you want to refer to data from a web service in an interface.

Moreover, the way the ODIInvokeWebService tool works is that it makes a web service request, dumps the response into an XML file, and you then process the XML file as a document like any other XML document you might want to load.

Looking at this, it’s obviously not something you’d want to make lots of references to as part of a bulk loading ETL project, as each time you call the web service you’ll have to get the response, copy to an XML file, load the XML file and so on. There are ways around this if your web service can return data on multiple requests at once - the data services feature I mentioned earlier has a “getCustomerList” operaton that returns data on multiple customers in one go, which means you could get details on all the customers, for example, that you wanted data on and request all their data at the start of the ETL operation - but clearly in this implementation, you can’t treat data coming in from a web service as being functionally equivalent to data coming in from file or relational sources.
Then again though, giving the latency of web service calls, would you really want to do this though anyway, “joining” to web service like you would join to a table or file? It’s more likely you’d want to gather all your web service data up anyway and stage it into a high-performance table rather than slow down a table join by lots of HTTP requests out to a remote web server, and perhaps the example I’ve seen in Douglas’ upcoming article, where a web service is called when a package fails and we therefore need to get some human workflow intervention, is the more likely scenario.
Anyway, that’s the low-down on how web services functionality works in ODI 10.1.3.4. The ability to reference an ODI scenario from BPEL, for example, is a fairly obviousl clear win and of course this is a nice way to have BPEL control your ETL process orchestration. Data Services I’m not sure I’d have a use for, but if you ever need to web service enable a set of data mart tables, for example, then this’d be handy. The ODIInvokeWebservice tool made me think a bit though, in the past I’d thought of data coming in from web services as something you’d drag on to, for example, an OWB mapping and refer to just like any other data source in a mapping, but the way ODI deals with them, together with the inherent latency in such a technology, probably means you’ll gather data using them upfront in your mapping at the preparation stage, or you’ll use them as a way of invoking some workflow as part of your ETL control process.
Given all this though, I wonder how OWB will provide support for web services in the next release? SOA functionality is on the development plan for the next major release of OWB, due I guess in late 2008, I’d be curious to see whether it takes the same route as ODI (OWB will support ODI knowledge modules in the next release) or whether they make a stab at making web service data as usable in mappings as relational data? We’ll have to wait and see.
Anyway, thanks again to Douglas for some of the ideas I bounced around here, and for helping me get Axis2 set up. If you’re a UKOUG member, keep an eye out in the next Oracle Scene magazine for his in-depth look at ODI’s web service functionality.