论ibm技术加油站兰州讲座
9月20日参加了IBM技术加油站在兰州的技术讲座,兰州这样的讲座还是非常之少的,除了我们技术人员外,参与的还有IBM在石油、能源、金融领域的客户。做为厂商,能在兰州举行技术讲座非常难得,比起其它厂商,IBM还是相当不错的。就我知道的,微软社区的技术巡演走到西安一般就不会再过来了。这次讲座的主讲人为IBM的讲师马林和AMD的徐方老师。
讲座内容可圈可点,下面我就讲座中的技术亮点结合其它厂商的解决方案,对比分析。先说一下,很多对产品评价性的论点是个人言论,和讲座无关,以免给讲师惹麻烦。
一、xml存储和查询支持
做为下一代数据库的特征之一,xml支持能力非常重要,关于为什么数据库要支持xml的存储,下面会有分析。目前三大主流数据库厂商都有支持
1:DB2
在DB2 9中提出了pureXML技术:加入了xml数据类型,表中某个字段设置为xml格式,内部处理机制可能是将这种数据类型按照层次数据存储,层次存储的最大优势是对树结构数据的查询,这样高级语言的XQuery功能就可以在数据库端实现。这样实现XML的实现无疑具有性能优势。
2:ORACLE
以前我在Oracle9i中对XML数据的处理是存为CLOB格式,数据访问层得到CLOB大数据后在业务逻辑层进行XQuery,ORACLE 10g第二版开始,数据库可支持XQuery查询,xml数据格式可以用CLOB或二进制方式存贮,但是我怀疑这种方式使用虚拟表的方式,功能上没有问题,但是性能没有准确的数据说明。
3:SqlServer2005也具有类似的功能,对xml数据可以建立索引,也支持XQuery的数据库端查询。
从功能上说,都差不多,说pl/sql和XQuery都可以相互嵌套,对关系数据库存在主外键等多种约束方式,XML数据类型也可以通过xml schema校验能力具有数据完整性约束的能力,这点三个数据库都可以做到。但是从数据的存储机制上看,xml的层次化数性存储方式性能更优,对大数据量的xml的存储需求,可以更多考虑。
二、行压缩的数据存储算法:
从逻辑视图看,关系表是由记录行组成。从物理视图看,数据是磁盘上的二进制流,行压缩就是按照某种数据存储算法,重复数据放入某目录中。相应位置放入目录中对应数据的指针。如果有大量的冗余数据,使用这种技术还是非常好的,减少了数据存储的空间,磁盘存储量的减少了,读写磁盘时候也节省了I/O操作。这种技术我在ORACLE和SQLSERVER中还没有见到。但是由于决定数据存储的时候要判断重复数据,会造成写性能下降。所以要仔细考虑数据特点再决定是否使用这种技术。
三、内存管理
虽然这次讲座强调了DB2的自动内存管理功能,但是自动内存管理在ORACLE10G,SQLSERVER2005中也有实现,而且oracle实例设置最大SGA和默认SGA后可以自动调整。Oracle的PGA可以多Session共享,性能还是非常不错的。但是SQLSERVER这方面不是很好,听说会有吃调操作系统太多内存,导致死机的情况。这两项技术在DB2 Express-C的部分没有介绍,不知道免费版是否支持。
四、开源支持
应该说,就免费版本来说,DB2对开源有更好的支持,免费数据库DB2 Express-C,不限制使用时间,不限制数据库大小,可以达到4G的内存和2CPU,不限制用户数,不限制本地连接数,可以运行在64位操作系统,支持Linux和Windows操作系统他。支持pureXML技术。我们可以从ORACLE网站下载免费版本是OracleXE,企业版Enterprise Edition并不是免费,而且用于技术研究的企业版会有时间限制。不过DB2 Express-C的开源协议是什么,是否可以应用于商业应用,并没有了解清楚。sqlserver也有免费版本,我不太关心和使用sqlserver,没有什么印象。
五、其它的技术没有什么太多的新意,其实就事务控制,并发控制,空间管理,分区管理,容灾备份、恢复这些数据库常规功能。我习惯使用oracle了,db2使用比较少,sqlserver呢不太喜欢用。就功能上看基本一样,但是性能比较手上没有这方面的资料,不好评价。
总的来说,不论是开源应用还是企业应用,IBM DB2都是非常不错的选择,如果有xml的存储需求,可以更多考虑DB2 9这个版本。
现在讨论下,为什么数据库要支持xml的存储,这也是本次讲座的一个要点,对它的很多观点我持保留态度,下面结合我的经验谈谈。
1.SOA应用,xml做为数据总线,但是我个人觉得SOA架构中的xml数据并没有持久化存储的需求,xml信息应该只是做为消息传递的载体。
2.非结构化数据,在我最近做的电信号码百事通中就有很多非结构化数据,比如新闻信息。
3.Integration Database:做为各个系统中的数据集成数据库的一种解决方案,各个系统提供xml信息,中心数据库也提供xml信息给另外一些系统。
使用数据库集成数据在以前还是比较常见的一种方式。比如在电信上业务支撑,计费,客服都有自己的用户信息,造成的数据冗余、多种含义曾带来很多不便。当时就有提出过用数据库来数据集成的这种做法。比如ODS就可以认为是这种解决方案。这都是以前EAI比较流行的解决方法。但如果是同构数据库还比较好说,如果是异构数据库,数据流动会比较麻烦,这时用文本文件的方式比较常见,接口开发工作量大而且不能很好适应变化。当然也可以使用XML解决,但是性能问题到现在也没听说有好的解决办法。综合上叙考虑,这次的培训教材中提出的建立纯XML的Integration Database是不太现实的。
4.应用中需要使用xml数据格式持久化保存数据的情况。
比如,如果要自定义wf的设计器,设计结果是后缀为XOML的XAML数据格式文件,如果是状态机的化还会有后缀为layout的xml文件,Persistence的持久化结果也是XML文件。我现在的应用中都是用文件方式管理这里数据。但是如果有多个具有流程修改权限的人同时修改流程定义,就会由于并发生性问题,造成冲突,到底用谁的啊。当然这个假设不是非常合理,但是如果对xml有并发性和事务性的需求,我么就可以考虑使用数据库对事务和并发的天然支持,很容易的解决问题。
5.一个不恰当的例子
讲座中举了个关于DB2 9的例子,大意是某公司的报表解决方案以前需要十几个小时,使用DB2 9以后,报表的生成时间大大降低了,我记得大约是1个小时。为什么呢,因为报表需要的数据是xml格式的数据,没有采用DB2以前是存放在CLOB字段中,生成报表需要将CLOB字段中所有数据取出,再进行XQuery查询,取得真正需要得数据。而采用DB2 9后使用PureXml技术,可以直接在数据库中查出需要的数据。很明显,这样即节省了数据库资源,减少了网络上数据传输量,又可以节省应用服务器的资源。但是我对这个例子有所怀疑,一般的自动化报表解决方案,报表的样式会用XML的数据格式保存,但数据本身多半不会采用上面例子中的设计。也就是说,这个报表设计方案本身是存在设计缺陷的。做为讲座示例,多少有些不当。
下面是各数据库对开发工具的支持
1.sqlserver 2005和vs本身是一家的产品,集成相当的不错。.net解决方案中的很多特性一开始也是只有配合sqlserver才能实现。比如缓存处理中的数据发生改变自动通知,更新缓存的功能。再比如wf和asp.net2.0中的用户自定义风格,webpart,用户和角色的provoid也是只提供了sqlserver2005的支持。但是正因为这样,微软的东西缺乏开放性,在企业级应用中,由于应用环境多样,往往使用会受到限制。
2.oracle和db2都是第三方的厂商,都对java开发环境和.net开发环境支持,但是db2本身就有workshop开发环境。db2也提供了for .net,for ruby on rails,for php的插件,即提供了对db2的连接器,也像workshop中一样提供了db2的客户端工具,可以在开发工具中编写调试sql和XQuery查询。
oracle也提供了
其实这个问题关键是界定某些功能到底应该是由开发工具厂商提供,还是由数据库厂商提供。像数据库连接程序应该由数据库厂商提供,毕竟他们最能使性能最优化。像开发插件,即可以由开发工具厂商,也可以由数据库厂商做。比如oracle就提供了用户管理和角色管理的provoid,DB2这次提供的开发工具插件。开发工具厂商也可以在数据库连接器的基础上自己做。我觉得我们个人实际上也可以结合工作需要,涉足一下,多些东西出来的。