展望微软下一代数据库系统_C2C
微软的下一代数据库系统(代号yukon)已经浮出水面。这一版本的数据库系统有不少的新特色。比如它使用的transact-sql将更加符合ansi-99 sql的标准,查询语句将更灵活,更富表达性。yukon允许程序员用.net的语言,比如c#,vb.net来开发自定义函数(user-defined functions),存储过程(stored procedures)和触发(triggers)。另外它还支持w3的xquery语言,支持xml等等。
在yukon的酝酿和设计过程中,设计师对下一代数据库系统的编程能力下了很多气力。微软内部的开发人员认为,下一代的数据库系统一定要包括更多的对称编程模式,对各种数据类型的查询应该更灵活。所谓的对称编程模式是指对于常见的数据库操作,用户应该可以使用xml,.net或是传统的t-sql程序
在这种设计思想的指导下,yukon在许多方面有了大的拓展。首先,.net的公用语言执行环境(clr)被融合到了新的系统里;第二,融合进来的.net提供了很多强有力的数据库对象;第三,xml在这版的数据库里得到了更好和更深的支持;第四,数据库的服务器端提供了对xml查询(xquery)以及xml规范定义语言xsd的支持;第五,传统意义上的t-sql也得到了进一步的增强
新的编程模式和新增的语言一道使得数据库应用的开发有了更丰富的选择。新的体系结构使得我们更容易构造可靠的,可扩展的,稳定的应用,并且开发的效率也得到了极大的提高。yukon中还引入了全新的服务代理(service broker),一种分布式的一部消息传递机制,现在让我们先看看编程语言方面的增强。
目录
transact-sql 语言的增强
在sql服务器中使用.net来编程
充分开发clr的潜能
在t-sql和管理程序之间的取舍
用户定义的类,函数和集合
管理的存储过程
transact-sql 语言的增强
yukon对微软的t-sql有了很多的增强。用户可以在yukon的online帮助中得到详细的,限于便服,在此不一一列了。新增的特色表明了微软对ansi-99 sql标准的进一步支持,同时也反映了对广大用户反馈意见的相应。新的增强主要是为了使查询更富有表达性。有几种新增的查询可以很好的覆盖用户常用的一些查询类型。比如说,递归查询可以返回有层次机构的结果集合(hierarchical resultset)或是a bill of materials。
yukon提供了新的pivot和unpivot操作。这些操作的输入是表格类的表达式(table-valued expression),其输出结果同样是表格类型。pivot操作是将行转变为列,并进行集合以及其他的操作。在输入的表格中它将以一个给定的列为轴进行旋转,其成生的表格的列是有不同值的原旋转列。这种操作使得生成的表格变宽(设想一个5列100行的输入表格,其结果可能是100列5行的表格)。unpivot是pivot的逆操作。它将输入表格的列转换为行。其结果是使输入表格变窄。
yukon的异常捕捉和处理机制也有了很大的变化。它使用了和.net一致的try/catch结构。导致交易终止的错误将会被捕捉并且处理。另外为了配合.net的框架提供的安全,复制,提示服务以及xml等等功能(security, replication, notification services, xml),yukon引入了不少新的语言构造。.net在服务器端的技术也极大了影响了sql数据库的研制和发展。
在sql服务器中使用.net来编程
程序员可以在yukon中使用和.net兼容的高级程序语言进行开发,利用vb.net,c#这一类的语言编写自定义函数(user-defined functions),存储过程(stored procedures)和触发(triggers)。另外,利用管理程序(managed code)还可以开发自定义函数(udts),集合(aggregates),函数(functions)。公用语言执行环境(clr)是.net的核心,它是一切基于.net开发的程序的运行平台。它提供了诸多的服务,比如实时编译(just-in-time compilation),内存管理和分配(memory management and allocation),类型安全强制(type safety enforcement),异常处理(exception handling),线程管理(thread management)以及安全检查(security)等等(clr对于.net程序就好比java的虚拟机对于java程序一样)。在yukon中,.net程序将和在clr中完全相同的方式运行。
将clr整合到yukon中的好处是显而易见的。yukon获得了clr的各种有益的功能,如自动的内存管理,资源分配,垃圾回收等等。yukon提供了一套.net assemblies,这样允许程序员直接操作数据库对象。数据的操作是通过一套特殊的ado.net来实现的。这些新的方法和原来的ado.net非常相似,程序员应该感到非常的熟悉和亲切。细一点说,我们可以把yukno集成了clr的好处归结为以下几点:
1.丰富了编程模式。clr兼容的高级程序语言比t-sql要丰富的多,也强大的多。它们提供的功能和特色是以往sql程序员不敢想象的。此外,yukon还提供了一系列的类库(framework apis),这些类库的功能比以前sql内置的功能强大的多
2.增强了安全性。管理程序运行于数据苦支持的clr环境当中。这使得数据库的对象比以往的扩展存储过程(extended stored procedures)更安全
3.用户自定义的类型和集合。通过对clr的集成,这两个新增的对象扩展了sql数据库的查询和存储能力
4.为今后的visual studio®开发环境指明了方向。今后程序员可以向开发其他.net程序那样用vb.net或是c#这类的高级语言进行数据库的开发,调试工作。
5.性能的增强。在一些情况下,.net语言的编译和执行可以提供比t-sql更好的性能。
充分开发clr的潜能
在以前的sql数据库应用的开发中,服务器端的程序被限制于t-sql。而在新的yukon中,由于集成了clr,使得开发工作变得前所未有的容易和方便。像vb.net和c#这类的高级语言,全面支持数组(array),结构化的异常处理(structured exception handling)以及各种集合操作(collections)。这些功能使得程序员可以编写更复杂的逻辑和计算工作。
更突出的一点就是visual basic .net and c# 是面向对象的语言,它们自身所具有的数据封装(encapsulation),继承(inheritance)和多态性(polymorphism)是t-sql所不能比拟的。在大型系统的开发中,这种基于模块化开发机制的优越性会更加明显。它可以更好的组织你的源程序,增加代码的重用性。将源程序按照逻辑关系编译成不同的assemblies和n字域(namespaces)可以增强程序的组织性,让程序员更方便的浏览和使用已有的程序。
yukon实现了三个层次的assemblies安全的管理控制。这种安全机制是对以往基于用户验证和授权机制和新的clr安全机制的有机合成。新的三级管理层次为:
最高层次: 安全接触(safe)。它只允许接触和计算数据
次高层次: 外部接触(external_access)。它允许接触外部的系统资源
最低层次: 不安全接触(unsafe)。只要不对系统的稳定性造成影响,就不加限制。
在t-sql和管理程序(managed code)之间的取舍
管理程序非常适于进行数字密集型的计算和复杂的逻辑处理。.net对于字符串 (string),规则表达式(regular expressions),错误捕捉等等有着更好的支持。另外.net提供的上千个类(class) 和方法可以在自定义函数(user-defined functions),存储过程(stored procedures)和触发(triggers)中很方便的使用。所以对于有大量字符创操作,计算,日期运算,系统资源存取,高级加密运算,文件操作,图像处理或是xml的情形,管理的存储过程,函数,触发,集合要比传统意义上的t-sql等强大和简洁。
使用管理的程序的另外一个好处就是类型安全。在管理的程序执行之前,clr要对其进行检查以保证它的安全运行。比如说,对于一个内存读写的操作,clr要先进行检查以保证在读取的时候没有写操作在进行。
在准备编写存储过程,触发,或是udfs之前,你要权衡各种情况,在传统的t-sql和管理程序(managed code)之间做出选择。选择的标准是你当前问题的具体特点。如果你的主要操作是数据存取以及相对简单的逻辑运算,那么t-sql则非常合适。对于有大量数值计算以及复杂逻辑运算的情况,管理程序(managed code)则更适用。
程序放置在什么地方也是很关键的一步。t-sql和管理程序(managed code)都是在数据库的引擎内运行。把.net和数据库紧密放置在一起可以有效的发挥服务器的硬件运算能力。当然最好是用sql数据库的profile程序来测量一下你的具体程序的运行性能,然后再做出决定。yukon的profile程序有了进一步的增强。可以更深层次的测量sql数据库内的clr的性能,并且会以更直观的图形方式来输出对比测试结果。下面就让我们来具体看看yukon中新增的一些功能。
用户定义的类,函数和集合(user-defined types, functions, and aggregates)
yukno支持扩展的clr的类系统。这些扩展的类可以在服务器端定义表(table),也可以在客户端进行数据操作。用户自定义类型(utds)允许用户扩展已有的类。这些扩展的具体实现是用的管理程序(managed code)。比如说,你可以定义一些用于空间的类型,一些特殊的金融类型或是特别的时间日期类型以适应你独特的要求。
用.net的术语来说,utds是结构(struct)或是参考类型(reference type),而不是类(class)或枚举(enum)。这意味着内存的是用是由clr控制优化的。不过,utds不支持继承和多态性(inheritance and polymorphism)。它可以有公用或是私有函数(public and private functions)。事实上,诸如限制检查(constraint checking)应该由私有函数来完成。举例来说吧,如果你想定义一个空间的类型,这可能包含经度,纬度也许还有高度,你可以定义相应的私有成员来完成这一任务。这类型创建完成后,你可以把他注册到sql数据库中。这个被编译的dll就会被存放在sql数据库中。
用户自定义函数(udfs)有两种类型:一种是标量值型的(scalar-valued),这种函数返回单一的值,如字符串,整数,比特等等。另外一种是表格值型的(table-valued)。这种函数返回有一个或多个列组成的数据集合。
yukon允许用户定义新的集合(aggregate)操作的能力远远超过了以前的版本。用户用管理语言开发的集合可以被t-sql或是其他的管理语言调用。这些新开发的集合是.net的类,它可以引用数据库中存在的其他编译好的类库(class library)。你可以使用用户定义的集合将数据库中的数据转化为数值型变量。比如你最近的一次用户调查的数据存放到数据库中,通过一个用户定义的统计函数你可以得到加权平均或是标准偏差。
管理的存储过程
这是一种管理程序,其工作方式就像传统的存储过程一样。如果你希望返回一个简单的数据集和(resultset)或是只是进行一个数据操作(使用dml或是ddl)。一旦被注册到数据库中,那么使用它就像是用一个普通的存储过程那样。将一段管理程序包装成存储过程的语法如下(基于现在早期的yukon版本)