我的任務是優化線性數據處理例程的性能。以下是已有內容的概述:實時批處理數據處理
數據進入UDP端口,我們有多個偵聽器在不同的端口上偵聽,並將原始數據寫入SQL Server數據庫(讓我們稱之爲RawData)。然後,我們有一個單線程線性應用程序的多個實例,它從RawData表中抓取原始數據並處理單個數據行。處理的意思是將原始數據與給定實體的先前接收的數據進行比較,計算完成以計算不同讀數的數量,然後針對每個單獨的數據行調用幾個Web服務,最後爲每個數據添加新記錄在ProcessedData表中的行。另外對應的實體記錄在其他表中更新。
我看到問題的方式,它可以分解成更小的部分,我可以利用生產者/消費者模式進行數據處理: 生產者的一個線程填充共享(阻塞)隊列,多個消費者從中獲取數據行隊列並對它們進行並行處理。消費者完成後,他們將處理後的數據放到另一個共享隊列中,然後再由另一個消費者線程(單個)訪問,這個線程將執行SqlBulkCopy來插入新記錄。沿着這個過程,將會有其他共享隊列存儲更新的實體信息,而另一個消費者將獲取實體的更新信息並執行更新。
問題是,即使它看起來很簡單,但它在我看來是一個麻煩的方法。我確實有一種更好的方式來做我想找的事情。有關實施上述生產者/消費者模式的任何建議?或者我應該爲我的問題尋找不同的設計模式?
在此先感謝
當你說「共享查詢」,你的意思是「共享隊列」? – 2011-04-11 19:47:36
是的,我的不好。感謝您的注意。更正 – Dimitri 2011-04-11 19:53:21