この章では、Coherenceの問合せ言語(CohQL)を使用してCoherenceキャッシュと相互作用する方法について説明します。CohQLは、軽量な構文(SQLに似た)で、Coherenceクラスタ上でキャッシュ操作を実行するのに使用します。この言語は、プログラムからでも、コマンド行ツールからでも使用できます。
この章には次の項が含まれます:
注意:
|
次の各項では、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 |
|
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()
擬似関数に対する引数として使用することも可能です。
通常、リテラル引数(cache-name
またはservice-name
など)を引用符で囲む必要はありません。引数に演算子(-
、+
、.
、<
、>
、=
など)や空白が含まれる場合にのみ、引用符(一重または二重)が必要となります。
ファイル名も引用符で囲む必要があります。ファイル名には、通常、パス・セパレータ(/
または\
)およびドットが含まれ、名前が拡張子から区切られます。
コンパイラがunquotedリテラル引数、または問題のある文字が含まれるファイル名を発生する場合には、コンパイラはエラーをスローします。
次の項では、キャッシュの作成と削除の方法を説明します。
新しいキャッシュを作成する場合は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
文を使用して、指定されたキャッシュのシリアライズ表現を、指定されたfilename
で表示されたファイルに書き込みます。filename
は、オペレーティング・システム固有のパスであり、一重または二重引用符で囲む必要があります。BACKUP
CACHE
文は、コマンド行ツールでのみ使用できます。構文は次のとおりです。
BACKUP CACHE "cache-name
" [ TO ] [ FILE ] "filename
"
注意: バックアップ(および後続のリストア)機能は、開発およびテスト環境で使用されるように設計されており、データの整合性を確認するプロビジョニングがないため、本番のデータ・セットでは使用しないでください。この機能は、本番のバックアップ、スナップショット、またはチェックポイント・ユーティリティとしてサポートされていません。特に:
|
次に例を示します。
dept
キャッシュのシリアライズ表現をtextfile
ファイルに書き込みます。
backup cache "dept" to file "textfile"
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
オプションを使用します。
注意:
|
次に例を示します。
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"
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の構成の詳細は、第3章「構成の理解」を参照してください。 |
スクリプトは、COHERENCE_HOME
環境変数を設定するためのオプションを提供します。COHERENCE_HOME
がコンピュータで未設定の場合、スクリプト内のその環境変数をCoherenceのインストール場所に設定します。
CohQLは、コマンド履歴内で上矢印または下矢印を動かすなど、コマンド行編集の拡張機能にJLineを使用します。ただし、JLineはCohQLの使用には必要ありません。スクリプトは、COHERENCE_HOME
/lib/
ディレクトリ内に格納されているjline.jar
ライブラリを自動的に使用します。スクリプトのJLINE_HOME
変数およびクラスパスを変更することで、別の場所を指定できます。JLineライブラリが見つからない場合、メッセージが表示され、CohQLはJLine機能なしで開始されます。
次の手順は、起動スクリプトを使用してCohQLコマンド行ツールの起動方法を示しています。この手順は、スクリプトのstorage_enabled
がfalse
に設定されていること(デフォルト)を前提としています。
キャッシュ・サーバー・クラスタ・ノードを起動するか、既存のキャッシュ・サーバー・クラスタが起動していることを確認します。
キャッシュ・サーバー・クラスタ・ノードを起動するには、コマンド・プロンプトまたはシェルを開き、/bin
ディレクトリにあるキャッシュ・サーバー起動スクリプトを実行します(Windowsプラットフォームではcache-server.cmd
、UNIXプラットフォームではcache-server.sh
)。キャッシュ・サーバーが起動し、このクラスタ・メンバーに関する情報が出力されます。
コマンド・プロンプトまたはシェルを開き、/bin
ディレクトリにあるCohQLコマンド行起動スクリプトを実行します(Windowsプラットフォームではquery.cmd
、UNIXプラットフォームではquery.sh
)。Java環境に関する情報が表示されます。コマンド行ツール・プロンプト(CohQL>
)が返されます。
注意: 既存のキャッシュ・サーバー・ノードを結合する場合、起動スクリプトを変更して、同じキャッシュ構成を含む既存のキャッシュ・サーバー・ノードと同じクラスタ設定を使用します。コマンド行ツールの起動時に-g 引数を使用して、Grid ARchive (GAR)ファイルからCoherenceアーティファクトをロードすることもできます。コマンド行ツールの引数の詳細は、「コマンド行ツールの引数の使用」を参照してください。 |
コマンド行のヘルプを全部表示するには、プロンプトでhelp
と入力します。詳細な説明のないヘルプのリストを表示するには、commands
と入力します。
コマンド行ツールを用いる一連の問合せ文については、「コマンド行の例」を参照してください。
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
キャッシュの可能な重複行からlast
name
と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