2013-10-29 20 views
2

我有一个控制台/桌面应用程序,它可以从各种web服务中抓取很多(百万次呼叫)数据。在任何时候,我都有大约10个线程执行这些调用并将数据聚合到MySql数据库中。所有种子也存储在数据库中。一百万个呼叫过程的报告进度

什么是报告进展的最佳方式?通过进度我的意思是:

  • 多少个电话已经执行
  • 多少次失败
  • 什么是平均通话时间
  • 还剩多少

我想到了记录所有的人不知何故,拖尾日志获取数据。另一个想法是为始终打开的TCP端点提供某种输出,其中某种形式的UI可以读取数据并显示一些聚合。这两种方式看起来太粗糙和太复杂。

还有其他想法吗?

+2

如果您已经在使用数据库,为什么不能有一个跟踪每个工人状态的表? – Amadan

+0

这是一个网站,Web应用程序或桌面应用程序? – Malachi

+0

@Malachi我编辑了这个问题来澄清它。其控制台应用程序。 – tucaz

回答

1

“最佳方式”取决于您的要求。如果使用类似NLog的日志框架,则可以插入各种日志记录目标,如文件,数据库,控制台或TCP端点。

您还可以使用像Harvester这样的查看器作为日志记录目标。

当记录多线程应用程序时,我有时会有一个额外的线程每隔一段时间(例如每15秒)向记录器写入一次进度摘要。

+0

目前,异常和信息日志是通过log4net完成的。 – tucaz

+0

NLog允许根据用户指定的名称,日志记录器的类别等,分别设置日志目标。推测log4net有类似的东西?您可以专门为进度报告定义记录器目标,因此它不会与信息和异常日志混合使用。 –

+0

数据汇总如何?像Harvester这样的东西看起来像我只是将日志发送到远程端点而不是文件/数据库。 – tucaz

1

因为它是一个控制台应用程序,只需使用Writeline,只是让应用程序吐出重要的东西到控制台。

我做了一件在我创建export PDF's from a SQL Server Database back into PDF Format

你可以做很多不同的应用程序的方法类似。如果您计算并记录它们的大小,您可以运行各种各样的理货和有它显示每个这么多的总记录..


我也写了一个文本文件,这样我就可以继续跟踪所有的PDF文件,以及他们遇到的情况编号等等。该信息是我对上述相关问题的回答。

你也可以每隔一段时间用统计数据写出一些文本文件。

记录器Eric J.提及可能会更容易实现,并且会成为您的工具箱的一个很好的工具。

这些选项根据您的特定需求一样有效。

+0

这样做的一个缺点是,如果您需要在“日志”中进一步回顾,而不是在控制台中有缓冲区行。使用日志框架,您可以同时将输出指向控制台和类似日志文件或数据库的内容。只比Console.WriteLine稍微多些,尤其是如果你使用NuGet来添加你对日志框架的引用。 –

+0

我同意。让我补充一点我的答案。 – Malachi