I heard an interesting comment yesterday from Coral8, claiming to be “the only fully deterministic engine that guarantees consistent results”. Here’s a bit more of what was said:
There is a number of CEP engines that will claim to have / to be a deterministic engine. Well, certainly, we are not only going to make that claim, but we back it up, right. We provide a fully deterministic that we will guarantee consistent results. We recommend that you look very closely at these guarantees and test determinism. We guarantee deterministic results, no matter how complex your queries, no matter how many streams they operate across, and more. We don’t believe that any / all the other CEP engines can back that claim to support fully deterministic results across complex queries.
But their CEP engine is not the only one to take consistency seriously. We designed the Aleri Streaming Platform to be deterministic and consistent from day one, and our first application in production, the Aleri Liquidity Management System (LMS), relies on it.
What exactly do we mean by “determinacy” or “consistency”? By “determinacy” we mean that a set of input data produces the same output data. In other words, the order in which the data arrives doesn’t matter. By “consistency” we mean that the output is predictable from the input. Mapping these concepts to the Aleri Streaming Platform is straightforward. In the Aleri Platform, one configures “source streams” and “derived streams”, and data, in the form of records, enters the source streams and flows to derived streams. Derived streams are, for the most part, bog-standard relational (SQL-like) operations: filtering (selection), computation, joins, aggregations (group-by). So by “determinacy”, we mean that the same records supplied to the source streams yield the same results at the derived streams. By “consistency”, since the derived streams are SQL/relational operations, we mean that the results are the ones we’d expect.
The Aleri Streaming Platform satisfies these criteria if one sticks to the core stream operations. But it goes further, in providing FlexStreams that allow the user to code up pretty much any computation on record events with conditionals, loops, etc. The upshot: if you remain with the relational subset (as LMS does), the Platform guarantees consistency. If you need to step outside, you can.
We go one step further in our determinacy/consistency story: the Aleri Streaming Platform, unlike Coral8, supports updates, upserts, and deletes as well as inserts. Those operations can be used to control the size of data, as a previous entry has noted. It’s harder to guarantee these properties with these operations, of course, but they can be extremely important. I wouldn’t want a CEP engine without them.