For problems that have to do with time like querying over historical data Complex Event Processing, CEP, can be very useful, Greg Young suggests in a recent presentation.
Greg describes event processing as a method of analysing streams of data about things that has happened and deriving a conclusion from them. One example is temporal correlation queries used when you want to correlate things that have happened at different times, e.g. finding users that said the word “presents” within one minute of saying the word “birthday” in a twitter stream or finding patients in a clinical trial that has reacted in certain ways at different times during the trial period.
For creating queries Greg uses a query language implemented in JavaScript that works on top of event streams. Writing queries in JavaScript means a web browser can be used for writing, and also for debugging.
This query language is included in Event Store, a type of NoSQL database built according to the concepts of an Event Source. In event sourcing, instead of representing state directly, state is represented as a series of facts, something that has happened at a specific point in time. Storing data this way means that no information is lost since every change of state is stored, not just the current state.
Storing facts or events creates a kind of time machine making it possible to go back in time and look at how things were historically, e.g. creating a new report today and run it as if time is one month back.
Another use case is looking at predictions and estimating the predictivity capability; running a predictive model as if it is one month earlier, predicting outcome for today and comparing the result with the real outcome.
Event Store is an open source product, licensed under a 3-clause BSD license, first released in September 2012.
Greg Young, lead architect for the Event Store, is an independent consultant famous for having coined the term CQRS.