Compartilhar via


IObservable in StreamInsight

Reading several blog posts in the last few days, there has been some apparent confusion over StreamInsight's usage of Reactive LINQ’s IObservable/IObserver interfaces.

StreamInsight is an event processing platform that has well defined application time semantics. It leverages those semantics to offer rich constructs for expressing queries over temporal event streams. This facilitates the development of a wide range of event processing applications; from enterprise applications that have to deal with millions of events per second, to devices with limited resources.

Reactive LINQ captures the well know Subject-Observer design pattern that enables a push-based collection to notify several observers whenever a new value becomes available. It is particularly useful to reify discrete GUI events and asynchronous computations as first class values.

One of the key design tenets for StreamInsight is to be able to consume and process events from as many different sources as possible. The two teams collaborated to allow push collections that implement the IObservable interface as an additional way to get streaming data into StreamInsight and expose StreamInsight output as push collections. Since StreamInsight is committed to ship with SQL Server 2008 R2, it targets the 3.5 version of the .NET Framework which does not contain Reactive LINQ. To bridge this time gap, StreamInsight decided to ship its own copy of the observable interfaces.

This posting was co-authored by:
Erik Meijer, Reactive LINQ Architect
Beysim Sezgin, StreamInsight Architect

Comments

  • Anonymous
    September 02, 2009
    Is there any plan to merge the two IObservables? Will the CEP version include the features of the RX version? If the answer is no to both, have you considered the experience for those that do want to use both StreamInsight and the RX?

  • Anonymous
    June 08, 2010
    I thought Rx was implement on .NET 3.5.  Why wasn't this used as the basis for StreamInsight's implementation of IObservable.  At least the interfaces were factored out into a System.Observable.dll that doesnt get updated with the revisions being made to Rx to make it more feature complete and robust.  That should take care of the versioning issue?