Vector
TairVector是Tair自研的擴展數據結構,提供高性能、實時,集存儲、檢索于一體的向量數據庫服務。
TairVector簡介
TairVector采用多層Hash的數據結構,如下所示:TairVector提供了HNSW(Hierarchical Navigable Small World)和暴力搜索(Flat Search)兩種索引算法:
HNSW:以圖結構構建向量檢索的索引,支持異步空間回收,可以在保證高查詢精度的同時,均衡實時更新的性能表現。
暴力搜索:具有100%查詢精度,插入數據速度快,適用于小規模數據集。
同時,TairVector支持歐式距離(Euclidean distance)、向量內積(Internal product)、余弦距離(Cosine distance)和Jaccard距離(Jaccard distance)等多種距離函數。相對于傳統的向量檢索服務,TairVector的優勢如下:
所有數據均在內存中,支持實時更新索引,具有更短的讀寫時延。
優化內存數據結構,占用空間更小。
開箱即用,以云服務的方式整體申請即可使用,整體架構簡單高效,沒有復雜組件依賴。
支持向量檢索與全文檢索組合的混合檢索。
支持創建標量(標簽屬性等)倒排索引,并提供先標量后向量的KNN檢索特性。
發布記錄
2022年10月13日隨Tair內存型(兼容Redis 6.0)首次發布TairVector。
2022年11月22日發布6.2.2.0版本,新增支持Jaccard距離函數、TVS.GETINDEX命令支持統計每個索引的內存占用(
index_data_size
和attribute_data_size
)。2022年12月26日發布6.2.3.0版本,支持集群代理模式,新增FLOAT16的向量數據類型,新增TVS.MINDEXKNNSEARCH、TVS.MINDEXMKNNSEARCH命令。
2023年07月04日發布6.2.8.2版本,支持余弦距離、支持HNSW索引垃圾自動回收。
2023年08月03日發布23.8.0.0版本,支持對Index中的key級別設置TTL(新增TVS.HEXPIREAT、TVS.HPEXPIREAT等命令),支持對指定Key列表進行向量近鄰查詢(新增TVS.GETDISTANCE命令),支持全文檢索(更新TVS.CREATEINDEX、TVS.KNNSEARCH等命令),可以實現向量檢索與全文檢索組合的混合檢索。
2024年06月06日發布24.5.1.0版本,新增TVS.KNNSEARCHFIELD、TVS.MINDEXKNNSEARCHFIELD命令,支持在近鄰查詢時返回標簽屬性信息。
2024年07月22日發布24.7.0.0版本,支持在稀疏向量中使用HNSW索引。
最佳實踐
前提條件
實例的存儲介質為內存型(兼容Redis 6.0及以上)。
內存型(兼容Redis 5.0)實例暫不支持升級至內存型(兼容Redis 6.0),如需使用請新建實例。
注意事項
操作對象為Tair實例中的TairVector數據。
TairVector數據結構的index_name、Key等暫不支持Redis的Hashtags特性。
TairVector暫不支持MOVE等特性。
若業務場景對數據持久化要求較高,建議開啟半同步功能,將#no_loose_tsync-repl-mode參數的值改為semisync,具體操作請參見設置實例參數。
命令列表
表 1. TairVector命令
類型 | 命令 | 語法 | 說明 |
索引元數據操作 |
| 創建一個向量索引空間,同時指定構建索引和查詢的具體算法,以及距離函數。該對象僅能通過 | |
| 查詢指定的向量索引,獲取該向量索引的元數據信息。 | ||
| 刪除指定的向量索引及該索引內的所有數據。 | ||
| 掃描Tair實例中所有符合條件的向量索引。 | ||
向量數據操作 |
| 往向量索引中插入數據記錄(key),若該記錄已存在則更新并覆蓋原記錄。 | |
| 查詢指定向量索引中的key對應的所有數據記錄。 | ||
| 查詢指定向量索引的key中對應的attribute_key所對應的數值。 | ||
| 在指定向量索引中,刪除指定數據記錄(key)。 | ||
| 在向量索引的數據記錄(key)中,刪除指定的attribute_key與其數值。 | ||
| 在指定向量索引中,掃描符合條件的數據記錄(key)。 | ||
| 在指定向量索引中,將指定數據記錄(key)的attribute_key的值增加num,num為一個整數。 | ||
| 在指定向量索引中,將指定數據記錄(key)的attribute_key的值增加num,num為一個浮點數。 | ||
| 在指定向量索引中,為指定數據記錄(key)設置絕對過期時間,精確到毫秒。 | ||
| 在指定向量索引中,為指定數據記錄(key)設置相對過期時間,精確到毫秒。 | ||
| 在指定向量索引中,為指定數據記錄(key)設置絕對過期時間,精確到秒。 | ||
| 在指定向量索引中,為指定數據記錄(key)設置相對過期時間,精確到秒。 | ||
| 在指定向量索引中,查看指定數據記錄(key)的剩余過期時間,精確到毫秒。 | ||
| 在指定向量索引中,查看指定數據記錄(key)的剩余過期時間,精確到秒。 | ||
| 在指定向量索引中,查看指定數據記錄(key)的絕對過期時間,精確到毫秒。 | ||
| 在指定向量索引中,查看指定數據記錄(key)的絕對過期時間,精確到秒。 | ||
向量近鄰查詢 |
| 在指定向量索引中,對指定的向量(VECTOR)進行近鄰查詢,最多可返回topN條。 | |
| 在指定向量索引中,對指定的向量(VECTOR)進行近鄰查詢,檢索邏輯與TVS.KNNSEARCH相同,額外支持返回標簽屬性。 | ||
| 在指定向量索引中,針對指定Key列表,進行向量(VECTOR)近鄰查詢。 | ||
| 在指定向量索引中,批量對多條向量(VECTOR)進行近鄰查詢。 | ||
| 在多個向量索引中,對指定的向量(VECTOR)進行近鄰查詢。 | ||
| 在多個向量索引中,對指定的向量(VECTOR)進行近鄰查詢,支持返回標簽屬性。 | ||
| 在多個向量索引中,批量對多條向量(VECTOR)進行近鄰查詢。 |
本文的命令語法定義如下:
大寫關鍵字
:命令關鍵字。斜體
:變量。[options]
:可選參數,不在括號中的參數為必選。A|B
:該組參數互斥,請進行二選一或多選一。...
:前面的內容可重復。
TVS.CREATEINDEX
類別 | 說明 |
語法 |
|
時間復雜度 | O(1) |
命令描述 | 創建一個向量索引空間,同時指定構建索引和查詢的具體算法,以及距離函數。該對象僅能通過 |
選項 |
|
返回值 |
|
示例 | 命令示例:
返回示例均為如下:
|
TVS.GETINDEX
類別 | 說明 |
語法 |
|
時間復雜度 | O(1) |
命令描述 | 查詢指定的向量索引,獲取該向量索引的元數據信息。 |
選項 |
|
返回值 |
|
示例 | 請提前執行如下命令:
命令示例(以HNSW算法的向量索引為例):
返回示例:
|
TVS.DELINDEX
類別 | 說明 |
語法 |
|
時間復雜度 | O(N),N為該向量索引中Key的數量。 |
命令描述 | 刪除指定的向量索引及該索引內的所有數據。 |
選項 |
|
返回值 |
|
示例 | 命令示例:
返回示例:
|
TVS.SCANINDEX
類別 | 說明 |
語法 |
|
時間復雜度 | O(N),N為Tair實例中向量索引數量。 |
命令描述 | 掃描Tair實例中所有符合條件的向量索引。 |
選項 |
|
返回值 |
|
示例 | 命令示例:
返回示例:
帶Pattern的查詢示例:
返回示例:
|
TVS.HSET
類別 | 說明 |
語法 |
|
時間復雜度 | 若本次插入、更新數據無需創建或更新向量值,則時間復雜度為O(1);否則時間復雜度為O(log(N)),N為該向量索引中Key的數量。 |
命令描述 | 往向量索引中插入數據記錄(key),若該記錄已存在則更新并覆蓋原記錄。 |
選項 |
|
返回值 |
|
示例 | 命令示例:
返回示例:
|
TVS.HGETALL
類別 | 說明 |
語法 |
|
時間復雜度 | O(1) |
命令描述 | 查詢指定向量索引中的key對應的所有數據記錄。 |
選項 |
|
返回值 |
|
示例 | 命令示例:
返回示例:
|
TVS.HMGET
類別 | 說明 |
語法 |
|
時間復雜度 | O(1) |
命令描述 | 查詢指定向量索引的key中對應的attribute_key所對應的數值。 |
選項 |
|
返回值 |
|
示例 | 命令示例:
返回示例:
|
TVS.DEL
類別 | 說明 |
語法 |
|
時間復雜度 | O(1) |
命令描述 | 在指定向量索引中,刪除指定數據記錄(key)。 |
選項 |
|
返回值 |
|
示例 | 命令示例:
返回示例:
|
TVS.HDEL
類別 | 說明 |
語法 |
|
時間復雜度 | O(1) |
命令描述 | 在向量索引的數據記錄(key)中,刪除指定的attribute_key與其數值。 |
選項 |
|
返回值 |
|
示例 | 命令示例:
返回示例:
|
TVS.SCAN
類別 | 說明 |
語法 |
|
時間復雜度 | O(N),N為該向量索引中Key的數量。 |
命令描述 | 在指定向量索引中,掃描符合條件的數據記錄(key)。 |
選項 |
|
返回值 |
|
示例 | 命令示例:
返回示例:
|
TVS.HINCRBY
類別 | 說明 |
語法 |
|
時間復雜度 | O(1) |
命令描述 | 在指定向量索引中,將指定數據記錄(key)的attribute_key的值增加num,num為一個整數。 若指定的attribute_key不存在則自動新建并賦予該值,若該記錄已存在則更新并覆蓋原值。 |
選項 |
|
返回值 |
|
示例 | 命令示例:
返回示例:
|
TVS.HINCRBYFLOAT
類別 | 說明 |
語法 |
|
時間復雜度 | O(1) |
命令描述 | 在指定向量索引中,將指定數據記錄(key)的attribute_key的值增加num,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)的剩余過期時間,精確到毫秒。 |
選項 |
|
返回值 |
|
示例 | 命令示例:
返回示例:
|
TVS.HTTL
類別 | 說明 |
語法 |
|
時間復雜度 | O(1) |
命令描述 | 在指定向量索引中,查看指定數據記錄(key)的剩余過期時間,精確到秒。 |
選項 |
|
返回值 |
|
示例 | 命令示例:
返回示例:
|
TVS.HPEXPIRETIME
類別 | 說明 |
語法 |
|
時間復雜度 | O(1) |
命令描述 | 在指定向量索引中,查看指定數據記錄(key)的絕對過期時間,精確到毫秒。 |
選項 |
|
返回值 |
|
示例 | 命令示例:
返回示例:
|
TVS.HEXPIRETIME
類別 | 說明 |
語法 |
|
時間復雜度 | O(1) |
命令描述 | 在指定向量索引中,查看指定數據記錄(key)的絕對過期時間,精確到秒。 |
選項 |
|
返回值 |
|
示例 | 命令示例:
返回示例:
|
TVS.KNNSEARCH
類別 | 說明 |
語法 |
|
時間復雜度 |
N為該向量索引中Key的數量。 |
命令描述 | 在指定向量索引中,對指定的向量(VECTOR)進行近鄰查詢,最多可返回topN條。 |
選項 |
|
返回值 |
|
示例 | 請提前執行如下命令:
命令示例1:
返回示例1:
命令示例2:
返回示例2:
|
TVS.KNNSEARCHFIELD
類別 | 說明 |
語法 |
|
時間復雜度 |
N為該向量索引中Key的數量。 |
命令描述 | 在指定向量索引中,對指定的向量(VECTOR)進行近鄰查詢,檢索邏輯與TVS.KNNSEARCH相同,額外支持返回標簽屬性。 |
選項 |
|
返回值 |
|
示例 | 請提前執行如下命令:
命令示例:
返回示例:
|
TVS.GETDISTANCE
類別 | 說明 |
語法 |
|
時間復雜度 |
N為該向量索引中Key的數量。 |
命令描述 | 在指定向量索引中,針對指定Key列表,進行向量(VECTOR)近鄰查詢。 |
選項 |
|
返回值 |
|
示例 | 請提前執行如下命令:
命令示例:
返回示例:
|
TVS.MKNNSEARCH
類別 | 說明 |
語法 |
|
時間復雜度 |
N為該向量索引中Key的數量。 |
命令描述 | 在指定向量索引中,批量對多條向量(VECTOR)進行近鄰查詢。 |
選項 |
|
返回值 |
|
示例 | 請提前執行如下命令:
命令示例:
返回示例:
|
TVS.MINDEXKNNSEARCH
類別 | 說明 |
語法 |
|
時間復雜度 |
N為該向量索引中Key的數量。 |
命令描述 | 在多個向量索引中,對指定的向量(VECTOR)進行近鄰查詢。 |
選項 |
|
返回值 |
|
示例 | 請提前執行如下命令:
命令示例:
返回示例:
|
TVS.MINDEXKNNSEARCHFIELD
類別 | 說明 |
語法 |
|
時間復雜度 |
N為該向量索引中Key的數量。 |
命令描述 | 在多個向量索引中,對指定的向量(VECTOR)進行近鄰查詢,支持返回標簽屬性。 |
選項 |
|
返回值 |
|
示例 | 請提前執行如下命令:
命令示例:
返回示例:
|
TVS.MINDEXMKNNSEARCH
類別 | 說明 |
語法 |
|
時間復雜度 |
N為該向量索引中Key的數量。 |
命令描述 | 在多個向量索引中,批量對多條向量(VECTOR)進行近鄰查詢。 |
選項 |
|
返回值 |
|
示例 | 請提前執行如下命令:
命令示例:
返回示例:
|