0

我目前正在开发一个 Windows 服务,该服务将部署到公司内的所有工作站。该服务的目的是收集各种统计数据并将其记录在一个中心位置。

对于第一次迭代,每次有数据要记录时,服务都会直接调用 SQL 来记录。在大约 120 个工作站上对其进行测试告诉我,这不是一个好主意并且不会扩展。

有人可以推荐一种替代策略来收集不会使数据库服务器超载的相关数据吗?这将部署到大约 2000 台机器上。

我正在使用 C#。

谢谢。

4

2 回答 2

1

从您的问题来看,您似乎已经有了一个可行的解决方案,您只需要有关如何使其扩展的建议。这是我的两分钱:

  • 不要在工作站的服务中保持 SQL 连接打开
  • 尝试在内存中批量更新数据,并且仅在收集到一定数量的数据或经过一定的时间间隔后才更新数据库(使您的连接不那么冗长,更笨重)。
  • 确保您的数据库已正确规范化以避免重复数据

就个人而言,对于需要扩展到 2000 个工作站的关键任务,我会使用商业产品,不会重新发明轮子。

于 2009-05-27T17:02:09.223 回答
0

只是回答结束问题。这是我最终实现它的方式。

数据采集

  • AC# 服务在工作站上运行。在不同的时间间隔(不是预先确定的,基于系统上的某些事件)它会触发数据收集。
  • 数据被写入本地工作站上的文件。
  • 然后将数据文件复制到网络位置。

数据解析

  • “进口商”程序按计划运行。它遍历自上次运行以来创建的所有文本文件,解析它们并将它们导入 SQL。

我以这种方式实现它的原因是:

  • 避免我在原始问题中提到的 SQL 服务器的资源问题。
  • 创建的文件非常小,1-2KB
  • Importer 会在过去几分钟内运行,以避免与正在进行的任何副本发生冲突。
  • Importer 删除已处理的文件并跳过不在其“lastscantime”和“currentTime-Xminute”窗口内的文件。
于 2009-10-06T20:07:15.557 回答