TairVectorは、プロキシモードのクラスターインスタンスのデータインデックス (TairVectorIndex) に基づくグローバルインデックス (TairVectorGlobalIndex) を提供します。
概要
グローバルインデックスがデータインデックスに関連付けられた後、グローバルインデックスは自動的に負荷分散を実装できます。 グローバルインデックスにデータを書き込んだ後、Tairはクラスターインスタンス内の異なるシャード間でデータを均等に分散します。 クエリ中に、グローバルインデックスも各データインデックスからクエリ結果を自動的に集約し、最終結果を返します。 グローバルインデックスのデータ構造を次の図に示します。
グローバルインデックスを作成したら、TVS.EXPANDINDEXGLOBALコマンドを使用して、関連するデータインデックスを作成できます。 または、TVS.IMPORTINDEXGLOBALコマンドを使用して、既存のデータインデックスをグローバルインデックスに関連付けることもできます。 これらの既存のデータインデックスは、TVS.CREATEINDEXコマンドを使用して作成され、グローバルインデックスと同じメタデータを共有します。 データインデックスがグローバルインデックスに関連付けられた後、グローバルインデックスに対してのみ操作を実行する必要があります。
データインデックスとグローバルインデックスの関連付けを解除することもできます。
前提条件
インスタンスは、Redis 6.0以降と互換性のあるTair DRAMベースのインスタンスです。 詳細については、「DRAMベースのインスタンス」をご参照ください。
インスタンスはプロキシモードのクラスターインスタンスで、プロキシノードのバージョンは7.0.10以降です。
インスタンスのglobalvectorindex_enabledパラメーターを1に設定すると、TairVectorグローバルインデックス機能が有効になります。 詳細は、「インスタンスパラメーターの設定」をご参照ください。
注意事項
ほとんどの場合、グローバルインデックスは、TVS.CREATEINDEXGLOBAL、TVS.EXPANDINDEXGLOBAL、およびTVS.IMPORTINDEXGLOBALコマンドが実行された直後に有効になります。 ただし、ネットワーク遅延やバックグラウンド同期などの要因により、グローバルインデックスがすぐに有効にならない場合があります。 グローバルインデックスが有効になるまでの最大時間は30秒を超えません。
グローバルインデックスからの関連付けを解除する前に、データインデックスを直接削除しないでください。 それ以外の場合、
ERR存在しないベクトルインデックスがあります。チェックして再試行してください
エラーが返されます。
サポートされるコマンド
表 1. TairVectorGlobalIndexコマンド
タイプ | コマンド | 構文 | 説明 |
インデックス操作 |
| グローバルインデックスを作成します。 このコマンドを使用すると、インデックスの作成とクエリの実行に使用する特定のアルゴリズムと距離関数を指定できます。 | |
| グローバルインデックスにデータインデックスを作成します。 | ||
| 既存のデータインデックスをグローバルインデックスに関連付けます。 既存のデータインデックスのメタデータは、グローバルインデックスのメタデータと同じである必要があります。 | ||
| グローバルインデックスに関する情報を照会します。 | ||
| グローバルインデックスと関連するデータインデックスの関連付けを解除します。 データインデックスが指定されていない場合、グローバルインデックスは削除され、関連するすべてのデータインデックスはグローバルインデックスとの関連付けが解除されます。 | ||
ベクトルデータ操作 |
| グローバルインデックスにキーを挿入します。 キーが挿入された後、Tairは自動的にキーを適切なデータインデックスに書き込み、データがすべてのデータインデックスで均等に分散されるようにします。 | |
| グローバルインデックス内のkeyのすべてのデータレコードを照会します。 | ||
| 指定されたベクターインデックスの指定されたkey内の属性keyの値を照会します。 | ||
| グローバルインデックスから特定のキーを削除します。 | ||
| 指定された属性キーとその値をグローバルインデックスの指定されたキーから削除します。 | ||
| グローバルインデックスで特定の条件を満たすキーをスキャンします。 | ||
ベクトル最近傍クエリ |
| グローバルインデックス内の指定されたベクトルの最近傍ベクトルを照会します。 最大10,000のベクトルを返すことができます。 | |
| グローバルインデックス内の指定されたベクトルの最近傍ベクトルを照会します。 このコマンドの検索ロジックは、TVS.KNNSEARCHGLOBALと同じですが、検索結果とともにタグ属性を返す機能が追加されています。 |
このトピックで使用されるコマンド構文の規則を次に示します。
Uppercase keyword
: commandキーワードを示します。イタリックテキスト
: 変数を示します。[options]
: 囲まれたパラメータがオプションであることを示します。 括弧で囲まれていないパラメータを指定する必要があります。A | B
: 縦棒 (|) で区切られたパラメータが相互に排他的であることを示します。 指定できるパラメーターは1つだけです。...
: このシンボルの前にあるパラメーターを繰り返し指定できることを示します。
TVS.CREATEINDEXGLOBAL
項目 | 説明 |
構文 |
|
時間の複雑さ | O(1) |
コマンド説明 | グローバルインデックスを作成します。 このコマンドを使用すると、インデックスの作成とクエリの実行に使用する特定のアルゴリズムと距離関数を指定できます。 グローバルインデックスは、TVS.DELINDEXGLOBALコマンドを使用してのみ削除できます。 |
パラメーター |
|
Output |
|
例: | サンプルコマンド:
サンプル出力:
|
TVS.EXPANDINDEXGLOBAL
項目 | 説明 |
構文 |
|
時間の複雑さ | O(1) |
コマンド説明 | グローバルインデックスにデータインデックスを作成します。 このコマンドを作成して実行するデータインデックスの数を指定すると、Tairはこれらのデータインデックスを異なるシャードに自動的かつ均等に分散し、データインデックスに名前を割り当てます。 データインデックスのメタデータは、グローバルインデックスのメタデータと同じです。 データインデックスはグローバルインデックスに関連付けられていますが、Tairには独立して格納されます。 説明 各グローバルインデックスのデータインデックスの数は、インスタンスのシャードの数と同じにすることを推奨します。 たとえば、Tairインスタンスに3つのシャードが含まれ、このコマンドを使用して3つのデータインデックスを作成する場合、Tairは各シャードにデータインデックスを作成して負荷分散を実装します。 |
パラメーター |
|
Output |
|
例: | サンプルコマンド:
サンプル出力:
|
TVS. IMPOINDEXGLOBAL
項目 | 説明 |
構文 |
|
時間の複雑さ | O(1) |
コマンド説明 | 既存のデータインデックスをグローバルインデックスに関連付けます。 既存のデータインデックスのメタデータは、グローバルインデックスのメタデータと同じである必要があります。 |
パラメーター |
|
Output |
|
例: | サンプルコマンド:
サンプル出力:
|
TVS.LISTINDEXGLOBAL
項目 | 説明 |
構文 |
|
時間の複雑さ | O(1) |
コマンド説明 | グローバルインデックスに関する情報を照会します。 |
パラメーター |
|
Output |
|
例: | サンプルコマンド:
サンプル出力:
|
TVS.DELINDEXGLOBAL
項目 | 説明 |
構文 |
|
時間の複雑さ | O(1) |
コマンド説明 | グローバルインデックスと関連するデータインデックスの関連付けを解除します。 データインデックスが指定されていない場合、グローバルインデックスは削除され、関連するすべてのデータインデックスはグローバルインデックスとの関連付けが解除されます。 説明 このコマンドでは、データインデックスは削除されません。 データインデックスを削除するには、TVS.DELINDEXコマンドを使用します。 |
パラメーター |
|
Output |
|
例: | サンプルコマンド:
サンプル出力:
|
TVS.HSETGLOBAL
項目 | 説明 |
構文 |
|
時間の複雑さ | データを挿入または更新する操作がベクトル値の作成または更新を伴わない場合、時間複雑度はO(1) である。 そうでない場合、時間複雑度はO(log(N)) であり、Nはベクトルインデックス内のキーの数を示す。 |
コマンド説明 | グローバルインデックスにキーを挿入します。 キーが挿入された後、Tairは自動的にキーを適切なデータインデックスに書き込み、データがすべてのデータインデックスで均等に分散されるようにします。 キーがすでに存在する場合、その値は新しい値で更新されます。 |
パラメーター |
|
Output |
|
例: | サンプルコマンド:
サンプル出力:
|
TVS.HGETALLGLOBAL
項目 | 説明 |
構文 |
|
時間の複雑さ | ここで、Mはデータインデックスの数を示す。 |
コマンド説明 | グローバルインデックス内のkeyのすべてのデータレコードを照会します。 |
パラメーター |
|
Output |
|
例: | サンプルコマンド:
サンプル出力:
|
TVS.HMGETGLOBAL
項目 | 説明 |
構文 |
|
時間の複雑さ | ここで、Mはデータインデックスの数を示す。 |
コマンド説明 | 指定されたベクターインデックスの指定されたkey内の属性keyの値を照会します。 |
パラメーター |
|
Output |
|
例: | サンプルコマンド:
サンプル出力:
|
TVS.DELGLOBAL
項目 | 説明 |
構文 |
|
時間の複雑さ | O(1) |
コマンド説明 | グローバルインデックスから特定のキーを削除します。 |
パラメーター |
|
Output |
|
例: | サンプルコマンド:
サンプル出力:
|
TVS.HDELGLOBAL
項目 | 説明 |
構文 |
|
時間の複雑さ | O(1) |
コマンド説明 | 指定された属性キーとその値をグローバルインデックスの指定されたキーから削除します。 |
パラメーター |
|
Output |
|
例: | サンプルコマンド:
サンプル出力:
|
TVS.SCANGLOBAL
項目 | 説明 |
構文 |
|
時間の複雑さ | ここで、Nはデータインデックス内のキーの数を示す。 |
コマンド説明 | グローバルインデックスで特定の条件を満たすキーをスキャンします。 Tairは、各スキャンで1つのデータシャードのみの結果を返します。 |
パラメーター |
|
Output |
|
例: | サンプルコマンド:
サンプル出力:
|
TVS.KNNSEARCHGLOBAL
項目 | 説明 |
構文 |
|
時間の複雑さ |
Nはデータインデックス内のキーの数を示し、Mはデータインデックスの数を示す。 |
コマンド説明 | グローバルインデックス内の指定されたベクトルの最近傍ベクトルを照会します。 最大10,000のベクトルを返すことができます。 たとえば、topN値をクエリする場合、Tairは各データインデックスから上位N個のベクトルを取得します。 この場合、ベクトルの最大数は、 |
パラメーター |
|
Output |
|
例: | 事前に次のコマンドを実行します。
サンプルコマンド1:
サンプル出力1:
サンプルコマンド2:
サンプル出力2:
|
TVS.KNNSEARCHFIELDGLOBAL
項目 | 説明 |
構文 |
|
時間の複雑さ |
Nはデータインデックス内のキーの数を示し、Mはデータインデックスの数を示す。 |
コマンド説明 | グローバルインデックス内の指定されたベクトルの最近傍ベクトルを照会します。 このコマンドの検索ロジックは、TVS.KNNSEARCHGLOBALと同じですが、検索結果とともにタグ属性を返す機能が追加されています。 |
パラメーター |
|
Output |
|
例: | 事前に次のコマンドを実行します。
サンプルコマンド:
サンプル出力:
|