<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <title>Coral8, Inc.</title>
  <link rel="alternate" type="text/html" href="http://www.coral8.com"/>
  <link rel="self" type="application/atom+xml" href="http://www.coral8.com/atom/feed"/>
  <id>http://www.coral8.com/atom/feed</id>
  <updated>2007-07-19T10:10:48-07:00</updated>
  <entry>
    <title>Coral8 5.5: Snapshot Queries with Live Updates</title>
    <link rel="alternate" type="text/html" href="http://www.coral8.com/blogs/blog-entry/coral8-5-5-snapshot-queries-live-updates" />
    <id>http://www.coral8.com/blogs/blog-entry/coral8-5-5-snapshot-queries-live-updates</id>
    <published>2008-11-03T15:42:30-08:00</published>
    <updated>2008-11-03T20:33:04-08:00</updated>
    <author>
      <name>Mark</name>
    </author>
    <category term="CEP Technology Blog" />
    <summary type="html"><![CDATA[Last week we <a href="http://www.coral8.com/news/pr/281.html">announced</a> the release of version 5.5 of Coral8 Engine, which has a number of very cool features.  The biggest and the most exciting of them must surely be Snapshot Queries with Live Updates.  Here is why:

<h2>History lesson: Continuous and Snapshot Queries</h2>

First generation CEP engines started with the concept of Continuous Queries.   Unlike database queries that return a snapshot of data at a given time, Continuous Queries are registered once, subscribe to the relevant input streams, and then continuously produce streaming output on one or more output streams.  Very nice. Continuous Queries are the foundation of all CEP engines today.
<p><p>
As nice as Continuous Queries are, it turns out that sometimes CEP users want to issue the traditional old-style Snapshot queries.  Why would they want to do that?  Many reasons, really.  Some of them want to integrate with traditional BI tools that cannot output results of Continuous Queries.  Some really want to get the one time snapshot of the data.  Some simply want to query the state kept in the memory of their CEP engine, in so called "windows".  
<p>
To solve this problem, Coral8 added a while back the notion of "public windows", which can be queried using plain old standard SQL in a snapshot fashion.  Problem solved?  Not so fast...

<h2>Snapshot Queries with Live Updates: Why?</h2>

It turns out that what many customers really want is a <i>combination</i> of Snapshot and Continuous Queries.  They want to get the snapshot result of the query, followed by a live stream of updates to the result of the query!  Why do they want it?  Let's look at a couple of examples:
<p><p>
A financial institution may use a CEP engine to track the list of all order for a day in a window.  At any given time, one may want to ask, how many orders in the incomplete state are there, grouped by trader, security, or exchange?  So far it sounds like a snapshot query, right?  But once the result is returned, the user typically wants to keep track of the results of this query!  As more orders are added and existing orders change their state, the counts returned by the query are changing.  People want their CEP engine to track these changes.
<p>
Consider an even simpler example from the RFID tags.  Let's say that you are tracking the list of all assets with RFID tags in a Coral8 window.  Imagine you want to query the window for the list of all tags that have not sent an update to a reader in the past 10 seconds.  It's a useful list, but it can be even more useful if it's dynamically updated as the underlying window changes!
<p>

<h2>Snapshot Queries with Live Updates: How?</h2>

Hopefully these two simple example convince you that Snapshot Queries with Live Updates are very useful in a number of settings.  So how do they work?
<p><p>
One challenge with building this feature was that a standard non-public Coral8 window is only visible from the module where it's declared.  Public windows are visible from the outside, but they only allow snapshot queries via SQL, and there are no live updates.  So to implement Snapshot Queries with Live Updates, we added a new and powerful feature: Shared Windows.  
<p>
To share and query a window across modules, one sets up a Master Window, which keeps track of all the relevant data (orders, RFID tags, etc.).  Once a Master Window is set up, a Mirror Window can be created in a separate module, and it can dynamically get a subset of data from the Master window.  Once this initial subset is received, the Mirror data starts receiving updates on all additions and deletions from the Master window.  Thus, a continuous query on the mirror window first returns the snapshot, followed by live updates.  Voila!
<p>
Of course, the beauty of this whole set up is that a mirror window and the query over the mirror window can be set up completely dynamically.  Coral8 has always been known for its ability to register queries dynamically, so this is probably not too surprising.  In our testing, a mirror window with a new query can be created, compiled, registered, and relied upon to produce a result in well under 1 second!  I personally find this quite amazing.

<h2>Want to learn more?</h2>

Of course, this blog post has just a very short intro to the magical world of Shared Windows and Snapshot Queries with Live Updates.  To learn more, you can refer to our documentation (search for Shared Windows), or better yet, read an <a href="http://www.coral8.com/system/files/assets/pdf/5.5.0/Coral8SharedWindows.pdf">excellent white paper</a> by Bob Hagmann on this very subject.  It covers how Snapshot Queries with Live Updates work, how they can be created in CCL, how they can be registered dynamically from Java, and lots of other relevant topics. 
<p><p>
Mark Tsimelzon, President & CTO, Coral8



    ]]></summary>
    <content type="html"><![CDATA[Last week we <a href="http://www.coral8.com/news/pr/281.html">announced</a> the release of version 5.5 of Coral8 Engine, which has a number of very cool features.  The biggest and the most exciting of them must surely be Snapshot Queries with Live Updates.  Here is why:

<h2>History lesson: Continuous and Snapshot Queries</h2>

First generation CEP engines started with the concept of Continuous Queries.   Unlike database queries that return a snapshot of data at a given time, Continuous Queries are registered once, subscribe to the relevant input streams, and then continuously produce streaming output on one or more output streams.  Very nice. Continuous Queries are the foundation of all CEP engines today.
<p><p>
As nice as Continuous Queries are, it turns out that sometimes CEP users want to issue the traditional old-style Snapshot queries.  Why would they want to do that?  Many reasons, really.  Some of them want to integrate with traditional BI tools that cannot output results of Continuous Queries.  Some really want to get the one time snapshot of the data.  Some simply want to query the state kept in the memory of their CEP engine, in so called "windows".  
<p>
To solve this problem, Coral8 added a while back the notion of "public windows", which can be queried using plain old standard SQL in a snapshot fashion.  Problem solved?  Not so fast...

<h2>Snapshot Queries with Live Updates: Why?</h2>

It turns out that what many customers really want is a <i>combination</i> of Snapshot and Continuous Queries.  They want to get the snapshot result of the query, followed by a live stream of updates to the result of the query!  Why do they want it?  Let's look at a couple of examples:
<p><p>
A financial institution may use a CEP engine to track the list of all order for a day in a window.  At any given time, one may want to ask, how many orders in the incomplete state are there, grouped by trader, security, or exchange?  So far it sounds like a snapshot query, right?  But once the result is returned, the user typically wants to keep track of the results of this query!  As more orders are added and existing orders change their state, the counts returned by the query are changing.  People want their CEP engine to track these changes.
<p>
Consider an even simpler example from the RFID tags.  Let's say that you are tracking the list of all assets with RFID tags in a Coral8 window.  Imagine you want to query the window for the list of all tags that have not sent an update to a reader in the past 10 seconds.  It's a useful list, but it can be even more useful if it's dynamically updated as the underlying window changes!
<p>

<h2>Snapshot Queries with Live Updates: How?</h2>

Hopefully these two simple example convince you that Snapshot Queries with Live Updates are very useful in a number of settings.  So how do they work?
<p><p>
One challenge with building this feature was that a standard non-public Coral8 window is only visible from the module where it's declared.  Public windows are visible from the outside, but they only allow snapshot queries via SQL, and there are no live updates.  So to implement Snapshot Queries with Live Updates, we added a new and powerful feature: Shared Windows.  
<p>
To share and query a window across modules, one sets up a Master Window, which keeps track of all the relevant data (orders, RFID tags, etc.).  Once a Master Window is set up, a Mirror Window can be created in a separate module, and it can dynamically get a subset of data from the Master window.  Once this initial subset is received, the Mirror data starts receiving updates on all additions and deletions from the Master window.  Thus, a continuous query on the mirror window first returns the snapshot, followed by live updates.  Voila!
<p>
Of course, the beauty of this whole set up is that a mirror window and the query over the mirror window can be set up completely dynamically.  Coral8 has always been known for its ability to register queries dynamically, so this is probably not too surprising.  In our testing, a mirror window with a new query can be created, compiled, registered, and relied upon to produce a result in well under 1 second!  I personally find this quite amazing.

<h2>Want to learn more?</h2>

Of course, this blog post has just a very short intro to the magical world of Shared Windows and Snapshot Queries with Live Updates.  To learn more, you can refer to our documentation (search for Shared Windows), or better yet, read an <a href="http://www.coral8.com/system/files/assets/pdf/5.5.0/Coral8SharedWindows.pdf">excellent white paper</a> by Bob Hagmann on this very subject.  It covers how Snapshot Queries with Live Updates work, how they can be created in CCL, how they can be registered dynamically from Java, and lots of other relevant topics. 
<p><p>
Mark Tsimelzon, President & CTO, Coral8



    ]]></content>
  </entry>
  <entry>
    <title>Unclouding and streamlining your thinking about CEP use cases</title>
    <link rel="alternate" type="text/html" href="http://www.coral8.com/blogs/blog-entry/unclouding-and-streamlining-your-thinking-about-cep-use-cases" />
    <id>http://www.coral8.com/blogs/blog-entry/unclouding-and-streamlining-your-thinking-about-cep-use-cases</id>
    <published>2007-10-17T08:07:04-07:00</published>
    <updated>2007-10-18T21:08:00-07:00</updated>
    <author>
      <name>Mark</name>
    </author>
    <category term="CEP Technology Blog" />
    <summary type="html"><![CDATA[Probably the most exciting but occasionally frustrating part of my job is discussing CEP use cases with our customers.  It's exciting because I get to see the many diverse applications of CEP, but it's frustrating because some customers find it a little hard to come up with specific meaningful use cases in their environment.
<p><p>
I've been trying to understand why this is easy for some customers and hard for others, and I've recently observed a pattern I want to share.  I'm sure it is controversial and does not explain the whole story, but still.  Here it goes:
<p>
<b>Those people who find it hard to come up with specific use cases think about The Event <i>Cloud</i>.  Those who find it easy to do think in term of event <i>streams</i></b>. 
<p>
Now, if you were following the recent "CEP vs. ESP" wars, you may be forgiven for thinking that the basic difference between clouds and streams is about ordering.  Streams carry ordered events and clouds don't require ordering, or so the story goes.  Well, we all know this is false.  Coral8 Engine, as well as some other ESP/CEP engines can handle unordered streams.  So ordering is a red herring.
<p>
The real difference between a cloud and a stream is much more significant.  An event cloud is an abstract concept.  In some sense, it does not really exist!  An event cloud represents a collection of all the events flowing through an enterprise or a part of an enterprise.  It may be useful to think about this collection from a theoretical standpoint, but in my experience, it does not help one come up with and understand use cases.
<p>
Streams, on the other hand, are much more real and useful.  Each stream has a meaning and carries similar events.   You can decompose your events into input streams, output streams, and intermediate streams.  Each stream (at least in the Coral8 Engine) has a name (a URI) and is a publish/subscribe topic, so you may have multiple subscribes and publishers dynamically added.  Also, each stream may have an access control list associated with it.  
<p>
Once you think about a stream, you can think about the things you may want to do with it, such as filter events, maintain a window, aggregate events over a window, enrich the stream, join it with another stream, persist it to a database, and so on.  Your use cases start practically defining themselves as soon as you decompose your problem into streams and operations on streams.  
<p>
Hopefully this has convinced you to stop thinking about "The Cloud" and start thinking about multiple streams, at least for the purpose of defining use cases.  As some folks know, I like finding non-CEP analogies for CEP topics.  Here is one here:  You'll never understand databases if you think that they just store "data".  To understand databases, you've got to understand that they store <i>tables</i>.  Similarly, to un<i>cloud</i> and <i>stream</i>line your thinking about CEP, start thinking streams.
<p>
<p>
Mark Tsimelzon, President & CTO, Coral8.
    ]]></summary>
    <content type="html"><![CDATA[Probably the most exciting but occasionally frustrating part of my job is discussing CEP use cases with our customers.  It's exciting because I get to see the many diverse applications of CEP, but it's frustrating because some customers find it a little hard to come up with specific meaningful use cases in their environment.
<p><p>
I've been trying to understand why this is easy for some customers and hard for others, and I've recently observed a pattern I want to share.  I'm sure it is controversial and does not explain the whole story, but still.  Here it goes:
<p>
<b>Those people who find it hard to come up with specific use cases think about The Event <i>Cloud</i>.  Those who find it easy to do think in term of event <i>streams</i></b>. 
<p>
Now, if you were following the recent "CEP vs. ESP" wars, you may be forgiven for thinking that the basic difference between clouds and streams is about ordering.  Streams carry ordered events and clouds don't require ordering, or so the story goes.  Well, we all know this is false.  Coral8 Engine, as well as some other ESP/CEP engines can handle unordered streams.  So ordering is a red herring.
<p>
The real difference between a cloud and a stream is much more significant.  An event cloud is an abstract concept.  In some sense, it does not really exist!  An event cloud represents a collection of all the events flowing through an enterprise or a part of an enterprise.  It may be useful to think about this collection from a theoretical standpoint, but in my experience, it does not help one come up with and understand use cases.
<p>
Streams, on the other hand, are much more real and useful.  Each stream has a meaning and carries similar events.   You can decompose your events into input streams, output streams, and intermediate streams.  Each stream (at least in the Coral8 Engine) has a name (a URI) and is a publish/subscribe topic, so you may have multiple subscribes and publishers dynamically added.  Also, each stream may have an access control list associated with it.  
<p>
Once you think about a stream, you can think about the things you may want to do with it, such as filter events, maintain a window, aggregate events over a window, enrich the stream, join it with another stream, persist it to a database, and so on.  Your use cases start practically defining themselves as soon as you decompose your problem into streams and operations on streams.  
<p>
Hopefully this has convinced you to stop thinking about "The Cloud" and start thinking about multiple streams, at least for the purpose of defining use cases.  As some folks know, I like finding non-CEP analogies for CEP topics.  Here is one here:  You'll never understand databases if you think that they just store "data".  To understand databases, you've got to understand that they store <i>tables</i>.  Similarly, to un<i>cloud</i> and <i>stream</i>line your thinking about CEP, start thinking streams.
<p>
<p>
Mark Tsimelzon, President & CTO, Coral8.
    ]]></content>
  </entry>
  <entry>
    <title>Coral8 a Jolt Award Finalist!</title>
    <link rel="alternate" type="text/html" href="http://www.coral8.com/blogs/blog-entry/coral8-jolt-award-finalist" />
    <id>http://www.coral8.com/blogs/blog-entry/coral8-jolt-award-finalist</id>
    <published>2007-01-18T08:30:00-08:00</published>
    <updated>2007-07-19T10:10:48-07:00</updated>
    <author>
      <name>johnm@coral8.com</name>
    </author>
    <category term="Coral8 Blog" />
    <summary type="html"><![CDATA[<p>
We received word this week that Coral8 is a finalist for one of the prestigious Jolt Product Excellence Awards, given out annually by Dr. Dobbs Magazine and CMP. This is the 17th year in which Dr. Dobbs and CMP will be giving out these awards.
</p><p>
Coral8 is one of 6 finalists in the “Database Engines and Data
Tools” category. It is especially gratifying that the Coral8 Engine is a finalist because the category is much broader than Complex Event Processing, showing the high market interest in CEP and Coral8 within the general information management category.
</p><p>
The Jolt Award committee takes a deep, serious look at the products nominated for their Product Excellence Awards, even downloading and evaluating the products directly. The fact that Coral8 is a finalist shows the richness of the feature set and the completeness of the product for developers to build and deploy CEP applications.
</p><p>
It is also nice to note that Coral8 is the only CEP product that is a finalist for a Jolt Award.
</p><p>
Thank you to our customers who helped make our product so popular, and many thanks to our excellent product development team who has created such a fantastic product.
</p><p>
To read more about the Jolt Product Excellence Awards, please <a href="http://joltawards.com/jolts" target="_blank">click here</a>.  To see the finalists across all categories, please <a href="http://joltawards.com/2007/" target="_blank"> click here</a>.
</p><p>
Thanks for reading,<br />
John Morrell
</p>
    ]]></summary>
    <content type="html"><![CDATA[<p>
We received word this week that Coral8 is a finalist for one of the prestigious Jolt Product Excellence Awards, given out annually by Dr. Dobbs Magazine and CMP. This is the 17th year in which Dr. Dobbs and CMP will be giving out these awards.
</p><p>
Coral8 is one of 6 finalists in the “Database Engines and Data
Tools” category. It is especially gratifying that the Coral8 Engine is a finalist because the category is much broader than Complex Event Processing, showing the high market interest in CEP and Coral8 within the general information management category.
</p><p>
The Jolt Award committee takes a deep, serious look at the products nominated for their Product Excellence Awards, even downloading and evaluating the products directly. The fact that Coral8 is a finalist shows the richness of the feature set and the completeness of the product for developers to build and deploy CEP applications.
</p><p>
It is also nice to note that Coral8 is the only CEP product that is a finalist for a Jolt Award.
</p><p>
Thank you to our customers who helped make our product so popular, and many thanks to our excellent product development team who has created such a fantastic product.
</p><p>
To read more about the Jolt Product Excellence Awards, please <a href="http://joltawards.com/jolts" target="_blank">click here</a>.  To see the finalists across all categories, please <a href="http://joltawards.com/2007/" target="_blank"> click here</a>.
</p><p>
Thanks for reading,<br />
John Morrell
</p>
    ]]></content>
  </entry>
</feed>
