2011-11-11 90 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