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