【问题标题】:SqlCacheDependency via Service Broker Notification in a WebEdition of SqlServer 2008 R2SqlServer 2008 R2 Web 版中通过 Service Broker 通知的 SqlCacheDependency
【发布时间】:2013-02-13 13:09:43
【问题描述】:

非常感谢您的帮助:

我们打算购买SQL Server 2008 R2 Web版(一定要这个版本), 但是,我们还希望将 Service Broker 的功能用于 SqlCacheDependency - Notification ModeNOT 轮询模式)。

http://msdn.microsoft.com/en-us/library/cc645993%28v=sql.105%29.aspx 据说 Web 版对 Service Broker(消息传递)的支持是:“仅限客户端” - 所以某种短版本。

我们的服务器环境是:

  • 一个 Http 服务器和两个 Web 应用程序
  • 具有单个 SQL Server 2008 R2 Web 版实例的数据库服务器。

这个想法是:当新记录添加到数据库表时,sql server 应该通知两个 web 应用程序并重置它们的缓存(所以我们将有两个完整的缓存)。 我们不打算创建分布式缓存(MemCache 或 sth)

有没有办法结合这两个需求(SqlCacheDependency via Service Broker Notification in a WebEdition of SqlServer 2008 R2)? 购买一个模块,或者一些服务器架构技巧。有什么想法吗?

提前致谢。

【问题讨论】:

    标签: sql-server-2008 sql-server-2008-r2 service-broker sqlcachedependency


    【解决方案1】:

    “仅限客户”有点用词不当。这意味着交换服务的两个 Service Broker 服务必须通过至少一个更高版本的版本来路由消息。 Express Edition 无法与另一个 Express Edition 交换消息,除非标准(或更高)版本服务器在它们之间路由消息。

    虽然这是教育性的,但由于查询通知 (the feature behind the SqlCaheDependency modus operandi) 与您完全无关,不必将消息远程发送到另一个 SQL Server 实例。都是本地的,所以“仅限客户端”的限制永远不会适用。为了 100% 准确,我应该补充一点,SqlCacheDependency 使用查询通知的方式从不需要远程消息传递,但这很麻烦。

    我建议您阅读链接的文章,您的帖子对这项技术的工作原理有很多误解。

    【讨论】:

    • 是的,正如您所说 - 短语“仅限客户端”具有误导性。感谢您详尽的回答。根据您的信息,WebEdition 不会限制 SqlCacheDependency 中 Service Broker 通知的功能。我很高兴听到这个消息:)
    • 你应该仔细测试SqlCacheDependency。通过查询通知使缓存失效是一项代价高昂的操作,它涉及到数据库中的几次写入。它适用于很少更改的相对静态的数据,但如果数据更改频繁,则可能会出现问题。
    • 我看到你在很多关于 Service Broker 通知的主题中写了答案,并且对它有很大的了解。我想再问一些问题。 1) 是否可以在 SELECT 上定义通知,但是以这种方式:仅当 select 中写入的列发生更改时,Broker 才会重置缓存。所以列特定的方法。如果表中一些不重要的列被更改,我不希望缓存重置。我将有一个带有 INNER JOIN 的 SELECT。从我的搜索来看,不幸的是这是不可能的。
    • 2) 如果我的 Select 看起来如此 - 我的意思是 SET 选项:“SET ANSI_NULLS ON; SET ANSI_PADDING ON; SET ANSI_WARNINGS ON; SET CONCAT_NULL_YIELDS_NULL ON; SET QUOTED_IDENTIFIER ON; SET NUMERIC_ROUNDABORT OFF; SET ARITHABORT ON ; SELECT dbo.table1.id AS id_table1, dbo.table1.col_table1, dbo.table2.id AS id_table2, dbo.table2.col_table2, dbo.table2.table1_id FROM dbo.table1 INNER JOIN dbo.table2 ON dbo.table1.id = dbo.table2.table1_id; "
    • 请单独提问。这样,stackoverflow 谷歌 SEO 就很神奇,他们得到了他们的排名,我们得到了我们的选票;)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多