TairVector は、Tair チームによって開発された拡張データ構造であり、ストレージと検索を統合した、高性能でリアルタイムなベクトルデータベースサービスを提供します。
TairVector について
TairVector は、次の図に示すように、多層ハッシュ構造を使用します。
TairVector は、階層的ナビゲーブルスモールワールド (HNSW) とフラット検索という 2 つのインデックスアルゴリズムを提供します。
HNSW:グラフベースのベクトルインデックスを構築し、非同期のメモリ空間解放をサポートします。リアルタイムのインデックス更新を可能にしながら、高いクエリ精度を維持します。
総当たり検索:100% のクエリ精度と高速な挿入速度を提供し、小規模なデータセットに適しています。
TairVector は、ユークリッド距離、内積、コサイン距離、ジャカード距離など、複数の距離メトリックもサポートしています。従来のベクトル検索サービスと比較して、TairVector には次の利点があります。
すべてのデータをメモリに格納し、リアルタイムのインデックス更新をサポートして、読み取りおよび書き込みレイテンシを最小限に抑えます。
最適化されたインメモリデータ構造を使用して、メモリ使用量を削減します。
すぐに使えるサービスとして機能します。Alibaba Cloud サービスとしてプロビジョニングした後、すぐに使用できます。そのアーキテクチャはシンプルで効率的であり、複雑なコンポーネントの依存関係はありません。
ベクトル検索と全文検索を組み合わせたハイブリッド検索をサポートします。
タグ属性などのスカラーデータの転置インデックスを作成し、k-最近傍 (KNN) 検索を実行できます。検索中、TairVector は最初にスカラー属性に基づいてデータセットをフィルタリングし、次にフィルタリングされた結果に対して KNN 検索を実行します。
リリースノート
TairVector は 2022 年 10 月 13 日に、Redis 6.0 と互換性のある Tair DRAM ベースのインスタンスとともにリリースされました。
Tair 6.2.2.0 は 2022 年 11 月 22 日にリリースされました。このリリースでは、ジャカード距離メトリックのサポートが追加され、TVS.GETINDEX コマンドが強化されて、
index_data_sizeおよびattribute_data_sizeパラメーターを使用してインデックスごとのメモリ使用量をレポートできるようになりました。Tair 6.2.3.0 は 2022 年 12 月 26 日にリリースされました。このリリースでは、クラスタープロキシモードのサポートが追加され、FLOAT16 ベクトルデータ型が導入され、TVS.MINDEXKNNSEARCH および TVS.MINDEXMKNNSEARCH コマンドが追加されました。
Tair 6.2.8.2 は 2023 年 7 月 4 日にリリースされました。このリリースでは、コサイン距離と HNSW インデックスの自動ガベージコレクションのサポートが追加されました。
Tair 23.8.0.0 は 2023 年 8 月 3 日にリリースされました。このリリースでは、TVS.HEXPIREAT や TVS.HPEXPIREAT などのコマンドが追加され、インデックス内のキーレベルで有効期間 (TTL) を設定できるようになりました。また、指定したキーに対してベクトル最近傍クエリを実行するための TVS.GETDISTANCE コマンドも追加されました。TVS.CREATEINDEX や TVS.KNNSEARCH などのコマンドを更新することで全文検索機能が強化され、ベクトル検索と全文検索を組み合わせたハイブリッド検索が可能になりました。
Tair 24.5.1.0 は 2024 年 6 月 6 日にリリースされました。このリリースでは、最近傍クエリ中にタグ属性情報を返すための TVS.KNNSEARCHFIELD および TVS.MINDEXKNNSEARCHFIELD コマンドが追加されました。
2024 年 7 月 22 日にリリースされたバージョン 24.7.0.0 では、疎ベクトルにおける HNSW インデックスのサポートが追加されました。
ベストプラクティス
前提条件
インスタンスは、Redis 6.0 以降と互換性のあるメモリ最適化ストレージメディアを使用します。
Redis 5.0 を実行している DRAM ベースのインスタンスは、Redis 6.0 を実行しているインスタンスにアップグレードできません。Redis 6.0 と互換性のある DRAM ベースのインスタンスを使用するには、新しいインスタンスを作成してください。
注意事項
TairVector データは Tair インスタンスで管理します。
TairVector は、インデックス内のキー分散またはスロット割り当てを制御するための Redis ハッシュタグをサポートしていません。
TairVector は、MOVE などの機能をサポートしていません。
ビジネスで高いデータの永続性が必要な場合は、準同期モードを有効にしてください。
サポートされるコマンド
表 1. TairVector コマンド
タイプ | コマンド | 構文 | 説明 |
インデックスメタデータ操作 |
| ベクトルインデックスを作成し、インデックス作成およびクリアルゴリズムと距離計算式を指定します。このオブジェクトは | |
| 特定のベクトルインデックスをクエリし、そのメタデータを取得します。 | ||
| 指定されたベクトルインデックスとその中のすべてのデータを削除します。 | ||
| Tair インスタンス内の特定の基準を満たすベクトルインデックスをスキャンします。 | ||
ベクトルデータ操作 |
| データレコード (key) をベクトルインデックスに挿入します。レコードが既に存在する場合、既存のレコードを更新して上書きします。 | |
| 指定されたベクトルインデックス内の key に関連付けられたすべてのデータレコードをクエリします。 | ||
| 指定されたベクトルインデックスの attribute_key 内の key に関連付けられた値をクエリします。 | ||
| 指定されたベクトルインデックスから指定されたデータレコード (key) を削除します。 | ||
| ベクトルインデックス内のデータレコード (key) から指定された attribute_key とその値を削除します。 | ||
| 指定されたベクトルインデックス内の特定の基準を満たすデータレコード (key) をスキャンします。 | ||
| 指定されたベクトルインデックス内で、指定された key の値を整数 num だけ増やします。 | ||
| 指定されたベクトルインデックス内で、指定された key の値を浮動小数点数 num だけ増やします。 | ||
| 指定されたベクトルインデックス内で、指定された key の絶対有効期限をミリ秒単位で設定します。 | ||
| 指定されたベクトルインデックス内で、指定された key の相対有効期限をミリ秒単位で設定します。 | ||
| 指定されたベクトルインデックス内で、指定された key の絶対有効期限を秒単位で設定します。 | ||
| 指定されたベクトルインデックス内で、指定された key の相対有効期限を秒単位で設定します。 | ||
| 指定されたベクトルインデックス内で、指定された key の残りの有効期間 (TTL) をミリ秒単位で確認します。 | ||
| 指定されたベクトルインデックス内で、指定された key の残りの TTL を秒単位で確認します。 | ||
| 指定されたベクトルインデックス内で、指定された key の絶対有効期限をミリ秒単位で確認します。 | ||
| 指定されたベクトルインデックス内で、指定された key の絶対有効期限を秒単位で確認します。 | ||
ベクトル最近傍クエリ |
| 指定されたベクトルインデックス内の指定されたベクトル (VECTOR) に対して最近傍クエリを実行します。クエリは最大 topN 件の結果を返します。 | |
| 指定されたベクトルインデックス内の指定されたベクトル (VECTOR) に対して最近傍クエリを実行します。検索ロジックは TVS.KNNSEARCH と同じです。さらに、このコマンドは結果とともにタグ属性を返します。 | ||
| 指定されたベクトルインデックス内の指定されたキーのリストに対してベクトル最近傍クエリを実行します。 | ||
| 指定されたベクトルインデックス内の複数のベクトル (VECTOR) に対して最近傍クエリを実行します。 | ||
| 複数のベクトルインデックスにまたがって、指定されたベクトル (VECTOR) に対して最近傍クエリを実行します。 | ||
| 複数のベクトルインデックスにまたがって、指定されたベクトル (VECTOR) に対して最近傍クエリを実行します。結果とともにタグ属性が返されます。 | ||
| 複数のベクトルインデックスにまたがって、複数のベクトル (VECTOR) に対して最近傍クエリを実行します。 | ||
一般 |
| ネイティブの Redis DEL コマンドを使用して、1 つ以上の TairVector データエントリを削除します。 |
次のリストは、このトピックで使用されるコマンド構文の規則を説明しています。
大文字のキーワード:コマンドのキーワードを示します。イタリック体のテキスト:変数を示します。[options]:囲まれたパラメーターがオプションであることを示します。角括弧で囲まれていないパラメーターは指定する必要があります。A|B:縦棒 (|) で区切られたパラメーターが相互に排他的であることを示します。パラメーターのいずれか 1 つのみを指定できます。...:この記号の前のパラメーターを繰り返し指定できることを示します。
TVS.CREATEINDEX
カテゴリ | 説明 |
構文 |
|
時間計算量 | O(1) |
コマンドの説明 | ベクトルインデックスを作成し、インデックス作成およびクリアルゴリズムと距離計算式を指定します。このオブジェクトは |
オプション |
|
出力 |
|
例 | コマンド例: 出力例: |
TVS.GETINDEX
カテゴリ | 説明 |
構文 |
|
時間計算量 | O(1) |
コマンドの説明 | 特定のベクトルインデックスをクエリし、そのメタデータを取得します。 |
オプション |
|
戻り値 |
|
例 | 事前に次のコマンドを実行します。 コマンド例 (algorithm パラメーターを HNSW に設定): 出力例: |
TVS.DELINDEX
カテゴリ | 説明 |
構文 |
|
時間計算量 | O(N)。N はベクトルインデックス内のキーの数です。 |
コマンドの説明 | 指定されたベクトルインデックスとその中のすべてのデータを削除します。 |
オプション |
|
戻り値 |
|
例 | コマンド例: 出力例: |
TVS.SCANINDEX
カテゴリ | 説明 |
構文 |
|
時間計算量 | O(N)。N は Tair インスタンス内のベクトルインデックスの数です。 |
コマンドの説明 | Tair インスタンス内の特定の基準を満たすベクトルインデックスをスキャンします。 |
オプション |
|
出力 |
|
例 | コマンド例: 出力例: コマンド例 (pattern パラメーターを含む): 出力例: |
TVS.HSET
カテゴリ | 説明 |
構文 |
|
時間計算量 | データの挿入または更新にベクトル値の作成または更新が含まれない場合、時間計算量は O(1) です。それ以外の場合、時間計算量は O(log(N)) です。N はベクトルインデックス内のキーの数です。 |
コマンドの説明 | データレコード (key) をベクトルインデックスに挿入します。レコードが既に存在する場合、既存のレコードを更新して上書きします。 |
オプション |
|
出力 |
|
例 | コマンド例: サンプル出力: |
TVS.HGETALL
カテゴリ | 説明 |
構文 |
|
時間計算量 | O(1) |
コマンドの説明 | 指定されたベクトルインデックス内の key に関連付けられたすべてのデータレコードをクエリします。 |
オプション |
|
出力 |
|
例 | コマンド例: 出力例: |
TVS.HMGET
カテゴリ | 説明 |
構文 |
|
時間計算量 | O(1) |
コマンドの説明 | 指定されたベクトルインデックスの attribute_key 内の key に関連付けられた値をクエリします。 |
オプション |
|
戻り値 |
|
例 | コマンド例: 出力例: |
TVS.DEL
カテゴリ | 説明 |
構文 |
|
時間計算量 | O(1) |
コマンドの説明 | 指定されたベクトルインデックスから指定されたデータレコード (key) を削除します。 |
オプション |
|
戻り値 |
|
例 | コマンド例: 出力例: |
TVS.HDEL
カテゴリ | 説明 |
構文 |
|
時間計算量 | O(1) |
コマンドの説明 | ベクトルインデックス内のデータレコード (key) から指定された attribute_key とその値を削除します。 |
オプション |
|
(戻り値) |
|
例 | コマンド例: 出力例: |
TVS.SCAN
カテゴリ | 説明 |
構文 |
|
時間計算量 | O(N)。N はベクトルインデックス内のキーの数です。 |
コマンドの説明 | 指定されたベクトルインデックス内の特定の基準を満たすデータレコード (key) をスキャンします。 |
オプション |
|
出力 |
|
例 | コマンド例: 出力例: |
TVS.HINCRBY
カテゴリ | 説明 |
構文 |
|
時間計算量 | O(1) |
コマンドの説明 | 指定されたベクトルインデックス内で、指定された key の値を整数 num だけ増やします。 指定された attribute_key が存在しない場合、自動的に作成され、指定された値が割り当てられます。attribute_key が既に存在する場合、対応するレコードが更新され、初期値が上書きされます。 |
オプション |
|
出力 |
|
例 | コマンド例: 出力例: |
TVS.HINCRBYFLOAT
カテゴリ | 説明 |
構文 |
|
時間計算量 | O(1) |
コマンドの説明 | 指定されたベクトルインデックス内で、指定された key の値を浮動小数点数 num だけ増やします。 指定された `attribute_key` が存在しない場合、システムは自動的にそれを作成し、値を割り当てます。レコードが既に存在する場合、システムはそれを更新し、初期値を上書きします。 |
オプション |
|
出力 |
|
例 | コマンド例: 出力例: |
TVS.HPEXPIREAT
カテゴリ | 説明 |
構文 |
|
時間計算量 | O(1) |
コマンドの説明 | 指定されたベクトルインデックス内で、指定された key の絶対有効期限をミリ秒単位で設定します。 |
オプション |
|
戻り値 |
|
例 | コマンド例: 出力例: |
TVS.HPEXPIRE
カテゴリ | 説明 |
構文 |
|
時間計算量 | O(1) |
コマンドの説明 | 指定されたベクトルインデックス内で、指定された key の相対有効期限をミリ秒単位で設定します。 |
オプション |
|
(戻り値) |
|
例 | コマンド例: 出力例: |
TVS.HEXPIREAT
カテゴリ | 説明 |
構文 |
|
時間計算量 | O(1) |
コマンドの説明 | 指定されたベクトルインデックス内で、指定された key の絶対有効期限を秒単位で設定します。 |
オプション |
|
戻り値 |
|
例 | コマンド例: 出力例: |
TVS.HEXPIRE
カテゴリ | 説明 |
構文 |
|
時間計算量 | O(1) |
コマンドの説明 | 指定されたベクトルインデックス内で、指定された key の相対有効期限を秒単位で設定します。 |
オプション |
|
戻り値 |
|
例 | コマンド例: 出力例: |
TVS.HPTTL
カテゴリ | 説明 |
構文 |
|
時間計算量 | O(1) |
コマンドの説明 | 指定されたベクトルインデックス内で、指定された key の残りの有効期間 (TTL) をミリ秒単位で確認します。 |
オプション |
|
出力 |
|
例 | コマンド例: 出力例: |
TVS.HTTL
カテゴリ | 説明 |
構文 |
|
時間計算量 | O(1) |
コマンドの説明 | 指定されたベクトルインデックス内で、指定された key の残りの TTL を秒単位で確認します。 |
オプション |
|
戻り値 |
|
例 | コマンド例: 出力例: |
TVS.HPEXPIRETIME
カテゴリ | 説明 |
構文 |
|
時間計算量 | O(1) |
コマンドの説明 | 指定されたベクトルインデックス内で、指定された key の絶対有効期限をミリ秒単位で確認します。 |
オプション |
|
出力 |
|
例 | コマンド例: 出力例: |
TVS.HEXPIRETIME
カテゴリ | 説明 |
構文 |
|
時間計算量 | O(1) |
コマンドの説明 | 指定されたベクトルインデックス内で、指定された key の絶対有効期限を秒単位で確認します。 |
オプション |
|
戻り値 |
|
例 | コマンド例: 出力例: |
TVS.KNNSEARCH
カテゴリ | 説明 |
構文 |
|
時間計算量 |
N はベクトルインデックス内のキーの数です。 |
コマンドの説明 | 指定されたベクトルインデックス内の指定されたベクトル (VECTOR) に対して最近傍クエリを実行します。クエリは最大 topN 件の結果を返します。 |
オプション |
|
出力 |
|
例 | 事前に次のコマンドを実行します。 コマンド例 1: 出力例 1: コマンド例 2: 出力例 2: |
TVS.KNNSEARCHFIELD
カテゴリ | 説明 |
構文 |
|
時間計算量 |
N はベクトルインデックス内のキーの数です。 |
コマンドの説明 | 指定されたベクトルインデックス内の指定されたベクトル (VECTOR) に対して最近傍クエリを実行します。検索ロジックは TVS.KNNSEARCH と同じです。さらに、このコマンドは結果とともにタグ属性を返します。 |
オプション |
|
出力 |
|
例 | 事前に次のコマンドを実行します。 コマンド例: 出力例: |
TVS.GETDISTANCE
カテゴリ | 説明 |
構文 |
|
時間計算量 |
N はベクトルインデックス内のキーの数です。 |
コマンドの説明 | 指定されたベクトルインデックス内の指定されたキーのリストに対してベクトル最近傍クエリを実行します。 |
オプション |
|
戻り値 |
|
例 | 事前に次のコマンドを実行します。 コマンド例: 出力例: |
TVS.MKNNSEARCH
カテゴリ | 説明 |
構文 |
|
時間計算量 |
N はベクトルインデックス内のキーの数です。 |
コマンドの説明 | 指定されたベクトルインデックス内の複数のベクトル (VECTOR) に対して最近傍クエリを実行します。 |
オプション |
|
戻り値 |
|
例 | 事前に次のコマンドを実行します。 コマンド例: 出力例: |
TVS.MINDEXKNNSEARCH
カテゴリ | 説明 |
構文 |
|
時間計算量 |
N はベクトルインデックス内のキーの数です。 |
コマンドの説明 | 複数のベクトルインデックスにまたがって、指定されたベクトル (VECTOR) に対して最近傍クエリを実行します。 |
オプション |
|
戻り値 |
|
例 | 事前に次のコマンドを実行します。 コマンド例: 出力例: |
TVS.MINDEXKNNSEARCHFIELD
カテゴリ | 説明 |
構文 |
|
時間計算量 |
N はベクトルインデックス内のキーの数です。 |
コマンドの説明 | 複数のベクトルインデックスにまたがって、指定されたベクトル (VECTOR) に対して最近傍クエリを実行します。結果とともにタグ属性が返されます。 |
オプション |
|
戻り値 |
|
例 | 事前に次のコマンドを実行します。 コマンド例: 出力例: |
TVS.MINDEXMKNNSEARCH
カテゴリ | 説明 |
構文 |
|
時間計算量 |
N はベクトルインデックス内のキーの数です。 |
コマンドの説明 | 複数のベクトルインデックスにまたがって、複数のベクトル (VECTOR) に対して最近傍クエリを実行します。 |
オプション |
|
出力 |
|
例 | 事前に次のコマンドを実行します。 コマンド例: 出力例: |