Complexity Scorecard

In my previous post More on CEP and Complexity I made a claim that for the simplest CEP applications, one does not really need Coral8, or any CEP engine for that matter. You can write your application in C++ or Java just fine. For medium complexity applications, most commercial or open source engines would do. But for sophisticated applications, you need to go with a truly high-end CEP engine. But, a prospect asked me yesterday, how do I know where my application lands on the sophistication scale? As a public service, here I provide a scorecard to judge how sophisticated your CEP application is.

For each of the ten questions, please choose one answer. The more points you score, the more sophisticated your application is.

What is the combined data rate you need to support?

  • Less than 1 event/sec: 0 (Just curious, why are you reading this blog?)
  • 1-100 events/sec: 1
  • 100-1000 events/sec: 3
  • 1000-10,000 events/sec: 4
  • 10,000+ events/sec: 5

What is the event processing latency you need to guarantee?

  • Minutes/Hours/Days: 0 (Still not sure why you are reading this)
  • Seconds: 1
  • 100-1000 milliseconds: 2
  • 10-100 milliseconds: 3
  • 1-10 milliseconds: 4
  • Less than 1 millisecond: 5

How many data streams do you have?

  • One stream: 1
  • More than one, but I don't need to synchronize events across streams: 2
  • More than one, and I need to synchronize events across streams, and handle delayed and out-of-order events: 5

How large/complex are your input events?

  • Small flat events (1-10 fields): 1
  • Large flat events (10+ fields): 2
  • Large non-flat / hierarchical / XML events: 5

What do most of your queries look like?

  • Filtering and single-event transformations: 1
  • Aggregation over different kinds of windows: 3
  • Joins and state management: 4
  • Event Pattern Matching: 5

How many queries do you have?

  • 1-10: 1
  • 10-100: 3
  • 100+: 5

Do you need to interface with databases?

  • No: 0
  • Infrequent reads or writes: 2
  • Frequent reads/writes, but no read/write caching: 3
  • Frequent reads/writes, need basic caching: 4
  • Frequent reads/writes, need granular on-demand row caching: 5

Do you need to scale beyond one CPU?

  • No: 0
  • Yes, to multiple CPUs/cores: 2
  • Yes, to several machines: 4
  • Yes, to a large cluster: 5

What are your High-Availability / Data Persistence requirements?

  • None: 0 (I don't believe you, but that's ok)
  • I need to recover from failures, but I don't care if I lose data: 2
  • I don't want to lose data, but I'm ok with losing a few events here and there: 4
  • I never, ever, want to lose a single event!: 5

What kind of interface do you need for business users?

  • None: 0 (Who is paying for your project?)
  • They are ok with static reports: 1
  • They want real-time dashboards: 3
  • They want real-time dashboards, and they want to configure dashboards and actions dynamically: 5

Now, add up your points:

  • Less than 15: Your application is not too sophisticated. You don't really need a CEP engine right now. A CEP Engine will still save you time and money, especially over the long term, but you don't really need one
  • 15-30: Your application is of medium sophistication. Using a CEP engine is highly advised, but the good news is that most CEP engines should be able to handle it.
  • More than 30: You application is sophisticated. Please choose your CEP engine very carefully, as most CEP engines out there will not be able to handle it.

That's it! Of course, this scorecard is very approximate, and I have not covered a lot of areas: adapters to external systems, SDK, deployment, management, security, determinism, etc. But I hope this is still useful. Please let me know if you have any feedback or questions.

Mark Tsimelzon, President & CTO, Coral8

based on your answers, you should invest in our mutual fund

This reminds me of another 10 question scorecard that will show me the right investment for my retirement money. :) I am a little skeptical that someone who was considering building a high performance application in C++ or Java would want this much simplification. Am I wrong? Hans

You'll be surprised how many

You'll be surprised how many people make decisions about building applications AND about investment for retirement with a lot less information than this! :) But the point is well taken. I was hoping this post to be just a starting point for many discussions, and will make people ask more questions.


At the same time, Hans, please keep in mind that you are in the tiny minority of people who have been using CEP engines for several years. Most developers out there are still trying to figure out what CEP is all about, and whether they should care about it. This post is for them, not for an expert like you.