ヘッダーをスキップ
Oracle® Fusion Middleware Oracle Event Processing CQL言語リファレンス
11gリリース1 (11.1.1.7)
B61613-06
  目次へ移動
目次

前
 
次
 

19 Oracle Event Processing NoSQL Databaseデータ・カートリッジ

この章では、Oracle NoSQLデータ・カートリッジを使用してOracle NoSQL DatabaseをOracle Event Processingイベント処理ネットワークに統合し、データベースのデータを問い合せる方法について説明します。

Oracle NoSQL Databaseは、分散キー/値型データベースです。ここでは、データがキー/値ペアとして格納され、ペアは特定のストレージ・ノードに書き込まれます。ストレージ・ノードをレプリケートすることで、高可用性、ノード障害が発生した場合の迅速なフェイルオーバー、および問合せの最適なロード・バランシングを実現します。

このマニュアルの内容は、読者がOracle NoSQL Databaseにすでに精通していて、運用しているものと想定しています。Oracle NoSQLの詳細は、Oracle Technology Networkのそのページ(http://www.oracle.com/technetwork/products/nosqldb/)を参照してください。


注意:

NoSQLデータ・カートリッジを使用するには、NoSQL Enterprise Editionのライセンスが必要です。


この章の内容は次のとおりです。

19.1 Oracle Event Processing NoSQL Databaseデータ・カートリッジについて

Oracle Event Processing NoSQL Databaseデータ・カートリッジを使用すれば、Oracle CQL問合せの一部としてOracle NoSQL Databaseに格納されたデータを参照できます。カートリッジにより、問合せでは、キーを指定し、そのキーに関連付けられた値のフィールドを参照することで、Oracle NoSQL Databaseストアから値を取得できます。

Oracle NoSQL Databaseを統合する際には、次のガイドラインに留意してください。

19.1.1 データ・カートリッジ名

Oracle Event Processing NoSQL Databaseデータ・カートリッジでは、カートリッジID com.oracle.cep.cartridge.nosqldbが使用されます。

19.2 Oracle CQLでのNoSQL Databaseの使用

CQLアプリケーションでOracle Event Processing NoSQL Databaseデータ・カートリッジを使用するには、1つ以上のアプリケーション・スコープ指定カートリッジ・コンテキストで、そのアプリケーション用に宣言し、構成する必要があります。

19.2.1 NoSQL DatabaseのEPNへの統合

既存のNoSQL Databaseの統合は、リレーショナル・データベースの表を統合する方法と似ています。NoSQL Databaseの場合、EPNアセンブリ・ファイルを次の方法で更新します(例19-1「NoSQL Databaseを統合するEPN」を参照)。

  1. NoSQLデータ・ソースを参照するために、ネームスペース宣言を追加して、store要素をサポートします。

    変更では、schemaLocation属性にネームスペース・スキーマの場所を、ネームスペースおよび接頭辞の宣言とともに追加する必要があります。

    • http://www.oracle.com/ns/oep/nosqldb http://www.oracle.com/ns/oep/nosqldb/oep-nosqldb.xsd

    • xmlns:nosqldb="http://www.oracle.com/ns/oep/nosqldb"

  2. store要素を追加して、NoSQL Databaseをリレーション・ソースとしてイベント処理ネットワークに統合します。

    ストア要素では、次の属性(すべてが必須)をサポートします。

    • id: CQL問合せでキー/値ストアを参照するために使用される名前。

    • store-name: キー/値ストアの名前で、ストアの作成時にKVStoreConfigクラスで指定した名前と一致させる必要があります。

    • store-locations: ストア内のアクティブ・ノードの1つ以上のホスト名およびポート。属性値は、空白区切りのリストで、各エントリはhostname:portの形式です。指定したホスト名およびポートの値を持つノードは、ストアに最初に接続したときに、順番に接続されます。

    • event-type: このリレーションのためにストア内の値から取得されたすべてのオブジェクトのオブジェクト型。属性値は、wlevs:event型リポジトリ・エントリで指定されたwlevs:event型エントリの名前に対応する必要があります。

  3. table-source要素を追加して、NoSQL Databaseを問合せが実行されるプロセッサに接続します。

例19-1「NoSQL Databaseを統合するEPN」では、イベント処理ネットワークをNoSQL Databaseに接続する方法を説明しています。store要素は、ホストkvhost-alpha上のポート5000またはホストkvhost-beta上のポート5010を使用して最初の接続を行い、"kvstore-customers"という名前のストアへのアクセスを提供します。Oracle CQLプロセッサP1を定義し、キー/値ストアのデータを"CustomerDescription"という名前のリレーションとしてP1で使用できるようにします。

ストアは、"CustomerDescription"の名前を使用して、Oracle CQL問合せ内で参照できます。ストアから取得される値はすべて、CustomerDescriptionクラスのシリアライズ・インスタンスです。

例19-1 NoSQL Databaseを統合するEPN

   <?xml version="1.0" encoding="UTF-8"?>
   <beans xmlns="http://www.springframework.org/schema/beans"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xmlns:osgi="http://www.springframework.org/schema/osgi"
          xmlns:wlevs="http://www.bea.com/ns/wlevs/spring"
          xmlns:nosqldb="http://www.oracle.com/ns/oep/nosqldb"
          xsi:schemaLocation="
     http://www.springframework.org/schema/beans
     http://www.springframework.org/schema/beans/spring-beans.xsd
     http://www.springframework.org/schema/osgi
     http://www.springframework.org/schema/osgi/spring-osgi.xsd
     http://www.bea.com/ns/wlevs/spring
     http://www.bea.com/ns/wlevs/spring/ocep-epn.xsd
     http://www.oracle.com/ns/oep/nosqldb
     http://www.oracle.com/ns/oep/nosqldb/oep-nosqldb.xsd">

    <!-- Provide access to the CustomerDescription class, which represents 
        the type of values in the store. -->
    <wlevs:event-type-repository>
        <wlevs:event-type type-name="CustomerDescription">
            <wlevs:class>com.bea.wlevs.example.CustomerDescription</wlevs:class>
        </wlevs:event-type>
        <wlevs:event-type type-name="SalesEvent">
            <wlevs:class>com.bea.wlevs.example.SalesEvent</wlevs:class>
        </wlevs:event-type>
    </wlevs:event-type-repository>

    <!-- The store element declares the key-value store, along with the 
        event type to which incoming NoSQL data will be bound. -->
    <nosqldb:store store-name="kvstore-customers"
        store-locations="kvhost-alpha:5000, kvhost-beta:5010"
        id="CustomerDescription"
        event-type="CustomerDescription"/>


    <wlevs:channel id="S1" event-type="SalesEvent">
        <wlevs:listener ref="P1"/>
    </wlevs:channel>

    <!- The table-source element links the store to the CQL processor. -->
    <wlevs:processor id="P1">
        <wlevs:table-source ref="CustomerDescription" /> 
    </wlevs:processor>

</beans>

例19-1「NoSQL Databaseを統合するEPN」で定義されたイベント・タイプは、『Oracle Fusion Middleware Oracle Event Processing開発者ガイドfor Eclipse』で説明されているように、JavaBeansクラスとして実装されます。

Oracle CQL問合せでstore要素により指定したストア内のエントリを参照する場合、それらのエントリの値は、イベントタイプ属性で指定した型のシリアライズ・インスタンスであることが必要です。イベント・タイプ・クラスはjava.io.Serializableを実装する必要があります。

問合せでストアからシリアライズされた有効な形式でない値を取得する場合、または値が指定したクラス用にシリアライズされた形式でない場合、Oracle Event Processingでは例外が発生し、イベント処理が中止されます。複数のstore要素を宣言して、同一または異なるストアから異なるデータ型の値を返すことができます。

19.2.2 Oracle CQLでのNoSQLデータの使用

NoSQL Databaseをイベント処理ネットワークに統合すると、Oracle CQLコードからデータにアクセスできます。問合せでは、WHERE句で等価リレーションを指定することで、ストアのエントリを検索できます。

例19-2「NoSQL Databaseのデータを使用するOracle CQL問合せ」のOracle CQLコードでは、FROM句内のCustomerDescriptionが、例19-1「NoSQL Databaseを統合するEPN」に示すストア要素内のid属性値に対応します。

例19-2 NoSQL Databaseのデータを使用するOracle CQL問合せ

<n1:config
    xsi:schemaLocation="http://www.bea.com/ns/wlevs/config/application wlevs_application_config.xsd"
    xmlns:n1="http://www.bea.com/ns/wlevs/config/application"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <processor>
        <name>P1</name>
        <rules>
            <query id="q1"><![CDATA[     
                SELECT customerName, creditScore, price, item
                FROM S1 [Now], CustomerDescription as cust
                WHERE S1.userId = cust.userId
                AND creditScore 5
            ]]></query>
        </rules>
    </processor>
</n1:config>

この例では、S1チャネルおよびCustomerDescription NoSQLデータ・ソースのデータを表すイベント・タイプ・インスタンスは、どちらも『Oracle Fusion Middleware Oracle Event Processing開発者ガイドfor Eclipse』のイベント・タイプの定義と使用に関する項で説明されているようにJavaBeansクラスとして実装されます。どちらのイベント・タイプもJavaBeansクラスであるため、Oracle CQL問合せでは、イベントのユーザーIDとWHERE句内の顧客の説明のIDをどちらもJavaBeansプロパティとして扱って等価とすることで、特定のイベントに関連付けられた顧客の説明にアクセスできます。

WHERE S1.userId = CustomerDescription.userId

この句では、イベントのuserIdフィールドの値で指定されたキーを持つストアからエントリを取得することを要求します。ストアからのエントリ取得では、等価リレーションのみがサポートされます。

ストアからエントリが選択されると、そのストアから取得された値のフィールドは、問合せのSELECTの部分、またはWHERE句内の追加の句で参照することができます。

SELECT句で指定したcreditScore値では、ストアから取得したCustomerDescriptionオブジェクトのcreditScoreフィールドの値が問合せの出力に含まれます。WHERE句のcreditScoreに対する参照でも、問合せはCustomerDescription creditScoreフィールドの値が5より大きいイベントにさらに制限されます。

19.2.2.1 NoSQLストアからのエントリ取得に使用されるキーの書式設定

ストアからのエントリ取得に使用されるキーは、値をスラッシュ(/)で始めるか、スラッシュを省略するかのいずれかの方法で書式を設定できます。

等価リレーションの左側に指定した値がスラッシュで始まる場合、キーは1つ以上の主要コンポーネントを(必要な場合はマイナー・コンポーネントも)指定するフル・キーとして扱われます。キー・パスの構文の詳細は、http://docs.oracle.com/cd/NOSQL/html/javadoc/index.htmlのOracle NoSQL Database APIドキュメントにあるoracle.kv.Keyクラスに関する情報を参照してください。

たとえば、SalesEventオブジェクトのuserIdフィールドに値"/users/user42/-/custDesc"がある場合、その値はusersを1つ目の主要コンポーネントとして、ユーザーIDのuser42を2つ目の主要コンポーネントとして、そしてcustDescというマイナー・コンポーネントを指定するフル・キー・パスとして処理されます。

便宜上、等価リレーションの左側に指定した値がスラッシュで始まっていない場合は、キー全体を構成する1つの主要コンポーネントとして処理されます。

ストアからエントリを取得するために使用されるキーは、Oracle CQL問合せでアクセスされる1つのフィールドで完全な形で指定する必要があります。特に、複数のコンポーネントを指定したキー・パスがキー/値ストア内のエントリにアクセスするために必要な場合、問合せによってアクセスされる1つのフィールドにフル・キー・パス式を格納する必要があります。