プロキシモードのクラスターでは、TairVector がデータインデックス (TairVectorIndex) 上に構築されたグローバルインデックス (TairVectorGlobalIndex) を提供します。
概要
データインデックスに関連付けられると、グローバルインデックスは自動的に負荷分散を処理します。グローバルインデックスにデータを書き込むと、Tair はデータをクラスター内の異なるシャードにわたるデータインデックスに均等に分散します。クエリ実行時にも、グローバルインデックスは各データインデックスからの結果を集約し、最終的な統合結果を返します。グローバルインデックスのデータ構造は次のとおりです。
グローバルインデックスを作成後、TVS.EXPANDINDEXGLOBAL コマンドを使用して対応するデータインデックスを直接作成できます。または、TVS.IMPORTINDEXGLOBAL コマンドを使用して既存のデータインデックスをグローバルインデックスに関連付けることもできます。これらのデータインデックスは TVS.CREATEINDEX コマンドで作成済みである必要があり、そのメタデータはグローバルインデックスのものと一致している必要があります。関連付け後は、グローバルインデックスのみを操作すればよくなります。
データインデックスをグローバルインデックスから関連付け解除することもできます。
前提条件
注意事項
-
TVS.CREATEINDEXGLOBAL、TVS.EXPANDINDEXGLOBAL、または TVS.IMPORTINDEXGLOBAL コマンドを実行した後、グローバルインデックスは通常すぐに利用可能になります。ただし、ネットワーク遅延やバックグラウンド同期により、最大 30 秒程度の一時的な遅延が発生する場合があります。
-
データインデックスをグローバルインデックスから関連付け解除する前に削除しないでください。そうしないと、システムは
ERR there are vector indexes that don't exist, please check and retryエラーを返します。
コマンド
表 1. TairVector グローバルインデックスコマンド
|
タイプ |
コマンド |
構文 |
説明 |
|
インデックス操作 |
|
グローバルインデックスを作成し、インデックス構築およびクエリ用のアルゴリズムと距離関数を指定します。 |
|
|
|
グローバルインデックス内にデータインデックスを作成します。 |
||
|
|
既存のデータインデックスをグローバルインデックスにバインドします。既存のデータインデックスのメタデータは、グローバルインデックスのものと一致している必要があります。 |
||
|
|
1 つ以上のグローバルインデックスに関する情報を一覧表示します。 |
||
|
|
グローバルインデックスを 1 つ以上のデータインデックスから関連付け解除します。データインデックスを指定しない場合、このコマンドはグローバルインデックスを削除し、関連するすべてのデータインデックスの関連付けを解除します。 |
||
|
ベクトルデータ操作 |
|
データレコード (key で識別) をグローバルインデックスに挿入します。Tair は、データバランスを確保するためにキーを適切なデータインデックスに自動的に書き込みます。 |
|
|
|
グローバルインデックス内の指定された key のレコードについて、すべての属性と値を返します。 |
||
|
|
グローバルインデックス内の key について、1 つ以上の指定された attribute_key の値を返します。 |
||
|
|
フルインデックスから key で指定されたデータレコードを削除します。 |
||
|
|
フルインデックス内のデータレコード (key) から、指定された attribute_key とその値を削除します。 |
||
|
|
グローバルインデックス内で、指定された条件 (key) を満たすデータレコードをスキャンします。 |
||
|
ベクトル最近傍検索 |
|
グローバルインデックス内で指定されたベクトルの最近傍検索を実行し、最大 topN 件の結果を返します。 |
|
|
|
グローバルインデックス内で指定されたベクトルの最近傍を検索します。検索ロジックは TVS.KNNSEARCHGLOBAL と同じですが、このコマンドではタグ属性も返すことができます。 |
このトピックで使用されているコマンド構文の規則は次のとおりです。
大文字のキーワード: コマンドキーワードを示します。イタリック体のテキスト: 変数を示します。[オプション]: 角括弧で囲まれたパラメーターは省略可能であることを示します。角括弧で囲まれていないパラメーターは必須です。A|B: 縦棒 (|) で区切られたパラメーターは相互排他であることを示します。いずれか一方のみを指定できます。...: この記号の直前のパラメーターを繰り返し指定できることを示します。
TVS.CREATEINDEXGLOBAL
|
カテゴリ |
説明 |
|
構文 |
|
|
時間計算量 |
O(1) |
|
コマンドの説明 |
グローバルインデックスを作成し、インデックス構築およびクエリ用のアルゴリズムと距離関数を指定します。 グローバルインデックスは TVS.DELINDEXGLOBAL コマンドでのみ削除できます。 |
|
オプション |
|
|
戻り値 |
|
|
例 |
コマンド例:
すべての例で次の結果が返されます。
|
TVS.EXPANDINDEXGLOBAL
|
項目 |
説明 |
|
構文 |
|
|
時間計算量 |
O(1) |
|
コマンドの説明 |
グローバルインデックス内にデータインデックスを作成します。 作成する新しいデータインデックスの数を指定すると、Tair は自動的にそれらを作成および命名し、シャード間で均等に分散します。データインデックスのメタデータはグローバルインデックスのものと同一です。データインデックスはグローバルインデックスに関連付けられますが、Tair 内で独立して保存されます。 説明
グローバルインデックス内のデータインデックス数をインスタンスのシャード数に合わせることを推奨します。たとえば、Tair インスタンスに 3 つのシャードがあり、3 つのデータインデックスを作成する場合、Tair は各シャードに 1 つのデータインデックスを作成し、自動負荷分散を実現します。 |
|
パラメーター |
|
|
戻り値 |
|
|
例 |
例のコマンド:
例の出力:
|
TVS.IMPORTINDEXGLOBAL
|
項目 |
説明 |
|
構文 |
|
|
時間計算量 |
O(1) |
|
コマンドの説明 |
既存のデータインデックスをグローバルインデックスにバインドします。既存のデータインデックスのメタデータは、グローバルインデックスのものと一致している必要があります。 |
|
パラメーター |
|
|
出力 |
|
|
例 |
例のコマンド:
例の出力:
|
TVS.LISTINDEXGLOBAL
|
カテゴリ |
説明 |
|
構文 |
|
|
時間計算量 |
O(1) |
|
コマンドの説明 |
1 つ以上のグローバルインデックスに関する情報を一覧表示します。 |
|
パラメーター |
|
|
戻り値 |
|
|
例 |
コマンド:
出力:
|
TVS.DELINDEXGLOBAL
|
項目 |
説明 |
|
構文 |
|
|
時間計算量 |
O(1) |
|
コマンドの説明 |
グローバルインデックスを 1 つ以上のデータインデックスから関連付け解除します。データインデックスを指定しない場合、このコマンドはグローバルインデックスを削除し、関連するすべてのデータインデックスの関連付けを解除します。 説明
このコマンドはデータインデックスを削除しません。データインデックスを削除するには、TVS.DELINDEX コマンドを実行してください。 |
|
パラメーター |
|
|
戻り値 |
|
|
例 |
コマンド例:
例の出力:
|
TVS.HSETGLOBAL
|
カテゴリ |
説明 |
|
構文 |
|
|
時間計算量 |
ベクトルが作成または更新されない場合は O(1)。それ以外の場合は、O(log(N))。ここで N はベクトルインデックス内のキー数です。 |
|
コマンドの説明 |
データレコード (key で識別) をグローバルインデックスに挿入します。Tair は、データバランスを確保するためにキーを適切なデータインデックスに自動的に書き込みます。 レコードがすでに存在する場合、上書きされます。 |
|
パラメーター |
|
|
出力 |
|
|
例 |
例のコマンド:
例の出力:
|
TVS.HGETALLGLOBAL
|
項目 |
説明 |
|
構文 |
|
|
時間計算量 |
O(1) * M。ここで M はデータインデックスの数です。 |
|
コマンドの説明 |
グローバルインデックス内の指定された key のレコードについて、すべての属性と値を返します。 |
|
パラメーター |
|
|
出力 |
|
|
例 |
例のコマンド:
例の出力:
|
TVS.HMGETGLOBAL
|
項目 |
説明 |
|
構文 |
|
|
時間計算量 |
O(1) * M。ここで M は属性キーの数です。 |
|
コマンドの説明 |
グローバルインデックス内の key について、1 つ以上の指定された attribute_key の値を返します。 |
|
パラメーター |
|
|
出力 |
|
|
例 |
サンプルコマンド:
サンプル出力:
|
TVS.DELGLOBAL
|
項目 |
説明 |
|
構文 |
|
|
時間計算量 |
O(1) |
|
コマンドの説明 |
フルインデックスから key で指定されたデータレコードを削除します。 |
|
パラメーター |
|
|
戻り値 |
|
|
例 |
例のコマンド:
例の出力:
|
TVS.HDELGLOBAL
|
カテゴリ |
説明 |
|
構文 |
|
|
時間計算量 |
O(1) |
|
コマンドの説明 |
フルインデックス内のデータレコード (key) から、指定された attribute_key とその値を削除します。 |
|
パラメーター |
|
|
出力 |
|
|
例 |
例のコマンド:
例の出力:
|
TVS.SCANGLOBAL
|
項目 |
説明 |
|
構文 |
|
|
時間計算量 |
O(N)。ここで N はグローバルインデックス内のキー数です。 |
|
コマンドの説明 |
グローバルインデックス内で、指定された条件 (key) を満たすデータレコードをスキャンします。 1 回のスキャンで、Tair は 1 つのデータシャードからのみ結果を返します。 |
|
パラメーター |
|
|
戻り値 |
|
|
例 |
コマンド例:
返却例:
|
TVS.KNNSEARCHGLOBAL
|
カテゴリ |
説明 |
|
構文 |
|
|
時間計算量 |
N は各データインデックス内のキー数、M はデータインデックスの数です。 |
|
コマンドの説明 |
グローバルインデックス内で指定されたベクトルの最近傍検索を実行し、最大 topN 件の結果を返します。 たとえば、topN 件の結果をクエリする場合、Tair はまず各データインデックスから topN 件の結果を取得します。この時点で、最大 |
|
オプション |
|
|
戻り値 |
|
|
例 |
まず次のコマンドを実行します。
サンプルコマンド 1:
サンプル出力 1:
サンプルコマンド 2:
サンプル出力 2:
|
TVS.KNNSEARCHFIELDGLOBAL
|
項目 |
説明 |
|
構文 |
|
|
時間計算量 |
N はデータインデックス内のキー数、M はデータインデックスの数です。 |
|
コマンドの説明 |
グローバルインデックス内で指定されたベクトルの最近傍を検索します。検索ロジックは TVS.KNNSEARCHGLOBAL と同じですが、このコマンドではタグ属性も返すことができます。 |
|
オプション |
|
|
戻り値 |
|
|
例 |
まず次のコマンドを実行します。
例のコマンド:
例の出力:
|