この章の内容は次のとおりです。
注意:
CohQL構文はSQLによく似ているように見えますが、この構文はSQLではなく、実際には文脈的にJava Persistence問合せ言語(JPQL)の標準の方に関連している点に注意してください。
連続問合せ言語(CQL: Continuous Query Language)は、複合イベント処理(CEP: Complex Event Processing)に関連した問合せ言語です。CohQLと混同しないようにしてください。
次の各項では、CohQLの機能について説明します。各項では、特に記述文、その構文、および例について説明します。問合せの例は、その他のCoherenceの問合せ言語の例を参照してください。
注意:
CohQLでは、副問合せはサポートされません。
この項には次のトピックが含まれます:
詳細は、Coherence問合せ文、句、式をアルファベット順に示している表28-1を参照してください。
表28-1 Coherenceの問合せ言語の文
| この文、句、または式 | 参照先の項 |
|---|---|
ARCHIVE SNAPSHOT |
|
バインド変数 |
|
CREATE CACHE |
|
CREATE INDEX |
|
CREATE SNAPSHOT |
|
DELETE |
|
DROP CACHE |
|
DROP INDEX |
|
ENSURE CACHE |
|
ENSURE INDEX |
|
GROUP BY |
|
INSERT |
|
key()擬似関数 |
|
LIST [ARCHIVED] SNAPSHOTS |
|
LIST ARCHIVER |
|
パス式 |
|
RECOVER SNAPSHOT |
|
REMOVE [ARCHIVED] SNAPSHOT |
|
RESUME SERVICE |
|
RETRIEVE ARCHIVED SNAPSHOT |
|
SELECT |
|
SOURCE |
|
SUSPEND SERVICE |
|
UPDATE |
|
VALIDATE ARCHIVED SNAPSHOT |
|
VALIDATE SNAPSHOT |
|
value()擬似関数 |
|
WHENEVER COHQLERROR THEN [EXIT|CONTINUE] |
|
WHERE |
この項では、構文の一部の構成要素(パス式、バインド変数、擬似関数など)について説明します。
CohQLのメインの構成要素にパス式があります。パス式は、オブジェクトのインスタンスのグラフを介して移動する際に使用されます。パス式の識別子を使用して、Java Bean感覚でプロパティを表現します。これは、先頭にgetを付加し、最初の文字を大文字にして作成される、ReflectionExtractorによってバッキングされます。各要素は「ドット」(.)文字で区切られ、オブジェクトのトラバースを表現しています。たとえば、次のパス式はオブジェクト構造を移動するのに使用します。
a.b.c
これは反射的に次のメソッドを起動します。
getA().getB().getC()
プログラム的に使用する場合には、APIは文字列を単純な一連の問合せ関数に渡します。文字列連結を行わずに変数の値を渡すには、バインド変数を使用します。バインド変数には、2つの異なる形式があります。
疑問符(?): 疑問符を入力する場所は、位置を示すプレースホルダーを表す数字の直後です。このプレースホルダーにより、問合せを実行する前に提供されたオブジェクトのコレクションの索引が作成されます。この形式の構文は、?nで、この場合nに任意の数字を使用できます。位置を示すバインド変数は、フィルタの構成でQueryHelperクラスによって使用されます。次に例を示します。
QueryHelper.createFilter("number = ?1" , new Object[]{new Integer(42)};
コロン(:): コロンを入力する場所は、キー値のペアとして提供されるオブジェクトの名前付きプレースホルダーとして使用される識別子の直後です。この構文は、:identifierで、この場合identifierは英数字の組合せで、アルファベット文字で開始します。名前付きのバインド変数は、フィルタの構成でQueryHelperクラスによって使用されます。次に例を示します。
HashMap env = new HashMap();
env.put("iNum",new Integer(42));
QueryHelper.createFilter("number = :iNum" , env};
QueryHelperクラスとフィルタのプログラム的な構成の詳細は、Javaプログラムにおけるフィルタの作成を参照してください。
多くのユーザーがオブジェクトをkeyプロパティで格納するため、CohQLでは、key()擬似関数が用意されています。key()はキャッシュのキーを表しています。問合せ構文でもvalue()擬似関数が用意されています。value()は、key()で開始されない連鎖内では暗黙的です。key()擬似関数とvalue()擬似関数は、通常、WHERE句で使用され、この句ではキーやキャッシュ・エントリの値がテストされます。key()とvalue()の使用例は、KeyおよびValue擬似関数の例およびコマンド行の例を参照してください。
意味的には必要はありませんが、CohQLはコード・アーティファクトをできるだけJPQLへ移植できるようにするために別名をサポートしています。CohQLは、キャッシュ名と、SELECTコマンド、UPDATEコマンド、DELETEコマンドのドット付きパス式の先頭に続く別名をサポートします。CohQLでは、キャッシュの別名をvalue()擬似関数の代用およびkey()擬似関数に対する引数として使用することも可能です。
次の項では、キャッシュの作成と削除の方法を説明します。
新しいキャッシュを作成する場合はCREATE CACHE文を、既存のキャッシュに接続する場合はENSURE CACHE文をそれぞれ使用します。この文は、まず指定されたcache-nameでキャッシュへの接続を試行します。キャッシュがクラスタ内に見つからない場合は、現在のキャッシュ構成ファイルに基づいて、指定された名前でキャッシュの作成が試行されます。この文は、コマンド行で特に有用です。この文をプログラムで使用している場合、名前のかわりにサービスとクラスローダーの情報を指定するオプションがあります(クラスローダーにはコマンド行からはアクセスできません)。
注意:
文では、キャッシュ名とサービス名を引用符(二重引用符(" ")または一重引用符(' '))で囲む必要があります。
構文は次のとおりです。
[ CREATE | ENSURE ] CACHE "cache-name" [ SERVICE"service-name"]
次に例を示します。
deptという名前のキャッシュを作成します。
create cache "dept"
DROP CACHE文を使用して、指定したキャッシュをクラスタから完全に削除します。キャッシュは、Java destroy()メソッドへのコールによって削除されます。いずれかのクラスタ・メンバーが、削除されたキャッシュへの参照を保持してそれになんらかの操作の実行を試行すると、そのメンバーはIllegalStateExceptionを受け取ります。Coherence問合せのDROP CACHE文の構文は、次のとおりです。
DROP CACHE "cache-name"
次に例を示します。
ordersキャッシュをクラスタから削除します。
drop cache "orders"
注意:
BACKUP CACHE文は非推奨になりました。かわりに、永続性文を使用します。永続性文の詳細は、ディスクへのキャッシュの永続化を参照してください
BACKUP CACHE文を使用して、指定されたキャッシュのシリアライズ表現を、指定されたfilenameで表示されたファイルに書き込みます。filenameは、オペレーティング・システム固有のパスであり、一重または二重引用符で囲む必要があります。BACKUP CACHE文は、コマンド行ツールでのみ使用できます。構文は次のとおりです。
BACKUP CACHE "cache-name" [ TO ] [ FILE ] "filename"
注意:
バックアップ(および後続のリストア)機能は、開発およびテスト環境で使用されるように設計されており、データの整合性を確認するプロビジョニングがないため、本番のデータ・セットでは使用しないでください。この機能は、本番のバックアップ、スナップショット、またはチェックポイント・ユーティリティとしてサポートされていません。
具体的には、次のとおりです。
バックアップは、クラスタ内のシングル・ノードでのみ動作するため、低速です。
バックアップはアトミックではありません。つまり、バックアップ中に発生した要素への変更が反映されず、データの読取りで内容が保証されない結果になります。
エラーが発生して不完全なバックアップとなった場合、バックアップは停止します。そのような場合には、エラーを説明するIOExceptionがスローされます。
バックアップは、3.xから12.1.xまでの前方互換性および後方互換性はありません。
次に例を示します。
deptキャッシュのシリアライズ表現をtextfileファイルに書き込みます。
backup cache "dept" to file "textfile"
注意:
RESTORE CACHE文は非推奨になりました。かわりに、永続性文を使用します。永続性文の詳細は、ディスクへのキャッシュの永続化を参照してください
RESTORE CACHE文を使用して、指定されたキャッシュのシリアライズ表現を、指定されたfilenameで表示されたファイルから読み取ります。filenameは、オペレーティング・システム固有のパスであり、一重または二重引用符で囲む必要があります。RESTORE CACHE文は、コマンド行ツールでのみ使用できます。構文は次のとおりです。
RESTORE CACHE"cache-name" [ FROM ] [ FILE ] "filename"
注意:
Coherenceのバージョン3.xから12.1.xまでは、バックアップをリストアできません。
次に例を示します。
deptキャッシュをtextfileファイルからリストアします。
restore cache "dept" from file "textfile"
次の項では、SELECT文およびWHERE句について説明します。これらのエンティティは、ほとんどのキャッシュ問合せの基本的な構成要素です。
SELECT文は、問合せの基本的な構成要素で、キャッシュからデータを取得します。句は、単純なまたは複雑なパス表現、主要な式、変形関数、複数の式、集計関数などのいくつかの形式を取ることができます。SELECT文は、別名の使用もサポートします。
SELECT文の形式は、次のとおりです。
SELECT (properties* aggregators* | * | alias) FROM "cache-name" [[AS] alias] [WHERE conditional-expression] [GROUP [BY] properties+]
アスタリスク(*)文字は、サブパスのかわりに完全なオブジェクトを表します。cache-nameを持つパスを接頭辞として指定する必要はありません。SELECT文のFROM部分は、問合せによりその結果が引き出されるドメインを形成するキャッシュをターゲットとします。cache-nameは、既存のキャッシュの名前です。
その他の例は、フィルタを強調表示する単純なSELECT * FROM文を参照してください。
次に例を示します。
キャッシュのdeptから項目を選択します。
select * from "dept"
WHERE句を使用して、結果セットから返されるエントリをフィルタリングします。CohQLの主要機能の1つは、パス式を使用して、式の評価の際にオブジェクト構造を移動できることです。条件式では、論理演算子、比較式、フィールドのプリミティブおよび関数演算子などを使用できます。
WHERE句のリテラル構文では、一重引用符を使用して、文字列のリテラルを囲むことができます。その引用符の前に別の一重引用符を接頭辞にして、文字列内でエスケープできます。数式は、Javaプログラミング言語の表記規則に従って定義されます。ブール値は、リテラルのTRUEとFALSEで表されます。日付リテラルはサポートされていません。
注意:
CohQLには、型情報に対するアクセス権が付与されていません。ゲッターがリテラルのタイプとは異なる数値型を返した場合、比較の演算子のtrueを想定した部分にfalseを取得することがあります。これを回避するには、リテラルの型で、longにはlを、doubleにはdを、またshortにはsを指定します。デフォルト値は、ピリオド(.)なしのリテラルに対してはIntegerで、ピリオド(.)付きのリテラルに対してはFloatです。
WHERE句内の演算子の優先度は、次のとおりです。
パス演算子(.)
単項の+および-
乗算(*)および除算(/)
足し算(+)および引き算(-)
比較演算子: =、>、>=、<、<=、<>、[NOT] BETWEEN、[NOT] LIKE、[NOT] IN、IS [NOT] NULL、CONTAINS [ALL|ANY]
論理演算子(AND、OR、NOT)
WHERE句は、言語レベルで算術のみをサポートします。
BETWEEN演算子を条件式で使用して、式の結果が値の包括範囲内に含まれるかどうかを判断できます。数値の式、または文字列の式は、この方法で評価できます。形式は、BETWEEN lower AND upperとなります。
LIKE演算子は、_および%のワイルドカードを使用できます。ワイルドカード_は正確に1文字と一致させるために使用され、ワイルドカード%は任意の文字のゼロ回以上の出現と一致させるために使用されます。ワイルドカードをエスケープするには、escapeキーワードを使用して定義されたエスケープ文字をワイルドカードの前に置きます。次の例では、k%1という名前のキーを選択するために、\エスケープ文字を使用してワイルドカード%をエスケープします。
SELECT key(),value() FROM mycache WHERE key() LIKE "k\%1" escape "\"
さらに、任意の文字をエスケープ文字として定義できます。次に例を示します。
SELECT key(),value() FROM mycache WHERE key() LIKE "k#%1" escape "#"
IN演算子では、単一の値のパス式がコレクションのメンバーかどうかを確認できます。このコレクションは、インラインリストとして定義されているか、バインド変数として表されています。インラインリストの構文は、次のとおりです。
"("literal*")"
CONTAINS [ALL|ANY]は、Coherenceデータ・モデルで通常非正規化データが使用されるため、非常に便利な演算子です。CONTAINS演算子では、多値のパス式に指定した値が含まれているどうかを判断できます。次に例を示します。
e.citys CONTAINS "Boston"
CONTAINSのALLおよびANY形式は、IN演算子と同じ構文を持つインラインリストまたはバインド変数となります。
注意:
Coherenceで用意されているプログラムのAPIを使用すると、WHERE句の条件式構文に基づいたスタンドアロンのCoherenceフィルタを作成できます。Javaプログラムにおけるフィルタの作成を参照してください。
その他の例は、フィルタを強調表示する単純なSELECT * FROM文を参照してください。
次に例を示します。
キャッシュdept内のすべての項目を選択します。ここでは、deptnoキーの値が10になります。
select * from "dept" where deptno = 10
次の項では、キャッシュ・データの挿入および削除、結果セットのフィルタリングなど、キャッシュ内のデータの操作方法を説明します。
集計の問合せは、SELECT問合せの変動要素です。結果をグループ化して集計関数を適用し、結果に関するサマリー情報を取得する場合には、集計の問合せを使用します。問合せに集計関数を使用しているか、GROUP BY句が含まれる場合には、問合せは集計の問合せと見なされます。集計の問合せの最も一般的な形式では、1つ以上のグループ化の式の後にGROUP BY句内の同じリード・グループ化の式と組み合せられたSELECT句の集計関数が続く形式が使用されます。
CohQLがサポートする集計関数は、COUNT、AVG、MIN、MAX、およびSUMです。これらの関数は、Double、LongおよびBigDecimal型に対して使用できます。型を指定するには、型の後にアンダースコア(_)を付けた接頭辞を関数に含めます。次に例を示します。
long_sum, bd_sum
明示的に型が指定されていない場合は、Double型であると見なされます。
その他の例は、予測、集計、グループ化を扱う複雑な問合せを参照してください。
次に例を示します。
supplierでグループ化されたordersキャッシュからの項目に対して、合計amountおよび平均priceを選択します。
select supplier,sum(amount),avg(price) from "orders" group by supplier
supplierでグループ化されたordersキャッシュからの項目に対して、(BigDecimal型を使用して)合計amountおよび平均priceを選択します。
select supplier,bd_sum(amount),bd_avg(price) from "orders" group by supplier
UPDATE文を使用して、キャッシュ内の既存の値を変更します。構文は次のとおりです。
UPDATE "cache-name" [[AS] alias] SET update-statement {, update-statement}* [ WHERE conditional-expression ]
各update-statementは、パス式、割当て演算子(=)および式で構成されています。割当て文に対する式の選択は制限されています。割当ての右側は、リテラル、バインド変数、静的メソッド、またはリテラルかバインド変数のみでの新規Javaコンストラクタに決定する必要があります。UPDATE文は、別名の使用もサポートします。
追加の例は、UPDATEの例を参照してください。
次に例を示します。
employeesキャッシュでグレード7以上のランクの従業員の場合、給与を1000に、休暇時間を200に更新します。
update "employees" set salary = 1000, vacation = 200 where grade > 7
INSERT文を使用して、指定されたKEYの下に指定されたVALUEを格納します。KEY句が提供されていない場合には、新しく作成したオブジェクトに対してメッセージgetKey()が送信されます(可能な場合)。そうでない場合、valueオブジェクトがキーとして使用されます。
INSERT文はObjectsのMaps上で機能する点に注意してください。構文は次のとおりです。
INSERT INTO "cache-name" [ KEY (literal | new java-constructor | static method) ] VALUE (literal | new java-constructor | static method)
次に例を示します。
キーwriterを値Davidとともにemployeeキャッシュに挿入します。
insert into "employee" key "writer" value "David"
DELETE文を使用して、キャッシュ内の指定されたエントリを削除します。構文は次のとおりです。
DELETE FROM "cache-name" [[AS] alias] [WHERE conditional-expression]
DELETE文のWHERE句は、SELECT文の場合と同様に機能します。すべてのconditional-expressionsは、削除するエンティティのセットをフィルタする際に使用できます。DELETE文は、別名の使用もサポートします。
注意:
WHERE句が存在しない場合には、指定したキャッシュ内のすべてのエントリが削除されます。
次に例を示します。
bar.writerキーがDavidでないemployeeキャッシュからエントリを削除します。
delete from "employee" where bar.writer IS NOT "David"
次の項では、キャッシュ・データの索引の作成と削除の方法を説明します。索引により、Coherenceの組込みオプティマイザがさらに迅速かつ効率的に問合せを分析して、結果を返すことができるようになります。
CREATE INDEXまたはENSURE INDEXを使用して、特定されたキャッシュに索引を作成します。構文は次のとおりです。
[ CREATE | ENSURE ] INDEX [ON]"cache-name" (value-extractor-list)
value-extractor-listは、パス式を使用してValueExtractorsを作成する、カンマ区切りのリストです。複数の要素が存在する場合、MultiExtractorが使用されます。KeyExtractorを作成するには、key()擬似関数を使用してパス式を開始します。
索引の自然な順序が適用されます。
次に例を示します。
ordersキャッシュ内の属性lastnameで索引を作成します。
create index "orders" lastname
次の項では、複数の問合せ文を効率的にキャッシュへ発行する方法を説明します。
SOURCE文では、文の「バッチ」処理が可能です。SOURCE文は、指定されたfilenameで表示されたファイルから1つ以上の問合せ文を開いて読み取ります。filenameは、オペレーティング・システム固有のパスであり、一重または二重引用符で囲む必要があります。ファイル内の各問合せ文は、セミコロン(;)で区切る必要があります。ソーシングはコマンド行ツールでのみ使用でき、コマンドの順序で構成されるファイルをロードできます。ソース・ファイルは、そのソースが他のファイルの場合もあります。構文は次のとおりです。
SOURCE FROM [ FILE ] "filename"
SOURCEは、@"filename"のように"at"記号(@)を使用して短縮できます。"ピリオド"記号の'.'は、コマンド行でのみ、'@'の省略として使用できますが、ファイル名を引用符で囲むことはできません。
次に例を示します。
command_fileファイルの文を処理します。
source from file "command_file"
または
@ "command_file"
または
. command_file
この項の文は、キャッシュのバックアップとリストアに使用されます。永続性文は、サービスに構成されている永続性設定に依存します。永続性機能および永続性の構成の詳細は、『Oracle Coherenceの管理』を参照してください。これらの文をスクリプトの一部として実行する方法の詳細は、コマンド行ツールの引数の使用を参照してください。
CREATE SNAPSHOT文は、サービスのデータ・パーティションをディスクに永続化します。構文は次のとおりです。
CREATE SNAPSHOT "snapshot-name" "service"
snapshot-name引数は、任意のユーザー定義名で、%y (年)、%m (月)、%d (日)、%hh (時間)、%mm (分)、%w (週日)、%M (月名)のマクロを含めることができます。service引数は、スナップショットが作成されるパーティション・キャッシュ・サービスまたはフェデレーテッド・キャッシュ・サービスの名前です。
次に例を示します。
Backupという名前のスナップショットをOrdersCacheServiceという名前のパーティション・キャッシュ・サービスに作成します。
create snapshot "Backup" "OrdersCacheService"
LIST SERVICES文を使用して、各サービスのアクティブなすべてのサービス、現在構成されている永続性モード、クォーラムおよびステータスを確認します。永続性環境構成の詳細を確認するには、ENVIRONMENTオプションを含めます。次に例を示します。
list services environment
VALIDATE SNAPSHOT文は、スナップショットが完了し、エラーがないかどうかをチェックする場合に使用されます。構文は次のとおりです。
VALIDATE SNAPSHOT ["snapshot-directory" | "snapshot-name" "service-name"] [VERBOSE]
snapshot-directory引数は、スナップショットのフルパスで、スナップショット名を含める必要があります。snapshot-name引数は、検証されるアーカイブ済のスナップショットの名前です。service-name引数は、スナップショットが作成されたパーティション・キャッシュ・サービスまたはフェデレーテッド・キャッシュ・サービスの名前です。snapshot-nameおよびservice-name引数が使用されている場合、場所が導出されます。デフォルトのスナップショットの場所はUSER_HOME/coherence/snapshotsです。詳細な検証情報を確認するには、VERBOSEオプションを使用します。VERBOSEオプションを指定する場合、スナップショットの各パーティションが開いて読み取られ、エントリの数と実際のサイズを含む、永続化されたキャッシュのサマリーが表示されます。索引、トリガー、ロックおよびリスナーの数の情報も表示されます。
次に例を示します。
Backupという名前のスナップショットを検証します。
validate snapshot "c:\coherence\snapshots\MyCluster\OrdersCacheService\Backup"
verbose
OrdersCacheServiceサービスによって管理される、Backupという名前のスナップショットを検証します。
validate snapshot "Backup" "OrdersCacheService" verbose
RECOVER SNAPSHOT文は、サービスのデータ・パーティションをディスクからリストアします。サービスのキャッシュ内の既存データが失われます。
注意:
スナップショットをリカバリすると、サービス内のキャッシュの現在の内容が削除されます。
構文は次のとおりです。
RECOVER SNAPSHOT "snapshot-name" "service"
snapshot-name引数は、リカバリするスナップショットの名前です。service引数は、スナップショットが作成されたパーティション・キャッシュ・サービスまたはフェデレーテッド・キャッシュ・サービスの名前です。サービスが明示的に一時停止されていない場合、サービスは一時停止し、スナップショットがリカバリされてサービスが再開されます。サービスの一時停止と再開の詳細は、永続性操作中のサービスの中断を参照してください。
次に例を示します。
OrdersCacheServiceという名前のパーティション・キャッシュ・サービスでBackupという名前のスナップショットをリカバリします。
recover snapshot "Backup" "OrdersCacheService"
LIST SNAPSHOTS文を使用して、使用可能なスナップショットのリストを確認します。次に例を示します。
list snapshots "OrdersCacheService"
ARCHIVE SNAPSHOT文は、スナップショットを中央の場所に保存します。場所は、サービスに関連付けられているスナップショット・アーカイバ定義で指定します。構文は次のとおりです。
ARCHIVE SNAPSHOT "snapshot-name" "service"
snapshot-name引数は、アーカイブするスナップショットの名前です。service引数は、スナップショットが作成されたパーティション・キャッシュ・サービスまたはフェデレーテッド・キャッシュ・サービスの名前です。
次に例を示します。
OrdersCacheServiceという名前のパーティション・キャッシュ・サービスでBackupという名前のスナップショットをアーカイブします。
archive snapshot "Backup" "OrdersCacheService"
LIST ARCHIVER文を使用して、サービスに現在関連付けられているスナップショット・アーカイバ定義の場所を表示します。次に例を示します。
list archiver "OrdersCacheService"
VALIDATE ARCHIVED SNAPSHOT文は、アーカイブされたスナップショットが完了し、エラーがないかどうかをチェックする場合に使用されます。構文は次のとおりです。
VALIDATE ARCHIVED SNAPSHOT "snapshot-name" "service-name" [VERBOSE]
snapshot-name引数は、検証されるアーカイブ済のスナップショットの名前です。service-name引数は、スナップショットが作成されたパーティション・キャッシュ・サービスまたはフェデレーテッド・キャッシュ・サービスの名前です。詳細な検証情報を確認するには、VERBOSEオプションを使用します。
注意:
クラスタ・オペレーション構成ファイルおよびキャッシュ構成ファイルは、定義済のスナップショット・アーカイバが見つかるように、クラスパスで使用可能にする必要があります。
アーカイブされたスナップショットの検証には、各パーティションの取得、内容の解凍および検証が含まれます。この操作(例: Windows環境ではTEMP環境変数)には、オペレーティング・システムのデフォルトのJava一時ディレクトリが使用されます。アーカイブされたスナップショットが大きい場合は、Djava.io.tmpdir=/pathを使用して、デフォルトのJava一時ディレクトリを変更することを検討してください。
次に例を示します。
Backupという名前のアーカイブ済スナップショットを検証します。
validate archived snapshot "Backup" "OrdersCacheService" verbose
RETRIEVE ARCHIVED SNAPSHOT文は、RECOVER SNAPSHOT文を使用してリカバリできるように、アーカイブされたスナップショットを取得する場合に使用されます。スナップショットのリカバリの詳細は、スナップショットのリカバリを参照してください。構文は次のとおりです。
RETRIEVE ARCHIVED SNAPSHOT "snapshot-name" "service" [OVERWRITE]
snapshot-name引数は、取得するアーカイブ済のスナップショットの名前です。service引数は、スナップショットが作成されたパーティション・キャッシュ・サービスまたはフェデレーテッド・キャッシュ・サービスの名前です。同じ名前が永続性スナップショット・ディレクトリにすでに存在する場合は、OVERWRITEオプションを使用します。
次に例を示します。
OrdersCacheServiceという名前のパーティション・キャッシュ・サービスで、Backupという名前のアーカイブ済スナップショットを取得し、既存のスナップショットを上書きします。
retrieve archived snapshot "Backup" "OrdersCacheService" overwrite
ARCHIVEDオプションを指定してLIST SNAPSHOTS文を使用し、使用可能なアーカイブ済みのスナップショットのリストを確認します。次に例を示します。
list archived snapshots "OrdersCacheService"
REMOVE SNAPSHOT文は、スナップショットまたはアーカイブされたスナップショットをディスクから削除する場合に使用されます。構文は次のとおりです。
REMOVE [ARCHIVED] SNAPSHOT "snapshot-name" "service"
snapshot-name引数は、削除するスナップショットの名前です。service引数は、スナップショットが作成されたパーティション・キャッシュ・サービスまたはフェデレーテッド・キャッシュ・サービスの名前です。ARCHIVEDオプションを使用して、アーカイブされたスナップショットを削除します。
次に例を示します。
Backupという名前のスナップショットをOrdersCacheServiceという名前のパーティション・キャッシュ・サービスから削除します。
remove snapshot "Backup" "OrdersCacheService"
Backupという名前のアーカイブ済スナップショットをOrdersCacheServiceという名前のパーティション・キャッシュ・サービスから削除します。
remove archived snapshot "Backup" "OrdersCacheService"
FORCE RECOVERY文を使用して、動的クォーラム・ポリシーに反している場合でも永続性リカバリを続行できます。動的クォーラム・ポリシーの詳細は、Oracle Coherenceの管理の動的リカバリ・クォーラム・ポリシーの使用に関する項を参照してください。注意:
永続性リカバリを強制すると、対応するキャッシュ・サービスにおいて部分的または完全にデータが失われる可能性があります。
FORCE RECOVERY "service"
service引数は、削除するパーティション・キャッシュ・サービスの名前です。
次に例を示します。
OrdersCacheServiceという名前のパーティション・キャッシュ・サービスのリカバリを強制します。
force recovery "OrdersCacheService"
SUSPEND SERVICEおよびRESUME SERVICEを使用して、永続性操作が非アクティブ・サービスで実行されることを確認します。一部の永続性操作では、サービスは自動的に一時停止し、文を実行すると再開されます。構文は次のとおりです。
[RESUME | SUSPEND] SERVICE "service"
service引数は、一時停止または再開するパーティション・キャッシュ・サービスの名前です。
注意:
一時停止したサービスにリクエストを送信するクライアントは、サービスが再開してリクエストが完了するまでブロックされます。サービスの再開を待機している間は、クライアントがブロックされないように、リクエスト・タイムアウトでサービスを構成できます。リクエスト・タイムアウトは、分散スキーム定義の<request-timeout>要素またはcoherence.distributed.request.timeoutシステム・プロパティを使用して構成できます。
次に例を示します。
OrdersCacheServiceという名前のパーティション・キャッシュ・サービスを一時停止します。
suspend service "OrdersCacheService"
OrdersCacheServiceという名前のパーティション・キャッシュ・サービスを再開します。
resume service "OrdersCacheService"
問合せのコストと効果を判断するために使用される問合せレコードを作成および出力するには、EXPLAIN PLAN FORおよびTRACEコマンドを使用します。問合せの実行レコードは、問合せ操作の一部としてフィルタの評価の見積もりコストを提供します。問合せのトレース・レコードは、問合せ操作の一部としてフィルタの評価の実コストを提供します。両方の問合せレコードでは、フィルタで索引が使用可能かどうかが考慮されます。問合せの実行レコードおよびトレース・レコードで提供されるデータに関する詳細は、問合せレコードの解析を参照してください。コマンドの構文は、次のとおりです。
問合せの実行計画:
EXPLAIN PLAN FOR select statement | update statement | delete statement
トレース:
TRACE select statement | update statement | delete statement
次に例を示します。
EXPLAIN PLAN FOR select * from "mycache" where age=19 and firstName=Bob
または
TRACE SELECT * from "MyCache" WHERE age=19
WHENEVER COHQLERROR THEN文は、文の実行中にエラーが発生した場合にCohQLで実行されるアクションを指定する場合に使用されます。この文は、CohQLがスクリプトの一部として使用される場合に役に立つことがあります。CohQL文をスクリプトの一部として実行する方法の詳細は、コマンド行ツールの引数の使用を参照してください。構文は次のとおりです。
WHENEVER COHQLERROR THEN [EXIT|CONTINUE]
次に例を示します。
検証スナップショット文が返され、エラーの場合は即座に終了します。
whenver cohqlerror then exit validate snapshot "/snapshots/MyCluster/DistCacheService/snapshot"
CohQLコマンド行ツールには、文をコマンド行から発行するキャッシュと相互作用する、非プログラム的方法が用意されています。このツールは、com.tangosol.coherence.dslquery.QueryPlusクラスを使用して操作できます。また便宜上、COHERENCE_HOME/bin/に配置された起動スクリプトを使用してこのツールを操作できます。このスクリプトは、Windows (query.cmd)でもUNIX (query.sh)でも使用できます。
スクリプトは、コンソール・モードでクラスタ・ノードを起動します。記憶域はノード上では有効化されていません。これは、本番環境での推奨設定で、ノードが記憶域有効化キャッシュ・サーバーを持つクラスタに参加することが前提となっています。ただし、単一の記憶域有効化ノードをテスト用に作成するには、スクリプト内のstorage_enabled設定をtrueに変更します。
注意:
構成の際には、起動スクリプトではデフォルトのオペレーション構成ファイル(tangosol-coherence.xml)とデフォルトのキャッシュ構成ファイル(coherence-cache-config.xml)が使用されます。これらのファイルは、クラスタの作成/参加およびキャッシュの構成の際にcoherence.jarに格納されます。Coherenceの構成の詳細は、構成の理解を参照してください。
スクリプトは、COHERENCE_HOME環境変数を設定するためのオプションを提供します。COHERENCE_HOMEがコンピュータで未設定の場合、スクリプト内のその環境変数をCoherenceのインストール場所に設定します。
CohQLは、コマンド履歴内で上矢印または下矢印を動かすなど、コマンド行編集の拡張機能にJLineを使用します。ただし、JLineはCohQLの使用には必要ありません。スクリプトは、COHERENCE_HOME/lib/ディレクトリ内に格納されているjline.jarライブラリを自動的に使用します。スクリプトのJLINE_HOME変数およびクラスパスを変更することで、別の場所を指定できます。JLineライブラリが見つからない場合、メッセージが表示され、CohQLはJLine機能なしで開始されます。
次の手順は、起動スクリプトを使用してCohQLコマンド行ツールの起動方法を示しています。この手順は、スクリプトのstorage_enabledがfalseに設定されていること(デフォルト)を前提としています。
CohQLコマンド行ツールには、CohQL>プロンプトが返す前に読み取られ、実行される一連の引数が組み込まれています。これは、スクリプトを大型のスクリプトの一部として使用する際に(ビルド・プロセスの一部としての使用、I/Oをパイピングするための使用など)有用です。CohQL>プロンプトでhelpと入力し、コマンド行ツール内の引数のヘルプを表示します。
表28-2 Coherenceの問合せ言語コマンド行ツールの引数
| 引数 | 説明 |
|---|---|
|
アプリケーション名をGARファイルに関連付けます。アプリケーション名は、同じユーザーで実行される他のアプリケーションから分離されるように、キャッシュとサービスのスコープ設定に使用されます。この引数が使用されるのは、 |
|
コマンド行引数の処理の後、コマンド行ツールを終了します。この引数は、標準の入力からリダイレクトする際には使用しないでください。使用すると、コマンド行の引数が処理を終了すると同時にツールが終了して、リダイレクトされた入力が読み取られません。 |
|
マルチテナント環境で使用するドメイン・パーティション名のカンマ区切りのリストを指定します。この引数が使用されるのは、 リストの最初のドメイン・パーティションがアーカイブ・ドメイン・パーティションとして自動的に選択され、キャッシュの作成時に使用されることに注意してください。異なるパーティションを選択するには、CohQLコマンド行からドメイン・パーティション文を使用して、パーティションを選択します。 ALTER SESSION SET DOMAIN PARTITON partition-name
|
|
コマンド行ツールを拡張言語モードで操作します。このモードにより、更新でオブジェクト・リテラルが許可され、コマンドを挿入できるようになります。使用法の詳細は、コマンド行のヘルプを参照してください。 |
|
指定したファイルの文を処理します。ファイル内の文は、セミコロン(;)で区切る必要があります。ファイルは、オペレーティング・システム固有のパスであり、一重または二重引用符で囲む必要があります。任意の数の |
|
CohQLを実行する前に、指定されたGrid ARchive (GAR)ファイルまたは展開されたGARファイル・ディレクトリをロードし、デフォルトのアプリケーション名を使用します。デフォルトのアプリケーション名は、親ディレクトリ名なしのGARファイル名です。 |
|
指定した文を実行します。文は一重または二重の引用符で囲む必要があります。任意の数の |
|
コマンド行ツールをサイレント・モードで操作して、無関係な用語を削除します。これにより、標準の入力( |
|
トレース・モードを有効にして、デバッグ情報を出力します。 |
|
CohQL文のタイムアウト値をミリ秒単位で指定します。 |
例
contactキャッシュ内のすべてのエントリを返し、そのエントリを標準出力に出力してコマンド行ツールを終了します。
query.sh -c -l "select * from contact"
dist-exampleキャッシュ内のすべてのエントリを返し、そのエントリ(余分な用語を削除)をmyOutputという名前のファイルに出力してコマンド行ツールを終了します。
query.cmd -s -c -l "select * from 'dist-example'" >myOutput
myStatementsという名前のファイルのすべてのセグメントを処理して、コマンド行ツールを終了します。
query.sh -c -f myStatements
myInputファイルからコマンドを読み取り、出力(余分な用語を削除)をmyOutputという名前のファイルに出力します。
query.sh -s <myInput >myOutput
コマンド行ツールを起動し、/applicationsディレクトリにある、contacts.garという名前のGARファイルからアプリケーション・アーティファクトをロードします。
query.sh -g /applications/contacts.gar
コマンド行ツールを起動し、/applicationsディレクトリにある、contacts.garという名前のGARファイルからアプリケーション・アーティファクトをロードします。アプリケーション名をHRContactsにスコープ設定します。
query.sh -g /applications/contacts.gar -a HRContacts
サービスのデフォルトのリクエスト・タイムアウト値は、サービスの<request-timeout>要素またはすべてのサービスのcoherence.distributed.request.timeoutシステム・プロパティのいずれかを使用して、値が明示的に設定されていないかぎり、無限大に設定されます。
CohQLコマンド行ツールは、現在のセッションで実行される文に適用されるタイムアウト値の設定に使用できます。コマンド行ツールのデフォルトのタイムアウト値は30秒です。文の実行時間が30秒を超えると、タイムアウト例外がスローされます。タイムアウト値を変更するには、次の2つの方法があります。
タイムアウト値をミリ秒単位で設定する場合は、-timeoutコマンド行引数が使用されます。次に例を示します。
query.sh -timeout 60000
ALTER SESSION文は、タイムアウトをデフォルト値または-timeout引数で指定された値から変更し、別のALTER SESSION文が実行されるまで、有効な状態のままになります。構文は次のとおりです。
ALTER SESSION SET TIMEOUT value
値は、ミリ秒の合計を指定する整数にできます。次に例を示します。
ALTER SESSION SET TIMEOUT 45000
値は、期間を指定する文字列にすることもできます。期間の文字列に使用する有効な値は、h (時間)、m (分)、s (秒)およびms (ミリ秒)です。次に例を示します。
ALTER SESSION SET TIMEOUT '5m 30s'
次に、Windowsでのコマンド行ツールの使用方法の例を示します。この例では、単一クラスタ・メンバーを想定しているため、起動スクリプト内のstorage_enabled設定はtrueに設定されています。この例はキャッシュの作成と削除、エントリの格納と取得、ディスクへのキャッシュの永続化を示します。また、key()およびvalue()という擬似関数の使用を強調します。
コマンド・プロンプトでquery.cmdスクリプトを起動する際に、Java環境、Coherenceのバージョンおよびエディション、Coherenceキャッシュ・サーバーに関する情報が表示されます。プロンプト(CohQL>)に問合せ文を入力します。
次のようにしてCohQLコマンド行ツールを起動します。
C:/coherence/bin/query.cmd
employeesという名前のキャッシュを作成します。
CohQL> create cache "employees"
エントリ(キーと値のペア)をキャッシュに挿入します。
CohQL> insert into "employees" key "David" value "ID-5070"
キャッシュにオブジェクトを挿入します。
CohQL> insert into "employees" value new com.my.Employee("John", "Doe",
"address", 34)
キーの値を変更します。
CohQL> update employees set value() = "ID-5080" where key() like "David"
キャッシュ内の値を取得します。
CohQL> select * from "employees"
存在しないキーの値を取得します。空の結果セットが返されます。
CohQL> select key(), value() from "employees" where key() is "Richard"
サービスのスナップショットを作成して、キャッシュをディスクにバックアップします。
CohQL> create snapshot "Backup" "DistributedCache"
キャッシュ内の既存のキーを削除します。空の結果セットが返されます。
CohQL> delete from employees where key() = "David"
employeesキャッシュの内容を削除します。空の結果セットが返されます。
CohQL> delete from "employees"
employeesキャッシュを破棄します。
CohQL> drop cache "employees"
employeesキャッシュを再作成します。
CohQL> create cache "employees"
バックアップからキャッシュの内容をリカバリします。
CohQL> recover snapshot "Backup" "DistributedCache"
employeesキャッシュ内のキーと値を取得します。削除されたキーと値が存在していることがわかります。
CohQL> select key(), value() from "employees"
employeesキャッシュを破棄します。
CohQL> drop cache "employees"
コマンド行ツールを終了します。
CohQL> bye
FilterBuilder APIは、Javaプログラム内から結果セットをフィルタリングする文字列指向の方法で、使用の際にはCoherence APIの詳細を覚える必要はありません。APIには、com.tangosol.util.QueryHelperクラスに過負荷のcreateFilterファクトリ・メソッドのセットが4つ用意されています。
次のリストは、createFilterメソッドの異なる形式について説明しています。渡された文字列は、Coherence問合せのWHERE句の構文(エントリの結果セットでのフィルタリングを参照)を使用しますが、リテラルのWHEREは使用しません。Object配列またはMapを指定する形式は、バインド変数で参照されるオブジェクトを渡すためのものです。各形式は用意されたCoherence問合せ文字列からフィルタを構築します。
public static Filter createFilter(String s): sは、Filterを表すCoherenceの問合せ内のStringです。
public static Filter createFilter(String s, Object[] aBindings): sは、FilterおよびaBindingsがバインド変数に使用するObjectsの配列であることを表すCoherenceの問合せ内のStringです。
public static Filter createFilter(String s, Map bindings): sは、Filterおよびbindingsがバインド変数に使用するObjectsのMapであることを表すCoherenceの問合せ内のStringです。
public static Filter createFilter(String s, Object[] aBindings, Map bindings): sは、Filter, aBindingsがバインド変数に使用するObjectsの配列であり、bindingsがバインド変数に使用するObjectsのMapであることを表すCoherenceの問合せ内のStringです。
これらのファクトリ・メソッドは、不具合、構文的に不正確な文、セマンティックなエラーがあると、FilterBuildingExceptionをスローします。この例外がRuntimeExceptionのサブクラスであるため、エラーの捕捉は必要ありませんが、エラーの捕捉をしないとプロセスが終了する可能性があります。
例
次の文では、メソッドのcreateFilter(String s)の形式を使用します。これはマサチューセッツ州に住み、別の州で働く従業員のフィルタを構築します。
..
QueryHelper.createFilter("homeAddress.state = 'MA' and workAddress.state != 'MA'")
...
この文は、Coherence APIを使用する次のフィルタ/エクストラクタと同じです。
AndFilter(EqualsFilter(ChainedExtractor(#getHomeAddress[], #getState[]), MA), NotEqualsFilter(ChainedExtractor(#getWorkAddress[], #getState[]), MA)))
QueryHelperクラスもcreateExtractorメソッドを提供し、それによりフィルタ構築時に値エクストラクタを作成できます。エクストラクタは、オブジェクトからの値の抽出(並べ替えやフィルタリングなど)とその抽出の識別の両方に使用されます。次の例は、索引作成時のcreateExtractorの使用を示しています。
cache.addIndex(QueryHelper.createExtractor("key().lastName"),/*fOrdered*/ true,
/*comparator*/ null);
この項では、その他の例を使用して、インスタンス化されたオブジェクト(Filters、ValueExtractors、Aggregatorsなど)によるそれらと同等のCoherence APIコールを示します。Filtersを強調する単純なselect *の例では、Filter部分のみに注目した場合、FilterBuilder APIの変換について理解できます。例の完全なセットを使用すると、QueryBuilder APIとコマンド行ツールの変換について理解できます。
この例では、識別子を修飾するキャッシュ名が削除されたパス構文の短縮された形式が使用されています。
例のJava言語形式でも、EntryProcessorsのかわりにReducerAggregatorが予測に使用されています。KeyExtractorの使用についても、Coherence 3.5ではReflectionExtractorに対する特定の変更を必要としなくなったことにも注意してください。
40がpriceキーの値より大きい、キャッシュordersから項目を選択します。
select * from "orders" where 40 > price
priceキーが100にまったく等しく、insuranceキーの値が10より小さいか、shippingキーの値が20以上である、キャッシュordersから項目を選択します。
select * from "orders" where price is 100 and insurance < 10 or shipping >= 20
priceキーが100にまったく等しく、insuranceキーの値が10より小さいか、またはshippingキーの値が20以上のいずれかである、キャッシュordersから項目を選択します。
select * from "orders" where price is 100 and (insurance < 10 or shipping >= 20)
priceキーの値が100に等しいか、barキーが20に等しい、キャッシュordersから項目を選択します。
select * from "orders" where price = 100 or shipping = 20
insuranceキーの値がnullでない、キャッシュordersから項目を選択します。
select * from "orders" where insurance is not null
emp_idキーが1から1000の値を持つか、bar.empキーが"Smith"でない、キャッシュemployeesから項目を選択します。
select * from "employees" where emp_id between 1 and 1000 or bar.emp is not "Smith"
itemキーが値"coat"に類似しているキャッシュordersから項目を選択します。
select * from "orders" where item like "coat%"
emp_idの値が5、10、15、または20のセット内にある、キャッシュemployeesから項目を選択します。
select * from "employees" where emp_id in (5,10,15,20)
emp_idがリスト5、10、15、および20を含む、キャッシュemployeesから項目を選択します。
select * from "employees" where emp_id contains (5,10,15,20)
emp_idが5、10、15、および20のすべての項目を含む、キャッシュemployeesから項目を選択します。
select * from "employees" where emp_id contains all (5,10,15,20)
emp_idが5、10、15、および20のいずれかの項目を含む、キャッシュemployeesから項目を選択します。
select * from "employees" where emp_id contains any (5,10,15,20)
fooキーの値が10より小さく、セット10、20で発生する、キャッシュemployeesから項目を選択します。
select * from "employees" where emp_id < 10 in (10,20)
キャッシュContactInfoCacheで従業員の家庭のstateとageを選択し、stateおよびageでグループ化します。
select homeAddress.state, age, count() from "ContactInfoCache" group by homeAddress.state, age
ordersキャッシュから擬似frobitキーを選択します。空の結果セットが返されます。
select frobit,supplier,sum(amount),avg(price) from "orders" group by supplier
$1000より大きいordersキャッシュ内の項目の場合、その項目、その価格と色を選択します。
select item_name,price,color from "orders" where price > 1000
ordersキャッシュから、項目に対する合計amountを選択します。Double型であると見なされます。
select sum(amount) from "orders"
ordersキャッシュから、項目に対する合計amountをLong型として選択します。
select long_sum(amount) from "orders"
ordersキャッシュから、項目に対する合計amountをBigDecimal型として選択します。
select bd_sum(amount) from "orders"
color属性がredまたはgreenである、ordersキャッシュから、項目に対する合計amountを選択します。
select sum(amount) from "orders" where color is "red" or color is "green"
ordersキャッシュからの項目に対して、合計amountおよび平均priceを選択します。
select sum(amount),avg(price) from "orders"
employeesキャッシュの可能な重複行からlastnameとcityのコピーを選択します。ここでは、stateはカリフォルニアです。
select distinct lastName,city from "employees" where state = "CA"
employeesキャッシュでランクがグレード7以上の従業員の場合、給与を10%ごと増加して、休暇を50時間追加します。
update "employees" set salary = salary*1.10, vacation = vacation + 50 where grade > 7
この項では、key()およびvalue()という擬似関数の使用方法の例を示します。その他の例は、コマンド行の例を参照してください。
ContactInfoCacheから、自宅の住所がマサチューセッツで勤務先は別の州である従業員を選択します。
select key().firstName, key().lastName from "ContactInfoCache" where homeAddress.state is 'MA' and workAddress.state != "MA"
ContactInfoCacheキャッシュから、年齢が42より高い従業員を選択します。
select key().firstName, key().lastName, age from "ContactInfoCache" where age > 42