c# - 定期为自定义 SQL 查询提供 "Totals"

标签 c# sql sql-server

我想要一些关于如何最好地实现我想要实现的目标的建议。

我想为用户提供一个屏幕,该屏幕将显示一个或多个“图标”(按说)并在其旁边显示总数(有点像 iPhone)。不用担心 UI,问题不在于此,而在于如何处理后端。

为了便于讨论,我想提供以下内容:

  • 未读记录总数
  • 等待审批总数
  • 预批总数
  • 批准总数
  • 等...

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

这可能因用户而异,虽然动态存储过程并不理想,但我不认为我可以为每种情况编写一个 sp,但同样,这不是这里的问题。

现在是推荐部分:

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

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

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

触发器的问题是它们必须单独定义,我真的试图尽可能保持通用......同样,老实说,我不是 100% 清楚如何处理这个,所以让我知道您认为什么是最好的,或者您将如何去做。

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

真正重要的部分是通知部分。虽然投票很容易,但我不确定自己是否喜欢它。

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

如前所述,理想情况下,a) 我希望实时更改数据,而不必等待一分钟才能收到新“计数”的通知,并且 b) 我想减少查询量到最低限度。也许我别无选择。

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

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

期待您的反馈。

谢谢。

最佳答案

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

以下是我的假设

  1. 考虑到您的前端是一个网络应用程序,即 asp.net
  2. 需要定期抓取的数据不是很大
  3. 需要抓取的数据变化不是很频繁

如果我遇到这种情况,我会采用以下方法

  1. 使用 SQLCacheDependency 类实现了 SQL 缓存。此类将从数据库中获取数据并存储在应用程序的缓存中。只要创建依赖项的表中的数据发生更改,缓存就会失效,从而获取新数据并再次创建缓存。你只需要从缓存中获取数据,其余的一切(轮询数据库等)都由 asp.net 本身完成。 Here是描述实现 SQL 缓存的步骤的链接,相信我,实现起来并不难。
  2. 使用 AJAX 更新 UI 上的计数,这样用户就不会感到 PostBack 的压力。

关于c# - 定期为自定义 SQL 查询提供 "Totals",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8267868/

相关文章:

c# - 为什么我的基于 Blink 的浏览器会玩捉迷藏?

c# - 越来越奇怪 BadImageFormatException : Cannot load a reference assembly for execution

c# - 有 1 个 pKey 和 2 个属性的组合键可以吗

sql - 如何从今天日期获得下个月日期(即)从今天日期开始正好一个月

c# - 数组排序和SQL排序

sql-server - 将数据从表导入excel文件错误

sql-server - .NET Framework 执行已中止。另一个查询导致 AppDomain db.dbo[runtime].4 被卸载

C# 静态构造函数排序

c# - 复杂搜索条件的好模式?

mysql - 分组显示 0