天极Yesky
  • 笔记本电脑
    笔记本
  • 台式电脑
    台式机
  • 手机
    手机
  • 电脑硬件DIY
    DIY硬件
  • CPU
    主板
    音箱
  • 硬盘
    显卡
    键鼠
  • 内存光驱
    显示器
    机箱电源

  • 数码相机DC
    数码相机
  • MP3播放器
    MP3/MP4
  • 数码摄像机DV
    摄像机
  • 电脑外设
    外设
  • 网络
    网络
  • 服务器
    服务器
  • 数字家庭
    数字家庭
  • 群乐
    群乐
  • 产品报价 行情 商家 新闻 评测 | 软件 设计 网页 开发 安全 论坛 E时代 游戏 图片 壁纸 下载 网摘 博客 索尼专区 Vista 科技奥运
    天极网
    SQL Server“Yukon”Beta1CLR的基本架构
    作者:
    出处: CSDN blog
    责任编辑: 武扬
    [ 2005-02-22 11:33 ]


    Yukon CLR基本架构

    概述

      随着SQL Server “Yukon” Beta1(也许也有人说:SQL Server2005)的推出,人们发现微软在Yukon中集成了非常多的新功能,其中最引人瞩目的是在数据库引擎中集成了对Windows .NET Framework Common Language Runtime (CLR 公用语言运行环境)的支持。在20007月的专业开发者大会(PDC)上,微软第一次向世界展示了这个新特征。

      作为SQL Server 2000的开发人员,编写数据库的应用程序往往只局限于T-SQL,而宿主了CLRYukon,引入了许多强大的新特征,我们可以用Visual Basic.NET, C# 等面向对象的语言完成以前T-SQL难于完成的任务。比如,以前我们如果要调用一些系统函数(WIN32APICOM组件),我们必须写扩展存储过程,通过ODS(Open Data Services)开放式数据服务层和数据库引擎交互,而现在我们通过CLR提供的托管对象可以非常方便的调用Windows .NET Framework Class Library (FCL).NET框架类库。这些托管对象包括:

    · 托管存储过程

    · 托管函数

    · 托管触发器

    · 自定义复杂数据库类型

    · 自定义复杂类型索引

    · 自定义集合函数

    首先,我们要了解数据库引擎集成CLR的优势和CLR可以提供的一些关键特征。

    CLR是一个托管的运行环境,所谓“托管”的意思是许多任务过去需要程序员负责的(比如内存管理)现在可以委托CLR来处理。作为托管代码的一部分,CLR控制代码执行过程中的每一个部分,同时CLR是基于类型安全(CLR扮演了代码验证的角色)和安全许可的环境――彻底地编译为本地代码(Native Code)。CLR可以“辨识”出运行的代码是否企图直接处理内存或调用非.NET的代码。

    .NET的可执行代码在CLR中被装载为程序集(assemblies)的形式。程序集中包括中间语言代码(IL指令),描述代码的元数据(Metadata)和其它资源(比如:引用其它文件列表),源代码并不是直接保存在程序集中,而是编译为一种CLR可以读懂的中间语言(IL,在程序执行之前CLR通过即时编译(JIT)将代码转换为本地代码(通常是X86代码)。如果代码在本地运行,这个本地代码会被加载到一段拥有生命周期的缓存,这就是说.NET的代码是非解释型的――它在运行时最终会被编译成本地代码。

    CLR拥有自己管理内存的方式:如果一个对象或一组对象没有被其它运行的代码引用,从理论上说要回收所有不在使用的内存,但是对于CLR,内存只是在运行资源不足时才会被回收,CLR在需要额外的内存资源时才调用垃圾收集器,这种内存管理机制使程序员不用担心内存泄漏。

    所有的代码都运行在自己的应用程序域(Application Domain)。在CLR环境中,应用程序域的作用是在单个进程中宿主不同的应用程序域,用来隔离不同的执行代码 ―― 换句话说,在一个应用程序域中的运行失常的代码不会影响其它应用程序域中运行的代码。 每个进程中都存在至少一个拥有CLR的应用程序域, 当然, 也可以有多个――这是由寄宿进程和运行的托管代码决定的。当一个程序集被CLR加载时,是指被加载(即时编译(JIT))到一个指定的应用程序域中,同时这个程序集也可以被加载到同一个进程中不同的应用程序域中。也可以加载一个中立的程序集――在这种情况下,一个程序集的单独备份可以为一个进程中所有的用户提供服务。

    寄宿

      宿主CLRYukon数据库引擎有一些特殊需求。数据库引擎对于资源管理是非常谨慎的――比如:通过直观推断数据库使用的资源变化,在不同的缓存之间移动内存。因此,应该在数据库引擎和CLR的资源管理方式保持某种默契关系。

      在CLR1.01.1的版本中, CLR提供一个API来加强进程的控制――比如判断CLR线程池的大小。当然,这个API并非强大到可以替代CLRYukon中的作用, 比如:考虑以下几种情况:

      内存管理

      Yukon 数据库引擎完全控制已经被分配的内存空间,在不同的缓存之间切换,比如:存储过程缓存和数据缓存。在这种情况下,Yukon 数据库引擎需要有更加灵活的方法来运行CLR的垃圾收集器,同时对CLR垃圾收集器发生的条件,分配或释放多少内存产生影响。

      线程管理

      CLR通过线程技术完成异步任务和多元化的并发操作。CLR拥有自己的托管线程池,用来计划执行线程池中的任务。然而, SQL Server使用更精致的纤程机制(mechanism of fibres)来应对可能的巨量并发请求,因此,SQL Server需要接管CLR的线程管理。

      并且,由于存在CLR的运行机制和SQL Server的需要之间的微妙关系,我们意识到这需要对CLR的寄宿接口进行扩展。因此随着Whidbey(是微软Visual Studio .NET 的下一代版本)的发布.NET会提供更多和更强大的寄宿APIYukon发布的.NET版本和Yukon支持的.NET版本将保持一致)

     

    共2页。 1 2 :
    笔名:
    请您注意:

     遵守国家有关法律、法规,尊重网上道德,承担一切因您的行为而直接或间接引起的法律责任。

     天极网拥有管理笔名和留言的一切权利。
    相关内容