Mitch Ruebush
简介
传统上,负责比较和选择数据库管理系统的决策者一直将数据库的部署方面作为选择数据库的首要判据。因此,很多调查研究都在对可用于引导决策者的竞争数据库的性能、可伸缩性、可靠性、可用性和可管理性进行比较。部署能力固然是在选择数据库时需要考虑的重要因素,但从应用程序开发平台的角度评估数据库也同样重要。Gartner 于 2002 年 5 月发表的一篇名为《应用程序开发决策的成本与风险》的报告(作者为 Joseph Feiman 和 Tom Berg)显示,开发时间和支持成本是大多数公司应用程序总成本中最大的一部分成本。换句话说,开发效率对与数据库相关联的所属权总成本 (TCO) 及投资回报率 (ROI) 有着巨大的影响。决策者在比较和选择数据库时充分考虑开发效率是非常必要的。
比较的基础
Microsoft® SQL Server™ 和 Oracle 都是具有丰富的开发和部署功能的成熟的数据库。因此应如何从开发效率的角度比较这两个数据库呢?本文将集中阐述这两个数据库的三个关键要素,它们会对许多应用程序开发人员的开发效率产生最大的影响。这三个要素是:
• 与 Microsoft Visual Studio® 和 Microsoft .NET 平台的集成
• 对基于面向服务架构 (SOA) 的应用程序开发的支持
• 部署灵活性
与 Visual Studio 和 Microsoft .NET 平台的集成
Microsoft Visual Studio 是当今市场上最流行的应用程序开发工具。Microsoft .NET 是作为最流行的应用程序开发平台出现的。因此,Oracle 和 Microsoft 都将各自的数据库产品(分别为 Oracle 10g 和 SQL Server 2005)与 Visual Studio 和 .NET 平台集成在一起。与 Visual Studio 和 .NET CLR(公共语言运行库)的集成代表着最近十年中数据库应用程序开发效率的一个最大的提升。本文将比较 Oracle 10g 和 SQL Server 与 Visual Studio 和 .NET CLR 进行集成的情况。
基于 SOA 的应用程序开发
下一代的网络、连接和分布式应用程序将基于面向服务架构 (SOA) 概念。SOA 将从根本上改变应用程序的设计、开发和部署方式。数据库在面向服务的架构中将扮演重要角色。因此 Oracle 和 SQL Server 都提供了若干新功能来支持基于 SOA 的应用程序开发。这些功能包括:
• XML:能够在数据库中高效存储、分析、验证、查询和更新 XML 文档。
• Web 服务:能够将数据库对象(表、存储过程等)公开为 Web 服务,能够从数据库内部调用外部 Web 服务。
• 异步消息队列:在系统出现故障时仍然能够保证将消息一次发送到其他网络和分布式应用程序。
• 事件通知:能够以适合于接收者的格式将重要的业务事件高效地分发给许多的用户和设备。
• 查询通知:应用程序能够“预订”数据库中影响特定查询结果的更改,并能在更改发生时收到通知。
本文将比较这两个数据库在支持基于 SOA 的应用程序开发方面的能力。
部署灵活性
客户希望能够根据用户数、数据量以及所需硬件和功能的规模,基于最适合其当前需求的数据库版本灵活部署应用程序。此外,它们还希望日后能够在少修改或不修改的情况下重新部署相同的应用程序。要满足这种要求,所有的数据库版本都必须支持相同的基础 API。这对于那些创建打包应用程序并希望只进行一次应用程序开发,同时又使客户能够基于任一版本进行部署的独立软件供应商 (ISV) 来说尤为重要。否则必须分别开发应用程序的各个版本,这可能既非常费时,又非常费钱。Oracle 和 SQL Server 都已通过提供多个版本满足了这种要求,每个版本都具有不同的功能和价格点。稍后我们将对 Oracle 和 SQL Server 的这种能力进行比较分析。
结果摘要
本文中的评论都是基于 SQL Server 2005 和 Oracle 10g 文档中公开发布的功能和公开声明进行评述的。以下是作者的调查结果摘要。本文的余下部分将详述这些调查结果。
Visual Studio 和 .NET CLR 的集成
尽管 Oracle Database 10g 和 SQL Server 2005 都与 Visual Studio 和 Microsoft .NET 平台集成,但与 Oracle 10g 相比,SQL Server 的集成更全面、更无缝、更实用、性能更好。
Visual Studio 集成
目前 Oracle 只提供与 Visual Studio 的基础集成。Oracle 提供了一个 Visual Studio 插件,称为 Oracle Developer Tools for Visual Studio .NET 。如果在 Oracle 站点搜索 .NET Developer Tools,将会找到借助 .NET 平台使用 Oracle 进行开发的各种下载和信息。Oracle 没有提供对开发效率有着重大影响的许多重要功能,包括:
• 通过 Visual Studio 调试存储过程。Oracle 不允许以其专有语言 PL/SQL 实现的存储过程通过 Visual Studio 来进行调试。开发人员必须使用单独的工具如 JDeveloper 来进行调试。
• Visual Studio 项目。Visual Studio 提供了一种称为 SQL Server Project 的强大功能,它可以将所有数据库对象(存储过程、触发器、用户定义的函数、用户定义的对象、聚合和类图)作为一个相干实体来进行管理,从而简化 SQL Server应用程序的开发。SQL Server 项目还使开发人员能够充分利用 Visual Studio Team Services(VSTS)功能,如源代码管理、版本控制等。
Oracle 没有等效于 SQL Server Project 的功能,这将大大降低开发效率。
• 通过 Visual Studio 进行自动部署。在 SQL Server 项目中开发了 SQL Server 数据库对象之后,通过单击可以将它们部署到 SQL Server 数据库。单击部署也适用于 .NET 程序集。Oracle 与 Visual Studio 的集成不支持这一功能。
• 商业智能(BI)技术的集成。包括 SQL Server Analysis Services、Reporting Services 和 Integration Services 在内的所有 SQL Server BI 技术都与 Visual Studio 集成。然而,Oracle 的 BI 技术,如 Oracle OLAP、Oracle 数据挖掘、Oracle 报表系统或 Oracle 仓库构建器,都没有以任何方式与 Visual Studio 集成。因此,希望将 Oracle 的 BI 功能并入其应用程序的 .NET 开发人员必须学习使用另一种工具如 Jdevelopers,因此对开发效率产生了不利影响。
归根结底就是 SQL Server 与 Visual Studio 是完全集成的,而 Oracle 的集成是不完全的。使用 SQL Server,.NET 开发人员无需任何其他工具,只需 Visual Studio 就可以应对应用程序开发的方方面面。相反,除了 Visual Studio 以外,Oracle 还需要使用 JDeveloper 工具或其他第三方工具,结果无法实现最佳的开发体验,并拉长了学习曲线,降低了开发效率。
.NET 集成
从表面上看,Oracle 和 SQL Server 2005 与 Microsoft .NET CLR 的集成类型似乎相同。但经过仔细考查就会发现,SQL Server 的集成更为紧密,与 Oracle 10g 相比,它提供了更多 功能、更好的性能和更好的可管理性。造成这种差别的主要原因是 SQL Server 在进程内宿主 .NET CLR,而 Oracle 计划在进程外宿主 .NET CLR。这种差别及其对开发效率的影响将在本文后面更详细地加以分析。
SOA应用程序开发
Oracle 和 SQL Server 都提供了相同的功能集来支持基于 SOA 的应用程序的开发。但二者之间存在着易用性差别。SQL Server 具有易于使用的功能,这些功能包含在数据库服务器中,并且是无缝集成的。Oracle 则将这些功能分散在多个产品(数据库和应用服务器)中,并且这些功能的集成性较差。此外,许多 API 都是基于 Java 标准(如 Java 消息服务)的,它们对 .NET 开发人员来说没有任何价值。与 Oracle 10g 相比,SQL Server 提供了一个设计精良、集成性更好、效率更高的 SOA应用程序开发平台。
后面将对这些论断进行更详细的阐释。
部署灵活性
尽管 Oracle 和 SQL Server 都提供了多个版本的数据库,但只有 SQL Server 才跨所有版本提供相同的开发环境 (.NET)、工具 (Visual Studio) 和 API。因此,开发人员只需进行一次应用程序开发;他们可以将应用程序部署在任一 SQL Server 版本(Mobile、Express、Workgroup、Standard 或 Enterprise Edition)上,无需重新编码或修改应用程序。Oracle 则在两个方面表现不佳:
• Oracle 不提供免费的数据库版本。其最便宜的版本是 Oracle Lite。SQL Server Express Edition 则是免费的。
• Oracle Lite 不支持 PL/SQL,而它是 Oracle 数据库开发人员实现存储过程、触发器和对象方法所使用的主要语言。因此可能无法将在其他 Oracle 数据库版本(Standard One、Standard 和 Enterprise)上开发的应用程序部署在 Oracle Lite 上。SQL Server 不存在这种限制。
与 Microsoft .NET 公共语言运行库的集成
Oracle 和 Microsoft 都承认 Microsoft .NET 平台在应用程序开发人员中享有崇高威望,因此都将 .NET CLR 集成到了各自的数据库产品中。CLR 集成将对数据库应用程序的设计、开发和部署方式产生重大影响。CLR 集成为应用程序开发人员提供了许多益处。
1. 应用程序开发人员现在可以用任何 .NET 框架 语言开发数据库逻辑。它们已不再局限于 Transact-SQL(针对 SQL Server)或 PL/SQL(针对 Oracle)。除了开发效率的提高以外,企业还会因公司中所有 .NET 平台开发人员都能在无需学习某一专用语言的情况下开发数据库应用程序逻辑而受益。
2. 应用程序开发人员现在可以在数据库层、中间层或在智能客户端中部署应用程序逻辑。此外,还可以轻松地将应用程序逻辑随时迁移到最适合的层。
3. Microsoft 及其合作伙伴在不断丰富着 .NET 平台的功能。通过利用这些框架,数据库开发人员可以提高工作效率。他们不必一切从零开始,但使用 Transact-SQL 或 PL/SQL 就要从零开始。
好了,鉴于 CLR 集成对开发效率的巨大影响,我们现在将更详细地探讨 Oracle 和 SQL Server 实现。
进程内与进程外宿主的比较
SQL Server 2005 在“进程内”宿主 CLR,而 Oracle 10g Release 2 在进程外宿主 CLR。进程内宿主意思是 .NET CLR 在 SQL Server 进程空间内执行。因此对作为托管代码实现的数据库逻辑(存储过程、触发器和用户定义的函数)的调用不必付出进程间通信的系统开销。但由于 Oracle 计划在进程外宿主 .NET CLR,所以其性能将大受影响。请注意 SQL Server 和 .NET CLR 都有自己的线程和内存管理模型。SQL Server 已将其线程和内存管理模型与 .NET CLR 集成在一起,这提高了 .NET 开发人员微调应用程序的能力。由于 Oracle 在外部宿主 CLR 进程,因此两种线程和内存管理模型并存的事实将使效率无法提高。
CLR 1.1 与 CLR 2.0 的比较
Oracle 10g Release 2 支持 1.1 版的 CLR,但缺少 SQL Server 2005 所支持的 2.0 版 CLR 所提供的更加丰富的 API。这意味着 SQL Server 2005 提供 ADO.NET 2.0 进程内提供程序之类的功能,该提供程序通过数据库服务器创建数据的服务器端视图以及集成的内存和线程管理。
支持的数据库对象类型
利用 SQL Server 可以在托管代码中开发存储过程、触发器、用户定义的函数和用户定义的聚合。Oracle 计划在托管代码中支持存储过程是确定无疑的,但它是否支持其他数据库对象尚不清楚。
.NET 程序集的存储
SQL Server 2005 在数据库内部存储实现存储过程、触发器和函数的 .NET 程序集,而 Oracle 10g Release 2 则在数据库外部存储这些程序集。SQL Server 方法的优点是集成的管理:由于 .NET 程序集在数据库内部,因此从备份、还原、复制和数据镜像的角度来看,其管理和其他数据库对象是一样的。而对于 Oracle,.NET 程序集存储在数据库外部的文件中,并需单独管理,因此增加了复杂性,而且可能导致错误发生。
SQL Server 2005 与 .NET CLR 的集成更深入、更全面,可以大大改善应用程序开发人员的开发体验。
Visual Studio 集成
鉴于 Visual Studio 是最流行和最高效的集成开发环境 (IDE),因此 Oracle 和 SQL Server 都与之集成乃是众望所归。可以预期,随着时间的推移这种集成将不断得到增强。
Microsoft 鼓励合作伙伴用其自己的产品扩展 Visual Studio。为此,Microsoft Visual Studio Industry Partner Program (VSIP) 应运而生。Visual Studio 还提供框架和 API 来支持数据库合作伙伴将其数据库与 Visual Studio 集成。Oracle 也加入了 VSIP 计划,并已通过 Oracle Developer Tools for Visual Studio .NET 将 Oracle 数据库与 Visual Studio 集成在一起。
本节将比较 Oracle 和 SQL Server 与 Visual Studio 的集成情况,及其对开发效率的影响。我们先来看 SQL Server。
SQL Server 2005 与 Visual Studio 2005
Server Explorer
SQL Server 2005 通过一个 SQL Server OLE DB 提供程序与 Visual Studio 集成,该提供程序使开发人员能够通过 Server Explorer 实现与数据库的交互。Server Explorer 使开发人员能够通过 Visual Studio 来管理各种服务,如图 1 所示。
图 1:SQL Server 2005 中的 Server Explorer
使用 Server Explorer 的开发人员将发现 SQL Server Management Studio 提供的许多熟悉的工具对他们都是可用的。例如,开发人员将能够:
创建数据库关系图。
设计表。
在表中查看数据。
创建和执行视图、存储过程、触发器和用户定义的函数。
如果开发人员具有适当的权限,他们甚至还可以通过 Server Explorer 在数据库服务器上设置数据库约束和索引。
图 2:通过 Server Explorer 创建存储过程
ADO.NET 编程
Visual Studio 集成使开发人员能够以图形方式编写 ADO.NET 程序。此外,ADO.NET 还包含了一个优化的提供程序,用于提供对 SQL Server 的高性能数据访问。Visual Studio 开发人员可以将 SqlConnection、SqlCommand 和 SqlDataAdapter 等工件拖放到设计图面上,向导会指导开发人员使用这些工件来连接 SQL Server。请参见图 3。
图 3:拖动 SqlDataAdapter 启动配置向导
Query Designer
Visual Studio 还提供了 Query Designer 工具,用于在数据库中创建查询和操作数据,如图 4 所示。驱动程序还会显示数据库关系图功能,以便查看数据库的实体关系图。
图 4:在 Query Designer 中查看的实体关系图
调试存储过程
开发人员的大量时间都用在了调试应用程序上。因此,调试工具对开发人员非常重要。Visual Studio 提供了一个 Transact-SQL 调试器,它使开发人员能够单步执行存储过程。
若要调试存储过程:
请启动 Visual Studio。
4.在 View 菜单上选择 Server Explorer,定位到 Server Explorer。
5.定位到 SQL Server 实例。
SQL Server 实例。6.在 Server Explorer 中展开 SQL Server 实例节点,然后展开 Database 节点,最后展开 Stored Procedures 节点。
Server Explorer 中展开 SQL Server 实例节点,然后展开 Database 节点,最后展开 Stored Procedures 节点。右击要调试的存储过程,并选择 Step Into Stored Procedure,如图 5 所示。
图 5:通过 Visual Studio 和 SQL Server 2005 单步执行存储过程
8.可以通过 Locals 窗口检查局部变量并编辑它们的值。
Locals 窗口检查局部变量并编辑它们的值。9.按 F10,单步执行存储过程中的一行,监视变量的变化。
10.通过右击要插入断点的行,并从上下文菜单中选择 Insert Breakpoint,可以插入断点。
Insert Breakpoint ,可以插入断点。SQL Server 项目
Visual Studio 2005 集成还通过 SQL Server Project 模板得到了增强,该模板是一个关键的工作效率功能部件。可以在 Visual Studio 中创建 SQL Server 项目,以便于管理数据库(图 6)。
图6:在 Visual Studio 2005 中创建 SQL Server 项目
有了 SQL Server 项目,就可以将以下模板添加到该项目中,以便在数据库中创建不同的用户对象(图 7)。模板会创建起始代码,其中包含了该项目所必需的属性和引用。
图 7:可以选择要在 SQL Server 项目中创建的若干个对象
项目创建之后将获得全部代码调试功能,包括单步执行代码、断点、监视变量等。可以使用各种语言,也就是说可以从 C# 代码转到 T-SQL、转到 Visual Basic® .NET。简而言之就是 Visual Studio .NET 开发人员所依赖的所有功能都可用于调试数据库代码。SQL Server 项目还可实现将代码部署到运行 SQL Server 的服务器这一过程的自动化。开发人员只需对该项目进行配置,以便部署。实际上,开发人员也可以使用这些工具来开发和调试在中间层和客户层中所使用的数据库对象。
Visual Studio 2005 还提供了其他一些优秀的集成功能。例如,Transact-SQL 中的语法突出显示和 IntelliSense®,基于 CLR 的 SQL Server 对象的轻松部署。项目生成之后,您只是生成了项目,然后依次选择 Build、Deploy 菜单项和项目名。
BI 技术的集成
SQL Server 具有一个广阔的 BI 平台,其中包括:
用于分析和数据挖掘的 SQL Server Analysis Service。
用于提取、转换和加载的 SQL Server Integration Services
用于以 Microsoft Excel、HTML 和Adobe PDF 等各种流行格式设计和生成报告的 SQL Server Reporting Services。
Visual Studio 是用 SQL Server 来开发和管理 BI应用程序所需的所有管理和开发工具的基础。
SQL Server Analysis Service
SQL Server 提供 Business Intelligence Development Studio 来帮助开发人员生成分析和数据挖掘应用程序。Business Intelligence Development Studio 使用熟悉的 Visual Studio 界面(图 8),以便最大限度地降低学习难度,缩短学习时间。
图 8:提供多种项目类型的 Business Intelligence Development Studio
SQL Server 2005 Reporting Services
SQL Server Reporting Services 以 Visual Studio 作为设计环境(请参见图 9),用于创建可以 PDF、Microsoft Excel 或 HTML 等多种格式传送的内容丰富的报告。
图 9:Visual Studio 集成了 SQL Reporting Services
Reporting Services 与 Visual Studio 和 .NET 框架紧密集成。报告生成功能使开发人员能够将复杂逻辑封装在用于在报告中计算值的程序集中。这使 Visual Studio 开发人员能够重用业务逻辑。它还充当着需要定期运行的报告的安排引擎,用户也可以即需运行报告。
SQL Server Integration Services
Integration Services 为创建提取、转换和加载(ETL)数据提供了一个基于 Visual Studio 构建的图形环境。 Integration Services 已针对 SQL Server 2005 进行了修补,以便通过使用 Visual Studio 提供更好、更快和更灵活的 ETL 引擎环境(图 10)。利用任何可以使用 .NET 框架的语言编写的代码,Integration Services 还可以充分扩展,因此开发人员能够创建他们自己的对象。
Visual Studio 与 Oracle 的集成
现在我们再来看 Oracle 与 Visual Studio 的集成情况
Oracle Explorer
Oracle 提供 Oracle Explorer 供 Visual Studio 用户浏览 Oracle 数据库之用。开发人员可以查看标准的数据库对象,如表、视图、存储过程、触发器等。此外,开发人员还可以查看某些特定于 Oracle 的对象,如同义词和包。可以单击 Database Diagrams 节点并查看 Oracle 数据库的实体关系图。可以使用表设计器在 Oracle 中创建表结构。请参见图 11。
图 11:使用 Oracle Explorer 在 Visual Studio 中创建数据库表
也可以使用 Oracle Explorer 来启动一个简单的编辑器,从而处理存储过程、触发器和函数。该编辑器支持上下文敏感的帮助;可以在 PL/SQL 存储过程中突出显示某一工作,并按 F1 来启动帮助。Oracle Explorer 允许通过拖放存储过程、视图或表来生成数据库驱动的代码。请参见图 12。
图 12:Oracle Developer Tools for Visual Studio .NET
项目支持
Oracle 10g 没有等效于 SQL Server 项目的组件,因此无法通过 Visual Studio 将所有不同的数据库对象作为一个相干整体来管理。Oracle 不提供应用程序开发模板,因此无法通过 Visual Studio 将数据库对象自动部署到数据库。缺少 Visual Studio 项目支持是 Oracle 与 Visual Studio 集成的主要缺点之一,这将大大降低开发效率。
调试存储过程
Oracle 与 Visual Studio 的集成不涉及通过 Visual Studio 来调试存储过程。开发人员必须使用完全不同的工具如 Jdeveloper 来调试 PL/SQL 存储过程,或者采用拙笨的方法,如使用跟踪文件。调试是应用程序开发的一个重要组成部分,没有集成的最先进的调试器是 .NET 框架开发人员的另一个巨大缺憾。
BI 组件的集成
Oracle 也提供了一个重要的 BI 平台,它包括:
用于分析的 Oracle OLAP Option
用于数据挖掘的 Oracle Data Mining Option
用于设计和生成报表的 Oracle Reports
用于 ETL 的 Oracle Warehouse Builder
用于开发 OLAP 应用程序的 Oracle BI Bean
除了另收费外,Oracle 的 BI 平台对开发人员来说的最大缺点就是它们不与 Visual Studio 集成。BI 应用程序的首选开发框架是 JAVA 而不是 .NET 框架。此外,Oracle 为开发和管理 Jdevelopers、Oracle Discoverer 和 Oracle 企业管理器等 BI 组件所提供的工具都是基于 HTML 的,无法与 Visual Studio 集成。
与 Visual Studio 的集成:结束语
Oracle 在与 Visual Studio .NET 集成中所作的决策是正确的。当前的集成是向正确方向迈进中的一步,但还没有达到 SQL Server 2005 和 Visual Studio 之间深入而全面的集成水平。SQL Server 2005 和 Visual Studio 是当今市场上数据库和 IDE 的最佳组合。这两个产品的无缝集成实践了 Microsoft 的“Better Together”宣言。
基于 SOA 的应用程序开发
XML 支持比较
XML 是作为许许多多现代应用程序数据交换事实上的标准而出现的。它也是基于 SOA 的应用程序和 Web 服务的一项核心技术。数据库将必须支持这些应用程序,使它们能够存储、查询和更新 XML 文档。Oracle 和 SQL Server 都为开发基于 XML 的应用程序提供全面支持。
固有的 XML 类型和 XQuery
Oracle 和 SQL Server 都有一个固有的 XML 类型,也就是说它们实际上都“了解”每一列包含有一个 XML 文档。这意味着:
• 在将 XML 文档存储到在数据库中以前,它们将参照某一 XML 架构验证 XML 文档。
• 允许使用业界通用的 XQuery 查询语言以及 XPATH 来查询所存储的 XML 文档。
请注意,Oracle 10g Release 1 不支持 XQuery。Oracle 宣称它们将在 Oracle 10g Release 2 中支持 XQuery。
不过,这两个数据库所提供的 XML 支持是有些差别的。
索引
索引对于快速执行查询是必不可少的。SQL Server 2005 支持 XML 字段的元素、值和路径上的 B*Tree 索引。索引可大大加速查询执行。SQL Server 2005 还支持其他索引,因此可以通过 PATH 索引、PROPERTY 索引和 VALUE 索引加快其他类型的 XML 数据查询。Oracle 仅提供常规文本索引和函数索引,也就是没有专门针对 XML 的索引。
更新 XML
目前所定义的 XQuery 仅支持 XML 内容的读/获取。它没有定义存储在数据库中的 XML 的更新方法。Oracle 提供两种方法来处理这一问题:
• 替换整篇 XML 文档:如果 XML 文档是作为文本对象存储在数据库中,则 Oracle 允许用新文档替换整篇文档。如果 XML 文档很大且只更新一小部分,则这种方法的效率很低。
• 分解 XML 文档:在这种方法中,必须将 XML 文档分开并作为对象-关系对象存储在数据库中。然后可以使用标准的 SQL 调用来更新 XML 文档的适当部分。这就要求开发人员必须知道 XML 文档映射到基础的对象-关系对象的方式。
显然,这两种方法都有缺点。
SQL Server 2005 是通过扩展 Xquery 以包含更新操作来处理这一问题的。SQL Server 2005 提供了一种用于添加和删除子树以及更新标量值的语言。这使得开发人员得以更轻松、更高效地处理 SQL Server 2005 XML 数据类型。
XML 架构集合和架构演变
SQL Server 允许在同一 XML 列中存储多个不相关的 XML 文档。这一功能是通过创建由一个或多个 XSD 架构组成的 XML SCHEMA COLLECTION 来实现的。SQL Server XML 架构集合限定了可以存储在 XML 列中的 XML 文档类型。用户可以将新的顶级 XML 架构组件和顶级元素添加到现有的架构命名空间中。
此功能提供了一种得体的 XML 数据迁移方式。如果这些架构中有的随着时间的推移而演变了并创建了新的架构命名空间,则可以将演变的 XML 架构添加到同一 XML 架构集合中。XML 列中的现有 XML 实例像以前一样继续存在,同时符合新架构命名空间的实例也可添加到该 XML 列中并被索引。
Oracle 没有可比的功能。Oracle 只支持单根的 XML 实例。在 Oracle 中,可能要使用一种“伞式”架构,在这种架构中必须修改顶级元素类型来适应演变的架构。只有架构通过派生进行演变时,它才不需要任何更改。因此在 Oracle 中架构演变是受限的和非统一的。
Web 服务支持比较
SQL Server 2005
SQL Server 2005 为 Web 服务提供了固有支持 。它可以充当 Web 服务提供者,也可以充当 Web 服务使用者。
Web 服务提供者:
SQL Server 提供了一种非常简单易用的机制,用以支持外部应用程序使用标准协议(如 SOAP)通过 HTTP 以 Web 服务的形式调用存储过程、Transact-SQL 语句和用户定义的函数。通过提供 SOAP/HTTP 访问,即使是零资源占用的客户程序(如 Web 浏览器)也能访问数据库,因为客户设备上不再需要 Microsoft 数据访问组件(MDAC)堆栈。
实现对 SQL Server 的 SOAP/HHTP 访问对于开发人员来说非常容易。他们只需创建一个 HTTP 端点并指定该端点公开的所有数据库对象。其余事情都可交给 SQL Server 来做。SQL Server 集成了身份验证和安全特性,因此只有授权用户才能调用存储过程。SQL Server 利用了 Microsoft Windows Server™ 2003 的内核模式 https.sys 驱动程序,因此无需安装 IIS。这简化了管理。
Web 服务使用者
由于 SQL Server 集成了 .NET CLR,因此可以从数据库内部轻松地调出到外部 Web 服务。
加上 Visual Studio,SQL Server 是一个用于开发和部署基于 SOA 的应用程序的功能强大的平台。
Oracle Database 10g
Oracle Database 也可以充当 Web 服务提供者和使用者。Oracle 提供了一个称为 JPublisher 的工具,用于简化通过 Java 进行的数据库访问和创建以数据库逻辑为中心的 Web 服务。以下是对该工具的的一个简述。
Web 服务提供者
JPublisher 可以生成 Java“包装”类、各种数据库对象如 PL/SQL 包、存储过程、SQL 查询和服务器端 Java 类。这些 Jpublisher 生成的 java 类可通过 Oracle Application Server Web Services Assembler 工具公开为 Web 服务。
Web 服务使用者
Oracle 提供两种方法从数据库内部调出到 Web 服务。第一种方法是手动使用 SOAP。第二种方法是使用 Jpublisher 创建 Java 代理类。生成的代理类可以通过 Java 服务器端类或 PL/SQL 调用。
差别
尽管 Oracle 10g 和SQL Server 2005 都能用作 Web 服务使用者和提供者,但二者之间也有差别,它们对于 .NET 平台开发人员来说具有非常重要的意义。这些差别包括:
• Oracle Database 10g 需要一个附加产品,即 Oracle 应用服务器,以便生成和使用 Web 服务。Oracle 应用服务器必须单独购买。这样就延长了学习曲线,降低了开发效率。如前所述,SQL Server 不需要 IIS 或任何附加产品。
• 要使用 Oracle 10g 的 Web 服务功能,开发人员必须了解 Java 和/或 PL/SQL。显然这对于 .NET 平台开发人员来说毫无意义。
• Oracle 的 Web 服务功能没有通过任何方式与 Visual Studio 集成。Oracle 为此提供的主要 IDE 是 JDeveloper。再次重申,这乃是 .NET 开发人员面对的一个重大障碍。
异步消息传递支持比较
分布式自主程序执行单元之间可靠的异步通信是开发基于 SOA 的应用程序所必需的一个关键技术。传统上都是依靠消息队列系统,如 IBM 的 MQ Series(现在称为 WebSphere MQ)。比较而言,将消息队列系统与数据库集成有许多优点。因此 Oracle 和 SQL Server 都将可靠的异步消息队列分别集成到了 Oracle 10g 和 SQL Server 2005 中,分别为 Oracle Advanced Queuing 和 SQL Server Service Broker 。本文不对它们的特性和功能进行深入探讨。下面是 Oracle Advanced Queuing 和 SQL Server Service Broker 所共有的主要功能的简明摘要。
• 二者都能保证消息一次送达目的地。
• 二者都允许发送方和接收方共存于同一数据库、同一计算机中,或者分布在网络上。
• 二者都使用队列来永久存储消息。队列作为表完整地存储在数据库中。二者都提供对队列的 SQL 访问。二者都能将消息无限期地保留在队列中。
• 二者都实现了消息队列系统与数据库的集成,因此无需外部事务协调程序来协调队列系统和数据库。
差别
虽然两个数据库都提供了类似的核心功能,但 SQL Server 通过提供更高级别的抽象使 Service Broker 能够轻松用于临时的应用程序开发人员。顾名思义,Oracle Advanced Queuing 提供一个队列作为主要的手段。所有使用 Oracle Advanced Queuing 的 API 都是基于队列操作的,如入队和出队。其主界面是 JMS,即 Java 消息服务。
SQL Server Service Broker 提供了一组更高级别的抽象,如对话、协定和服务。开发人员不必处理低级队列操作,如果他们不想的话。Service Broker 还支持服务程序自动激活,而 Oracle Advanced Queuing 不提供这一功能。
Advanced Queuing 提供的许多功能 Service Broker 目前还不支持,如发布-订阅通信模式、在发给订户途中转换消息的功能和管理传送时间表的功能。
事件通知服务比较
SQL Server 2005
Microsoft SQL Server 通知服务使开发人员能够轻松开发和部署用于生成和向用户发送通知的应用程序。通知是个性化的及时消息,可以发送给多种设备。
通知反映了订户的意愿。订户通过输入订阅来表达对信息的兴趣。例如,“当 Adventure Works 的股票价格达到 70.00 美元时通知我,”或者“当我团队正在编写的策略文档更新时通知我。”
通知可能在触发事件发生时生成并发送给用户,也可能按照用户预先指定的时间表生成和发送。用户的订阅指定了生成和发送通知的时间。
通知可以发送给多种设备。例如,可以发送给用户的移动电话、个人数字助理 (PDA)、Microsoft Windows Messenger 或电子邮件帐户。因为这些设备会经常伴随用户,所以这些通知最适合于发送高优先级信息。
Oracle Database 10g
Oracle 没有可与 SQL Server Notification Services 直接相比的功能。若要获得同等功能,开发人员必须对来自 Oracle 数据库的若干技术(如 Oracle Advanced Queuing、作业调度和触发器)以及来自 Oracle 应用服务器的技术(如 Oracle 应用服务器无线系统) 进行组合。Oracle Advanced Queuing 有一个规则引擎,它可以将事件和订户进行匹配,Oracle 应用服务器无线系统也能够像 SQL Server 通知服务那样使用无线和手持设备将事件传送给订户,但这需要开发人员集成这些系统,因此交付这样一个系统会花费较多的时间和金钱。
Query Notification Services 比较
SQL Server 2005
SQL Server 2005 引入了通知支持功能,以支持 SQL Server 查询 。利用该支持功能可以将命令发送给 SQL Server,并在再次执行这条命令所得到的结果不同于最初结果的情况下请求生成通知。这是通过使用依赖项对象来实现的,该对象会检测基础数据的更改时间。通过任一客户端 API 如 ADO.NET、OLE DB、Open Database Connectivity (ODBC)、Microsoft Active Data Objects (ADO) 或 SOAP 发送给服务器的命令都可能包含一个需要通知的标记。对于作为请求一部分执行的每一条语句,服务器都会创建一个“通知订阅”,它会针对请求中包含的每一条语句激发一次。通知是通过一个应用程序可以轮询的 SQL Service Broker 队列来传送的,并且使用激活服务或在通知可用时便作出响应的分块语句。查询通知对实现诸如数据库驱动的 Web 站点之类的应用程序中的结果缓存是非常有用的。
Oracle Database 10g
Oracle 的 ADP.NET 版本是 Oracle Data Provider for .NET (ODP)。ODP 没有等效于 SQL Server Query Notification 的任何功能和产品。若要实现类似功能,必须将若干产品进行组合,如 Oracle Web 缓存 和 Oracle Java 对象缓存 ,二者都是独立的产品,并作为 Oracle 应用服务器的一部分来销售。这两种产品都不与 Visual Studio .NET 集成。顾名思义,Java 对象缓存只对 Java 有用,因此对于 .NET 平台开发人员毫无意义。
比较总结
功能 |
SQL Server 2005 |
Oracle 10g R2 |
|
CLR 集成 |
|||
CLR 集成 |
是 (进程内) |
是 (进程外) |
|
基于任何 .NET 语言的存储过程 |
是 |
是 |
|
基于任何 .NET 语言的触发器 |
是 |
不一定 |
|
用户定义的函数 |
是 |
不一定 |
|
.NET 对象存储在数据库中 |
是 |
否 |
|
Visual Studio 集成 |
|||
通过 Visual Studio 查看数据库对象 |
是 (通过 Server Explorer) |
是 (通过 Oracle Explorer) |
|
通过 Visual Studio 调试存储过程 |
是 |
否 |
|
支持 Visual Studio Project |
是 |
否 |
|
通过 Visual Studio 自动部署数据库对象 |
是 |
否 |
|
用于编辑存储过程的上下文敏感的在线帮助 |
否 |
是 |
|
BI 技术 与 Visual Studio 集成 |
是 |
否 |
|
SOA 应用程序开发 |
|||
XML 支持 |
|||
数据库中固有的 XML 类型 |
是 |
是 |
|
XQuery 支持 |
是 |
是 |
|
XML 更新功能 |
是 |
否 |
|
用于提高性能的 XML 索引 |
是 |
否 (只有文本和函数索引) |
|
Web 服务 |
|||
数据库用作 Web服务提供者 |
是(内置的 HTTP 端点无需附加的 Web 服务器) |
是(需要另付费的 Oracle 应用服务器) |
|
数据库用作 Web服务使用者 |
是(通过集成 .NET CLR) |
是(但 需要另付费的 Oracle 应用服务器) |
|
集成 Visual Studio |
是 |
否 |
|
主要编程语言 |
任何 CLR 语言 |
Java |
|
异步消息队列 |
|||
产品名 |
SQL Server Service Broker |
Oracle Advanced Queuing |
|
保证一次传送 |
是 |
是 |
|
队列存储在数据库中 |
是 |
是 |
|
与数据库的事务集成 |
是 |
是 |
|
发布-订阅通信模式 |
否(仅点对点) |
是 |
|
抽象层面 |
队列、消息 |
服务、对话、协定 |
|
查询通知 |
|
|
|
通过 ADO.NET 进行查询通知 |
是 |
否 (类似功能需要 Oracle Web 缓存和Oracle Java 对象缓存;它们是 Oracle 应用服务器产品的部件) |
关于作者
Mitch Ruebush 是 ING DIRECT, fsb 的一名 .NET 体系结构设计师,同时也是 MCSD、MCDBA、MCSE、MCT。He 是一名 Microsoft Regional Director 和 Visual C# MVP,一直从事基于各种 Windows 和 UNIX 平台的开发工作,具有 15 年的工作经验。他曾在 Microsoft DevDays、Microsoft Security Summit、Visual Studio .NET 2002 Launch、用户组会议和 MSDN 网络广播上发表演讲。他目前认为 C# 和 .NET 开发是最受欢迎的开发平台,但他也在 Windows 和 Linux/UNIX 上用 C、C++、Java、VB、VB.NET、PL/SQL 和 T/SQL 设计和开发解决方案。他还是 MCAD/MCSD:Visual Basic .NET Windows and Web Applications Study Guide、MCAD/MCSD:Visual Basic .NET XML Web Services and Server Components Study Guide 和 MCSE:Windows Server 2003 Network Security Design Study Guide for Sybex 的合著者。
本文是与 A23 Consulting 合作撰写的。