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會自動、均衡地將資料索引建立在不同的分區中,並且自動命名。資料索引的中繼資料資訊與全域索引相同,並且與全域索引存在關聯關係,同時,資料索引也隔離儲存區 (Isolated Storage)在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相同,額外支援返回標籤屬性。 |
選項 |
|
傳回值 |
|
樣本 | 請提前執行如下命令: 命令樣本: 返回樣本: |