剖析SQL Server 2005查询通知之基础篇

哎喲吼

哎喲吼

2016-01-29 16:04

剖析SQL Server 2005查询通知之基础篇,剖析SQL Server 2005查询通知之基础篇
摘要 在本系列文章中,我们将深入探讨如何把.NET 2.0和SQL Server 2005的查询通知特征联合起来,以便通知应用程序何时关键数据发生变化进而达到消除反复查询数据库的目的。

  一. 引言

  数据库应用程序的典型问题之一是更新陈旧的数据。

  设想有一个典型的显示产品及其分类的电子商务网站。一个供应商的产品列表很可能并不经常发生变化,而其分类列表甚至更不会频繁更改。然而,在用户每次浏览该网站时,必须从数据库中反复查询这些列表。这显然是一种典型的低效资源利用,开发者和架构师都在绞尽脑汁想办法以减少这种浪费。

  缓冲技术正是“最小化”对这种几乎“停滞”的数据进行重复查询的技术之一。这种数据可以被进行一次性查询并存储在一个缓冲区中,而且应用程序可以从缓存中重复地存取数据。偶尔情况下,才更新缓存以得到新数据。但是,围绕更新缓存的时间调度方面出现了几个问题。该多长时间操作一次呢?例如,你每隔多长时间希望你的产品分类改变一次?每隔几个月一次?每隔两个月刷新一次该缓冲区如何?你知道会发生什么吗?就在你刷新缓存之后,分类被更新,而且在下一次刷新前在两个月的时间里它将保持陈旧。

  查询通知,是微软的ADO.NET和SQL Server小组协作开发的新成果。简言之,查询通知允许你缓冲数据并且仅在SQL Server中的数据发生变化时才发出通知。一旦接到通知,你就可以刷新你的缓冲区或者采取你需要的任何措施。

  在SQL Server 2005中引入的一种新特征“Service Broker”使得查询通知成为可能。Service Broker把队列机制引入到数据库管理中,它使用一组队列与服务进行通讯,而服务反过来也知道如何往回通讯以调用相应的实体。其实,这些队列和服务都是一些与表、视图和存储过程一样的类对象。尽管完全可以在SQL Server内使用Service Broker,但是ADO.NET知道如何与Service Broker进行通讯以触发这种机制并且从Service Broker中检索回通知。

  注意 当SQL Server中的数据发生改变时,查询通知允许你缓冲数据并且通知你。

  在.NET一端,存在很多种“钩入”这种功能的方式。ADO.NET 2.0提供了System.Data.SqlClient.SqlDependency和System.Data.Sql.SqlNotificationRequest类。SqlDependency是SqlNotificationRequest的一种高级实现,并且是当使用ADO.NET 2.0时你最有可能使用的类。ASP.NET 2.0也通过System.Web.Caching.SqlCache-Dependency类(它提供了一个针对SqlDependency的包装器)与Service Broker进行通讯,而且这是直接通过在一个ASP.NET页面中使用<%OutputCache指令以声明方式提供的功能实现的。这允许ASP.NET开发者容易地实现使依赖于SQL Server中的数据中的缓存无效。

  二. .NET与Service Broker的通讯

  上面这些技术是如何联合到一起来解决“缓冲之谜”的呢?尽管你可以采取很多的措施以允许SQL Server把服务提供给.NET;但是,关键还在于,发送到SQL Server的查询具有一个依附到它们的标志以便告诉SQL Server,除了返回结果集外,SQL Server还应该把该查询(及其请求者)注册到Service Broker。为此,你要创建一个感知该查询的队列和一个依附到该队列的服务,并且知道如何返回到客户端。如果该结果集中的任何一行在数据库中得到更新,那么在相关队列中的项将触发,并且反过来,把一条消息发送到它的服务,然后把一个通知发送回初始化该请求的应用程序。

  图1是SQL Server Management Studio的一个快照,它显示了在数据库的Service Broker部分中的队列(Queues)和服务(Services)。


图1.该图显示了.NET的查询通知所使用的Pubs数据库中的缺省队列和服务。
展开更多 50%)
分享

猜你喜欢

剖析SQL Server 2005查询通知之基础篇

SQLServer
剖析SQL Server 2005查询通知之基础篇

SQL Server2005的XML数据类型之基础篇

SQLServer
SQL Server2005的XML数据类型之基础篇

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

SQL Server 2005 CE基础概要

编程语言 网络编程
SQL Server 2005 CE基础概要

使用SQL Server 2005 FOR XML嵌套查询

编程语言 网络编程
使用SQL Server 2005 FOR XML嵌套查询

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

SQL Server 2005之Integration Service

编程语言 网络编程
SQL Server 2005之Integration Service

剖析SQL Server 2005中的报告服务架构

SQLServer
剖析SQL Server 2005中的报告服务架构

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

教你安装SQL Server 2005示例数据库

教你安装SQL Server 2005示例数据库

原来还可以这样用!WinZip的5个应用小技巧

原来还可以这样用!WinZip的5个应用小技巧
下拉加载更多内容 ↓