データベースは、有限の格納済データセットに対する問合せの実行に最も適しています。ただし、多数の最新のアプリケーションでは、連続的な限りのないデータ・セットに対する、実行に時間のかかる問合せが必要とされています。設計によっては、データの大部分に対して繰り返し問合せが実行され、かつ更新が比較的まれである場合は、格納されたデータ・セットが適しています。一方、データ・ストリームは、継続的に変更されるデータ、多くの場合はもっぱら新しい要素の挿入によって変更されるデータを表します。大量のデータに対して複数回操作を実行することは不要であり、実用的ではありません。多くの種類のアプリケーションが、データ・セットとは対照的なデータ・ストリームを生成します。これには、センサー・データ・アプリケーション、金融ティッカー、ネットワーク・パフォーマンス測定ツール、ネットワークの監視とトラフィック管理アプリケーション、およびクリックストリーム分析ツールなどがあります。このようなアプリケーションのデータの管理と処理には、一時的に強力に集中処理できるデータ管理機能および問合せ機能の構築が含まれます。
この要件を満たすために、Oracle SOA SuiteはOracle Complex Event Processing (Oracle CEP)を提供しています。Oracle CEPは、リレーションを含む構造化データ・レコードのストリーム記述をサポートするデータ管理インフラストラクチャです。Oracle CEPはOracle SOA Suiteに組み込まれていますが、個別のダウンロードで使用可能です。Oracle BAMで管理できない、銀行取引で発生するような大量のイベントを処理するように最適化されています。さらに、複合的な相関やパターン一致を実行できます。
Oracle CEPを使用するコンポジット・アプリケーションの場合、Oracle Mediatorがビジネス・イベントをイベント配信ネットワーク(EDN)に公開します。実行時に、Oracle CEPサービス・エンジンはこれらのイベントをサブスクライブします。Oracle CEPサービス・エンジンは、Continuous Query Language(Oracle CQL)問合せを実行し、イベント・ストリームでパターンを検索します。Oracle CQLは、ストリーミング・データをサポートするコンストラクトが追加された、SQLベースの問合せ言語です。Oracle CQLを使用すると、データ・ストリームに対する問合せを作成し、複合イベント処理を実行できます。Oracle CEPサービス・エンジンは、これらのストリームをリスニングし、必要な個々のイベントを一見無関係にみえるものも含めすべてキャッシュして、特定のパターンとの相関を試みます。複合イベント処理の問合せで提供されたデータが、Oracle BAMで使用できるようになります。
Oracle CEPのアプリケーションとしては、電子取引やリスク管理から侵入探知、コンプライアンスの監視まで、多数のアプリケーションが考えられます。
具体的には、次の機能領域があります。
- データソースとイベント・ソース: Oracle CEPイベント・ソースでは、Oracle CQL問合せの実行対象となるデータのプロデューサが識別されます。イベント・ソースには、ワイヤ・サービスや株式相場、温度、振動または無線周波数識別(RFID)検出器などのセンサーのデータ・フィードがあります。Oracle CEPには、このような実社会のイベント・ソースをOracle CQL問合せに接続するアダプタが多数用意されています。Oracle CEPアダプタでは、JMS、HTTPパブリッシャ/サブスクライバおよびファイルのイベント・ソースがサポートされています。
- コンテキスト作成: Oracle CEPには、様々なスライディング・ウィンドウ演算子およびビュー(副問合せ)が用意されており、フィルタ処理、相関と集計、およびパターン一致を実行する、一時コンテキストまたはセマンティク・コンテキストを定義できます。ウィンドウとビューを使用すると、直前の5分間のイベントや特定の顧客に関係するイベントなどのコンテキストを定義できます。Oracle CQLには、範囲ベース(時間値または定数値)、タプルベース、パーティション化などの様々なスライディング・ウィンドウがあります。さらに、カスタムのウィンドウ演算子も簡単に定義できます。
- フィルタ処理: Oracle CQLを使用すると、イベント・ソースで提供されたイベントの属性を選択する問合せを指定できます。このような問合せを使用してイベント・ソースをフィルタ処理し、対象となるイベントを取得します。Oracle CQLには、この目的で使用する演算子、式、条件および文のセットが豊富に用意されています。
- 相関と集計: Oracle CQLを使用すると、イベント・ソースで提供されたイベントの属性について、高度な統計および算術演算を実行できます。Oracle CQLに用意されているのは、問合せ対象のストリームまたはビューの各行に対して単一の結果行を返す単一行関数、単一のタプルではなくタプルのグループに基づいて単一の集計結果を返す集計関数、高パフォーマンスの科学技術コンピューティング用のColtオープン・ソース・ライブラリに基づく統計および高度な算術演算、java.lang.Mathクラスに基づく統計および高度な算術演算です。さらに、カスタムの単一行関数および集計関数を簡単に定義できます。
- パターン一致: Oracle CQLのMATCH_RECOGNIZE条件を使用すると、アルゴリズム取引、ダブルボトム検出、非イベント検出など、広範囲にわたるタスクに対する複合パターン一致操作を簡潔に表現できます。次の例では、傷みやすい食品が温度25度以上の環境に5分間を超えてさらされたかどうかが検出されます。
<query id="detectPerish"><![CDATA[
select its.itemId from ItemTempStream
MATCH_RECOGNIZE (
PARTITION BY
itemId
MEASURES
A.itemId as itemId
PATTERN (A B* C)
DEFINE
A AS (A.temp >= 25) and ,
B AS ((B.temp >= 25) and
(B.element_time - A.element_time < INTERVAL "0 00:00:05:00" DAY TO SECOND)),
C AS ((C.temp >= 25) and
C.element_time - A.element_time >= INTERVAL "0 00:00:05:00" DAY TO SECOND)
)) as its
]]></query>
- 複合イベント・シンク: Oracle CQLイベント・シンクは、Oracle CQL問合せ結果のコンシューマを識別します。つまり、Oracle CQL問合せでフィルタ処理、相関と集計、およびパターン一致を様々なコンテキスト内で実行してイベント・ソースから抽出した、重要なイベントのコンシューマを識別します。通常、重要なイベントは、イベント・ソースで提供されたイベントより少ない数(高い価値)になります。Oracle CEPアダプタは、JMS、HTTPパブリッシャ/サブスクライバ、ファイルおよびイベントBeanのイベント・シンクをサポートしています。イベントBeanは、特定の重要イベントの発生時に実行するビジネス・ロジックが含まれたPlain Old Java Objects(POJO)です。