OBKV-Tableは、単一操作、バッチ操作、クエリ操作の3種類をサポートしています。
ヒープ組織テーブルでサポートされていないインターフェース
ヒープ組織テーブルは、以下のインターフェースをサポートしていません:
putbatchPutupdatebatchUpdateincrementbatchIncrementappendbatchAppenddeletegetbatchGetdeletebatchDeletecheckAndInsUpcheckAndInsUpBatch
単一操作
単一操作の各インターフェースは、最大で1件のレコードを操作します。単一操作では、必ずRowkeyを設定する必要があります。
基本単一操作
操作 |
説明 |
|---|---|
| insert | insertは単一行データ挿入を行い、主キー列を指定する必要があります。 1. その行が存在しない場合、その行を挿入します。 2. 存在する場合、挿入に失敗します。 |
| put | putは上書きを行い、主キー列を指定する必要があります。 1. その行が存在しない場合、その行を挿入します。 2. 存在する場合、既存の行を上書きします。 |
| get | getは単一行データ取得を行い、主キー列を指定する必要があります。 クエリ列(Select Column)が指定されていない場合、デフォルトですべての列をクエリします。 |
| update | updateは単一行データ更新を行い、主キー列を指定する必要があります。同時に条件更新も可能で、主キー以外の列に条件を指定し、条件を満たす場合にのみ更新操作を実行します。 |
| delete | deleteは単一行データ削除を行い、主キー列を指定する必要があります。また、条件削除も可能で、主キー以外の列に条件を指定し、条件を満たす行を削除します。 |
複合単一操作
操作 |
機能 |
|---|---|
| insertOrUpdate | insertOrUpdateは挿入または更新を行います。 1. 主キー列を指定する必要があります。該当行が存在しない場合、その行を挿入します。 2. 存在する場合、既存の行を更新します。 |
| increment | incrementは整数型列に値を加算する操作です。主キー列と、値を加算する列を指定する必要があります。incrementでは条件を指定することもでき、条件を満たす行に対してのみincrement操作が実行されます: 1. 指定した行が存在しない場合、その行を挿入し、incrementを行う列の初期値を加算値に設定します。 2. その行が存在し、incrementを行う列の現在の値がNULLの場合、その列の値を加算値に更新します。 |
| append | appendは文字型列に文字列を追加する操作です。主キー列と、文字列を追加する列を指定する必要があります。appendでも条件を指定することができ、条件を満たす行に対してのみappend操作が実行されます: 1. 指定した行が存在しない場合、その行を挿入し、appendを行う列の初期値を追加文字列に設定します。 2. その行が存在し、appendを行う列の現在の値がNULLの場合、その列の値を追加文字列に更新します。 |
| checkAndInsertup | checkAndInsertupは条件付き更新を行います。 1. checkExistパラメータが trueの場合、条件に合致する行が存在する場合は、指定されたInsertUp操作を実行します。存在しない場合は、何もしません。2. checkExistパラメータがfalseの場合、条件に合致する行が存在しない場合は、指定されたInsertUp操作を実行します。存在する場合は、何もしません。 3. rollbackWhenCheckFailedパラメータが trueの場合、checkに失敗した場合、ObTableException例外をスローします。例外のmessageは[-10518][OB_KV_CHECK_FAILED][Check failed in checkAndInsUp]です。 |
バッチ操作
OBKV-Tableは、上記の基本単一操作および複合単一操作のバッチをサポートしています:
- 1つのBatch内ですべて同一の操作を実行することができます。例:一括挿入。
- 1つのBatch内で上記に列挙された異なる単一操作を混在させて実行することができます。
クエリ
OBKV-Tableにおいて、クエリと単一操作の意味上の違いは、クエリが複数のデータにアクセスできるのに対し、単一操作は最大でも1つのデータにしかアクセスできないことです。典型的なクエリには、主に以下の部分が含まれます:
- Select:ビジネスシナリオで実際に必要な列。不要な列を過剰に返さないように選択することを推奨します。そうでない場合、CPU/メモリ/ネットワークリソースを消費します。
- ScanRange:クエリの範囲。
- Index:使用するインデックスを明示的に指定します。
- Filter:クエリのフィルタ条件。
- Limit:クエリで返すデータ件数。
インデックス
OBKV-Tableはローカルインデックスとグローバルインデックスをサポートしています。
インデックスとクエリ
- インデックスはクエリ内でのみ使用できます。
- インデックスに基づく行クエリでは、ベーステーブルのすべての列にアクセスできます。しかし、クエリの列がインデックスに存在しない場合は、ベーステーブルに追加でアクセスする必要があり、コストがかかります。インデックスを設計する際は、ビジネスの実際のクエリシナリオを十分に考慮する必要があります。
- インデックスを使用する場合は、明示的に指定する必要があります。
ローカルインデックスとグローバルインデックス
ローカルインデックスとグローバルインデックスの主な違いは以下のとおりです:
- パーティションキーがベーステーブルと一致するかどうか:一致する場合はローカルインデックス、一致しない場合はグローバルインデックスです。
- インデックスのメンテナンスコストが異なる:データを1件書き込む際、ローカルインデックスではパーティションキーが同じため、書き込むベーステーブルの行とインデックスの行は同一ノード上にあり、単一ノード内のトランザクションとなります。グローバルインデックスでは、ベーステーブルの行とインデックスの行が分散アーキテクチャでは同一ノード上にある可能性が低く、分散トランザクションとなる可能性が高く、コストが高くなります。
注意点:
- グローバルインデックスの使用は推奨されません。グローバルインデックスはサーバー側で分散トランザクションを発生させるため、レイテンシやスループットに大きな影響を与えます。
- ローカルインデックスを計画する際には、インデックスのメンテナンスコストも重要な検討事項です。例えば、インデックスを作成すると、ベーステーブルとインデックステーブルの両方を同時にメンテナンスする必要があり、ストレージへの書き込み量が増加し、レイテンシとスループットに影響を与え、ストレージ使用量にも影響します。
Filter
論理演算子
OBKV-Tableがサポートする論理演算子は以下のとおりです:
演算子 |
説明 |
オプション値 |
|---|---|---|
| AND | 論理積。2つのFilterを満たす必要があります。 | operator.AND |
| OR | 論理和。2つのFilterのうち、いずれか一方を満たせばよいです。 | operator.OR |
比較演算子
OBKV-Tableがサポートする比較演算子は以下のとおりです:
演算子 |
説明 |
サポートする型 |
|---|---|---|
| > | より大きい | OBKV-Tableでサポートされているデータ型を参照 |
| >= | 以上 | |
| < | より小さい | |
| <= | 以下 | |
| != | 等しくない | |
| = | 等しい | |
| IS NULL | NULLである | NULL型のみサポート |
| IS NOT NULL | NULLではない |
集計
OBKV-Tableがサポートする集計関数は以下のとおりです:
関数 |
説明 |
パラメータタイプ |
結果タイプ |
|---|---|---|---|
| COUNT | 件数 | 任意型 | BIGINT |
| SUM | 合計 | 整数型/浮動小数点数型 | BIGINT/DOUBLE |
| MAX | 最大値 | 数値型、文字型、日付型、またはその他比較可能な型のデータ列 | パラメータと同じ |
| MIN | 最小値 | 数値型、文字型、日付型、またはその他比較可能な型のデータ列 | パラメータと同じ |
| AVG | 平均値 | 整数型/浮動小数点数型 | BIGINT/DOUBLE |
注意
- OBKV-Tableの集計操作は、フィルター関数に基づく特殊なクエリであり、集計関数の意味に従って特定の結果を返します。大量の生データを返すものではありません。
- OBKV-Tableの集計操作は大量のデータをスキャンし、多くのI/Oリソースを消費します。慎重に使用してください。