定期为自定义SQL查询提供“总计”

时间:2011-11-25 10:41:59

标签: c# sql sql-server

我想就如何最好地实现我想要实现的目标提出一些建议。

我想为用户提供一个屏幕,该屏幕将显示一个或多个“图标”(按照说法)并在其旁边显示总数(就像iPhone一样)。不要担心用户界面,问题不在于此,更多的是关于如何处理后端。

让我们说为了论证,我想提供以下内容:

  • 未读记录总数
  • 等待批准的总数
  • 预先批准的总数
  • 已批准的总数
  • 等...

我想,描述上述内容的最简单方法是“MS Outlook”。每当电子邮件到达您的收件箱时,您都可以看到未读电子邮件的数量立即更新。我知道它是本地的,所以它有点不同,但现在想象有相同的原则,但对于上面的查询。

这可能因用户而异,虽然动态存储过程并不理想,但我认为我不能为每个场景编写一个sp,但同样,这不是问题所在。

现在推荐部分:

  1. 我是否应该创建一个每分钟轮询一次数据库的计时器(例如?)并运行所有相关的sql查询,然后向我提供相关信息。

  2. 有没有办法在没有“轮询”机制的情况下实时执行此操作,即每当查询更改时,它会更新总数/计数,然后将查询计数推送到相关客户端(s )?

  3. 我是否应该为每个查询存储某种存储这些“总计”的表,并根据SQL中的触发器立即处理这些更新,然后当用户查询时,它只会读取“总数”而不是而不是试图计算它们?

  4. 触发器的问题是这些必须单独定义,我真的想要尽可能保持通用...再次,我不是100%明白如何处理这个,说实话,所以,让我知道你认为最好的或你将如何去做。

    理想情况下,当创建特定查询时,我想提供选择。 1)一般(任何人都可以使用它)和b)特定的地方,“用户名”将用作查询的一部分,返回的计数只适用于该用户,但这是另一个问题。

    重要的部分是通知部分。虽然民意调查很容易,但我不确定我喜欢它。

    想象一下,如果我有50个查询要执行,我有500个用户(不太可能,但仍然!)用这些图标查看屏幕。 500个用户每分钟轮询一次数据库,并且还会执行50个查询,这可能是每个miuntes 25000个查询...听起来不对。

    如上所述,理想情况下,a)我希望实时更改数据,而不是等待一分钟才能收到新的“计数”通知b)我想减少查询量至少。也许我没有选择权。

    这背后的想法是,他们将为每个查询都有一个小图标,并会显示一个小数字,表明有多少记录适用于相关查询。当他们点击它时,它会为他们带来相关的结果数据而不是实际的数据,然后可以相应地处理它。

    我不知道我是否正确解释了这一点,但如果不清楚,请询问,但希望我有,我将能够得到一些反馈。

    期待您的反馈。

    感谢。

2 个答案:

答案 0 :(得分:1)

我不确定这是否是理想的解决方案,但也许是不错的。

以下是我采取的假设

  1. 考虑到您的前端是一个Web应用程序,即asp.net
  2. 需要定期获取的数据不是hugh
  3. 需要提取的数据不会经常变化
  4. 如果我遇到这种情况,那么我会采用以下方法

    1. 使用SQLCacheDependency类实现SQL缓存。此类将从数据库中获取数据并存储在应用程序的缓存中。只要创建依赖关系的表中的数据发生变化,缓存就会失效,从而获取新数据并再次创建缓存。而你只需要从缓存中获取数据,所有内容(轮询数据库等)都是由asp.net自己完成的。 Here是一个链接,它描述了实现SQL缓存的步骤,并相信我并不难实现。
    2. 使用AJAX更新UI上的计数,以便用户不会感受到PostBack的压力。

答案 1 :(得分:0)

" Improving Performance with SQL Server 2008 Indexed Views"?

怎么样?
  

"这通常对决策中的聚合视图特别有效   支持或数据仓库环境"