C# 从多个工作站收集数据

C# 从多个工作站收集数据,c#,data-collection,C#,Data Collection,我目前正在开发一个windows服务,该服务将部署到公司内的所有工作站。该服务的目的是收集各种统计数据,并将其记录在中心位置 对于第一次迭代,每次有数据要记录时,服务都直接调用SQL来记录数据。在大约120台工作站上测试它告诉我,这不是一个好主意,不会扩展 有人能推荐一种替代策略来收集有问题的数据,而不会使数据库服务器过载吗?这将部署到大约2000台机器上 我和C#一起工作 谢谢。从您的问题来看,您似乎已经有了一个有效的解决方案,您只需要就如何使其可扩展提供建议。这是我的两分钱: 不要在工作站

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

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

有人能推荐一种替代策略来收集有问题的数据,而不会使数据库服务器过载吗?这将部署到大约2000台机器上

我和C#一起工作


谢谢。

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

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

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

只是回答这个问题。下面是我最终实现它的方式

数据收集

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

  • “导入程序”按计划运行。它遍历自上次运行以来创建的所有文本文件,解析它们并将它们导入SQL
我以这种方式实施它的原因是:

  • 避免我在原始问题中提到的SQL server资源问题
  • 创建的文件非常小,1-2KB
  • 进口商在过去运行了几分钟,以避免与任何正在进行的副本发生冲突
  • 导入器删除已处理的文件,并跳过不在其“lastscantime”和“currentTime Xminute”窗口内的文件

我最终分两个阶段实施它。请参阅下面我的答案中的详细信息。至于商业产品,我找不到任何能满足我被要求满足的特殊需求的产品。谢谢你。