2011-03-03 17 views
2

我想存儲一個整數變量,該變量得到遞增和遞減(一個計數信號用於限制併發請求到外部API)。這很容易,除非我需要一種方法來從並行SQL代理作業中運行的SSIS包中讀取/寫入該變量。現在可以有0到5個SQL Agent作業實例,因此可以同時運行SSIS包。我對SSIS跨進程通信有哪些選擇?

我的閱讀和寫作這個變量的選項是什麼?將使用此變量的代碼將作爲.NET中的自定義SSIS任務編寫。

這個值並不特別重要,只要它通常接近我在公差範圍內。確切會很好,但不是必需的。

我有權訪問文件系統,註冊表,數據庫,服務器和SSIS代理作爲一個整體,但我想經常檢查這個變量,通常15-30個線程,歷來會導致使用文件系統方法(我可能做錯了),並且IMO過於密集,無法存儲在數據庫中。如我錯了請糾正我。在註冊表中存儲可防止在服務器場中訪問變量。

如果有人可以幫忙,我會很樂意成爲你的契約僕人。

+4

只是想知道,這個值不能住在數據庫表中的任何理由?所有5個實例應該能夠讀取它,如果適用,你必須使用適當的鎖定,或者我可能過度簡化了你的問題?當您需要獲取或更新值時,您可以通過SqlClient通過自定義任務中的代碼執行此操作。 – kd7 2011-03-03 16:33:25

+0

最主要的原因就是與我正在做的數據庫交談的數量。我的上面的概述是有點簡化的,因爲這5個實例中的每一個都可以有多達20個線程在循環中訪問變量,等待該變量低於某個閾值。最糟糕的情況是每秒鐘大約有100個查詢,假設我睡了一整秒。現在他們睡了100毫秒,等待一個本地過程變量。希望這可以幫助。 – Jordan 2011-03-03 16:55:29

回答

1

如果它用作計數信號量,爲什麼不實際使用Windows信號量對象? System.Threading.Semaphore是它的.NET版本,並且如果您在構造函數中指定了信號量名稱 - 將在使用此名稱的所有進程之間共享Win32對象。

+0

你是男人。感謝您提供的信息 - 我希望幾個月前我會了解這門課。由於某種原因,它在搜索過程中從未出現過。當我回來工作時,我會給這個鏡頭。 – Jordan 2011-03-14 01:10:08

0

不知道我明白這個問題 - 你表示你有權訪問數據庫,文件系統,註冊表等。你是說你不想/不能使用這些方法嗎?您是否希望在電腦暫停恢復的情況下保持價值?

如果不需要持久性,則可以通過RPC(包括COM或Web服務)在內存中保存。無論解決方案是什麼,它似乎都需要全局並且對所有正在運行的實例都可見。

這個變量元數據用作信號量來控制和協調進程,還是這個變量域數據?

+0

我正在尋找關於如何使用上述任何方法的輸入,或者我不知道可以控制對此變量的訪問的任何內容。這確實是一個計數信號量,用於協調併發請求數量到外部API。持久性並不是必需的,因爲我有一個排隊系統,如果發生故障,它會從停止的地方開始。 – Jordan 2011-03-03 19:11:39

+0

有很多概念需要考慮。外部進程是使用多個線程運行還是外部進程的多個實例使用單個線程運行?如果外部進程包含多個線程(並且假設這個外部進程是可變的),那麼可以添加一個計數器來計算線程數,在外部進程中包含適當的接口以檢索計數。如果外部進程不是多線程的,而是具有單個線程,並且具有多個實例,則使用進程計數將提供這些細節。 – barrypicker 2011-03-16 18:13:13