2013-02-19 114 views
0

我想解析來自網絡中不同用戶計算機的日誌文件。在任何一天,要讀取的機器數量可以在10K到40K之間。同樣在解析日誌文件之後,我想將每個解析(行或2)的結果存儲在公共位置(數據庫表或平面文件)中。他們自己的日誌文件並不是那麼大。
多線程讀取文件

什麼是最優雅和高效的方式去做到這一點?

編寫控制檯應用程序,使用線程池並分配任務?或者是否有更復雜的解決方案/類在C#中可用?
或者
我不熟悉編寫Windows服務,但有可能寫一個服務
其部署到多臺機器?

任何其他方法?

+0

由於瓶頸幾乎肯定會成爲硬盤,無法同時處理多個請求,因此多線程讀取文件不太可能有所幫助,甚至可能會受到影響。如果您對文件中的數據執行了大量CPU綁定處理,多線程只會有所幫助。 – Servy 2013-02-19 19:12:20

+0

我將閱讀的文件位於不同用戶的不同機器的不同硬盤驅動器中。 – 2013-02-19 19:17:04

回答

0

什麼是最有效的方法呢?

這就是辯論 - 我敢說部分原因的帖子。就我個人而言,我會在機器上逐個讀取日誌,並將這些操作的結果存儲在SQL Server後端。但是,這是重型的生產環境方法,可能不適用,具體取決於您想要投入多少努力。

理想情況下,這將寫爲專用的Windows服務,並且這些已成爲構建/調試在更新版本的Visual Studio中更容易。另一種可行的方法是創建一個控制檯應用程序,您可以輕鬆運行並查看其輸出。部署時,您可以使用所有NSSM工具來允許控制檯應用程序作爲Windows服務運行。這可能是最痛苦的,但稍微笨重的方法 - 其他海報可能有一個整潔的解決方案。

讓一個應用程序或程序在單個服務器上運行將是最簡單的方法,但這可以證明服務器可以訪問日誌文件所在的每臺計算機上的相關共享。

如果您想在每臺有問題的計算機上部署服務並讓它在本地運行(繞過整個多線程方法,因爲您有一個線程按照定義的計劃檢查一組日誌文件),然後使用SQL服務器後端是更簡單的方法,因爲它更容易配置SQL Server帳戶並允許遠程連接到它,而不是通過一組機器配置文件夾共享(因爲我不是域管理員)。這樣做的缺點是,如果您需要更新應用程序,那麼在每臺計算機上更新都是一件痛苦的事情。

歸結爲哪種方法最適合您的情況?單個部署需要機器共享還是使用單個SQL Server(或其他數據存儲)實例進行多部署?