TairVector針對集群架構代理模式,在數據索引(TairVectorIndex)的基礎上推出了全局索引(TairVectorGlobalIndex)。
概述
當全局索引與數據索引建立關聯關系后,全局索引可以自動實現負載均衡。您僅需向全局索引中寫入數據,Tair會將數據均勻地寫至集群不同分片的數據索引中。查詢時,全局索引也將自動匯聚各個數據索引中的查詢結果,并返回最終結果。全局索引的數據結構如下所示:
在創建全局索引后,您可以使用TVS.EXPANDINDEXGLOBAL接口直接創建對應的數據索引;或者您也可以通過TVS.IMPORTINDEXGLOBAL接口綁定存量數據索引(通過TVS.CREATEINDEX接口創建、元數據信息與全局索引一致),使數據索引與全局索引建立關聯關系。關聯后,您僅需對全局索引進行操作即可。
同時,也支持解除數據索引與全局索引之間的關聯關系。
前提條件
注意事項
通常情況下,執行TVS.CREATEINDEXGLOBAL、TVS.EXPANDINDEXGLOBAL、TVS.IMPORTINDEXGLOBAL接口后全局索引會立即生效,但可能會因為網絡延遲、后臺同步等原因導致沒有立即生效,最長生效時間不會超過30s。
請勿在未解綁前直接刪除數據索引,否則會報錯
ERR there are vector indexes that don't exist, please check and retry
。
命令列表
表 1. TairVector全局索引命令
類型 | 命令 | 語法 | 說明 |
索引操作 |
| 創建一個全局索引,同時指定構建索引和查詢的具體算法,以及距離函數。 | |
| 在全局索引中創建數據索引。 | ||
| 綁定存量數據索引至全局索引中,存量數據索引的元數據信息需與全局索引一致。 | ||
| 查詢全局索引信息。 | ||
| 解綁全量索引與數據索引的關系。若不指定數據索引,則直接刪除該全量索引,同時解除所有相關的數據索引的關聯關系。 | ||
向量數據操作 |
| 往全局索引中插入數據記錄(Key),Tair會自動把Key寫到合適的數據索引中,實現數據均衡。 | |
| 查詢全局索引中key對應的所有數據記錄。 | ||
| 查詢指定向量索引的key中對應的attribute_key所對應的數值。 | ||
| 在全量索引中,刪除指定數據記錄(key)。 | ||
| 在全量索引的數據記錄(key)中,刪除指定的attribute_key與其數值。 | ||
| 在全局索引中,掃描符合條件的數據記錄(key)。 | ||
向量近鄰查詢 |
| 在全局索引中,對指定的向量(VECTOR)進行近鄰查詢,最多可返回topN條。 | |
| 在全局索引中,對指定的向量(VECTOR)進行近鄰查詢,檢索邏輯與TVS.KNNSEARCHGLOBAL相同,額外支持返回標簽屬性。 |
大寫關鍵字
:命令關鍵字。斜體
:變量。[options]
:可選參數,不在括號中的參數為必選。A|B
:該組參數互斥,請進行二選一或多選一。...
:前面的內容可重復。
TVS.CREATEINDEXGLOBAL
類別 | 說明 |
語法 |
|
時間復雜度 | O(1) |
命令描述 | 創建一個全局索引,同時指定構建索引和查詢的具體算法,以及距離函數。 該對象僅能通過TVS.DELINDEXGLOBAL命令刪除。 |
選項 |
|
返回值 |
|
示例 | 命令示例:
返回示例均為如下:
|
TVS.EXPANDINDEXGLOBAL
類別 | 說明 |
語法 |
|
時間復雜度 | O(1) |
命令描述 | 在全局索引中創建數據索引。 當您在本接口指定新建的數量時,Tair會自動、均衡地將數據索引創建在不同的分片中,并且自動命名。數據索引的元數據信息與全局索引相同,并且與全局索引存在關聯關系,同時,數據索引也獨立存儲在Tair中。 說明 建議每個全局索引中的數據索引數量等于分片數。例如Tair實例為3分片,在本接口中指定創建3個數據索引時,Tair會在每個分片中各創建一個數據索引,自動實現負載均衡。 |
選項 |
|
返回值 |
|
示例 | 命令示例:
返回示例均為如下:
|
TVS.IMPORTINDEXGLOBAL
類別 | 說明 |
語法 |
|
時間復雜度 | O(1) |
命令描述 | 綁定存量數據索引至全局索引中,存量數據索引的元數據信息需與全局索引一致。 |
選項 |
|
返回值 |
|
示例 | 命令示例:
返回示例均為如下:
|
TVS.LISTINDEXGLOBAL
類別 | 說明 |
語法 |
|
時間復雜度 | O(1) |
命令描述 | 查詢全局索引信息。 |
選項 |
|
返回值 |
|
示例 | 命令示例:
返回示例均為如下:
|
TVS.DELINDEXGLOBAL
類別 | 說明 |
語法 |
|
時間復雜度 | O(1) |
命令描述 | 解綁全量索引與數據索引的關系。若不指定數據索引,則直接刪除該全量索引,同時解除所有相關的數據索引的關聯關系。 說明 本接口不會刪除數據索引,如需刪除請使用TVS.DELINDEX接口。 |
選項 |
|
返回值 |
|
示例 | 命令示例:
返回示例均為如下:
|
TVS.HSETGLOBAL
類別 | 說明 |
語法 |
|
時間復雜度 | 若本次插入、更新數據無需創建或更新向量值,則時間復雜度為O(1);否則時間復雜度為O(log(N)),N為該向量索引中Key的數量。 |
命令描述 | 往全局索引中插入數據記錄(Key),Tair會自動把Key寫到合適的數據索引中,實現數據均衡。 若該記錄已存在則更新并覆蓋原記錄。 |
選項 |
|
返回值 |
|
示例 | 命令示例:
返回示例:
|
TVS.HGETALLGLOBAL
類別 | 說明 |
語法 |
|
時間復雜度 | O(1)*M,M為數據索引的數量。 |
命令描述 | 查詢全局索引中key對應的所有數據記錄。 |
選項 |
|
返回值 |
|
示例 | 命令示例:
返回示例:
|
TVS.HMGETGLOBAL
類別 | 說明 |
語法 |
|
時間復雜度 | O(1)*M,M為數據索引的數量。 |
命令描述 | 查詢指定向量索引的key中對應的attribute_key所對應的數值。 |
選項 |
|
返回值 |
|
示例 | 命令示例:
返回示例:
|
TVS.DELGLOBAL
類別 | 說明 |
語法 |
|
時間復雜度 | O(1) |
命令描述 | 在全量索引中,刪除指定數據記錄(key)。 |
選項 |
|
返回值 |
|
示例 | 命令示例:
返回示例:
|
TVS.HDELGLOBAL
類別 | 說明 |
語法 |
|
時間復雜度 | O(1) |
命令描述 | 在全量索引的數據記錄(key)中,刪除指定的attribute_key與其數值。 |
選項 |
|
返回值 |
|
示例 | 命令示例:
返回示例:
|
TVS.SCANGLOBAL
類別 | 說明 |
語法 |
|
時間復雜度 | O(N),N為數據索引中Key的數量。 |
命令描述 | 在全局索引中,掃描符合條件的數據記錄(key)。 Tair單次掃描僅會返回單個數據分片的結果。 |
選項 |
|
返回值 |
|
示例 | 命令示例:
返回示例:
|
TVS.KNNSEARCHGLOBAL
類別 | 說明 |
語法 |
|
時間復雜度 |
N為數據索引中Key的數量,M為數據索引的數量。 |
命令描述 | 在全局索引中,對指定的向量(VECTOR)進行近鄰查詢,最多可返回topN條。 例如您希望查詢topN條結果時,Tair會先從各個數據索引中分別檢索出topN條結果,此時最多可能存在 |
選項 |
|
返回值 |
|
示例 | 請提前執行如下命令:
命令示例1:
返回示例1:
命令示例2:
返回示例2:
|
TVS.KNNSEARCHFIELDGLOBAL
類別 | 說明 |
語法 |
|
時間復雜度 |
N為數據索引中Key的數量,M為數據索引的數量。 |
命令描述 | 在全局索引中,對指定的向量(VECTOR)進行近鄰查詢,檢索邏輯與TVS.KNNSEARCHGLOBAL相同,額外支持返回標簽屬性。 |
選項 |
|
返回值 |
|
示例 | 請提前執行如下命令:
命令示例:
返回示例:
|