2011-11-11 82 views
1

我在2個服務之間寫入一個網關,其中一個服務是一個非常慢的web服務,並且很快被超載,另一個超級快,並且頻繁地發送相同的數據。WCF丟棄重複數據

我想讓我的服務放棄(在可能的最早點)我收到的數據與先前的對象相同。

這樣做的最好方法是什麼?

我知道的最好的方法(我懷疑是最好的)是將反序列化後的接收對象與我已經收到的對象(換句話說,就是緩存)進行比較。

我更關心的是我放棄儘可能多的計算容易丟棄,而不是確保放棄所有重複的數據。數據中包含地理定位信息,這些信息經常是相同的。

澄清:

現狀:

服務1快,並經常發送一些沒有新的數據更新。 服務2很慢

我想從服務1發送數據到服務2(稍作修改),但前提是我還沒有發送相同的數據。

戴爾

回答

1

很難說,最好的方法是什麼沒有一點信息,但它聽起來像是你可以從一個比較簡單的緩存中受益。我不確定你是否在寫繁重或閱讀過重的情況,但你應該能夠使其工作。

IE,調用快速服務並在調用慢速服務之前檢查緩存中的結果。

+0

那是什麼,我現在,我希望有會是一個前反序列化或以反序列化的方式來很好地檢查它是否是重複的。 – Dale

0

我認爲肯尼思提供了一個好主意。

只是幀的問題,這聽起來像你對我有這樣的事情的情況(澄清你的問題,如果這是不正確的)...

[服務1] - >(呼叫) - > [服務2]

  • 服務1 - 更快和過載服務2.
  • 服務1 - 重複數據發送到服務2,這麼大的可以忽略不計。

如果是這種情況,因爲肯尼斯建議,你可能要實現已經被從服務1發送請求的緩存機制,並存儲答案從服務2.收到這樣,在僞代碼,是這樣的:

  1. 服務1個檢查在一些常見的存儲,看是否有請求時,它是要發送已發送。
  2. 如果有,它將檢查以查看從服務2發回的答案。
  3. 如果沒有,它會發送請求並將該請求添加到發送的請求列表中。
  4. 當答案提供時,它與原始請求一起存儲在緩存中。

這也將有可能使您通過查找服務更快的好處1.

+0

這不完全是我的情況,但它很接近 - 服務1不關心服務2的結果。我可以做(已完成)過去數據的緩存,但我正在執行緩存檢查在對象已經被反序列化之後,我希望能有一個很好的方法來做到這一點。 – Dale

+1

@ user788402 - 啊,好吧。那麼,如果服務1不關心服務2的結果,那麼您可以緩存發送請求的事實。您還可以在緩存項目上包含一個時間戳(定期清理),所以如果稍後發送重複請求,則實際上可以再次將請求發送到服務2。 – JasCav

+0

+1爲「遠後」部分。 – Dale

0

最早的可能點是檢測重複數據在數據的發送者,而不是在接收器。

在那裏添加一個內存緩存。如果對象是重複的,那麼不需要序列化它並浪費任何時間發送它。

順便說一句,如果你想有一個良好的.Net內存緩存,我有好運氣Couchbase's Memcached的

+0

我無權訪問發件人的代碼 - 我正在使用2個第三方服務,將數據從一個傳送到另一個。 – Dale