【问题标题】:Select query frequency for a almost real time software为几乎实时的软件选择查询频率
【发布时间】:2026-01-30 00:20:02
【问题描述】:

我正在构建类似ERP 的软件,但仅用于制造和性能分析部分。我们是一家 100 人的公司,最快的制造订单大约需要 10 分钟到 2 小时。

有 8 个工作站供多名工人使用,另外大约 10 个供工程人员使用(图表和报告)。

我们以分钟为单位将处理一件作品所花费的时间存储在数据库中。

我不确定我在使用数据库时是否使用了最佳实践。

  • 目前,我选择每 5 秒获取一次时间更新,每 5 秒更新一次我使用 SQL Server 中的代理作业打开的所有时间。这项任务并不重要,因为我们使用的是分钟而不是秒。

  • 有一个工作可用部分,这个部分很重要,如果一个工作被占用,它需要消失。我希望它几乎是实时的,如果有人接受了一份工作,它就会从另一个工作站消失。据我了解,我需要进行选择查询并检查一块是否消失。我可以在不超载 Sql 服务器的情况下每 500 毫秒设置一次检查吗?如果有将近 20 个,则意味着每秒选择 40 个。

有没有更好的方法来完成这些任务?

【问题讨论】:

  • 您可以实现工作站之间的通信,以通知何时需要再次重新查询数据。

标签: c# sql database winforms


【解决方案1】:

如果使用 SqlServer,SqlDependency Class 将大大有助于解决您的问题。此外,我会存储开始和结束时间,花费的分钟数可以是一个计算值,以节省一直查询数据库的时间。

【讨论】:

    【解决方案2】:
    • 在你的第一点。您可以保留上次使用的 DateTime,因此您可以只查询一次,然后实时更新客户端所花费的时间(通过简单的当前时间减法),而不是每 5 秒查询一次。

    • 在你的第二点。每 500 毫秒查询一次 SQL 服务器不是可行的方法。您应该在工作站和 sql 服务器(例如 web 服务)之间实现一些通信层,并将一些数据缓存在那里,然后您可以在不查询数据库的情况下对 web 服务进行查询。当然,您需要在删除任何数据时通知该服务。

    希望对你有帮助

    【讨论】:

      【解决方案3】:

      您需要一个服务器组件。一个大师。 一个应用程序来统治他们所有

      让单个服务器应用程序成为了解数据库、连接到数据库并处理记录更改的应用程序。

      在每个工作站上,您都会有一个客户端应用程序。使用WCF 来促进服务器与其客户端之间的通信。服务器应该公开允许客户端进行记录更改、从数据库请求数据、请求缓存状态等的方法。

      拥有一个服务器层还为您提供了一个集中点,可以在该点上缓存客户端即时所需的信息。

      至于删除一个项目,例如:客户端 A 请求服务器从列表中删除 Job #1(我猜是从数据库中删除)。然后服务器进行必要的数据库更改并立即通知其客户端更改。或者,如果您更喜欢单向通信,服务器也可以简单地维护更改数据,每个客户端都可以定期轮询以找出更改的内容。

      【讨论】: