向量搜尋功能和限制 - Amazon MemoryDB

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

向量搜尋功能和限制

向量搜尋可用性

R6g、R7g 和 T4G 節點類型支援向量搜尋啟用記憶體資料庫組態,並且可在所有可用記憶體資料庫的區域使用。 AWS

無法修改現有叢集以啟用搜尋。但是,可以從停用搜尋的叢集快照建立啟用搜尋的叢集。

參數限制

下表顯示預覽中各種向量搜尋項目的限制:

項目 最大值
向量中的維度數 32768
可以創建的索引數 10
索引中的字段數 50
FT.SEARCH 和 FT。聚合超時子句(毫秒) 10000
在 FT.AGRGE 命令中的管道階段數 32
FT. 彙總載入子句中的欄位數 1024
匯總子句中的欄位數 16
FT. 彙總排序子句中的欄位數 16
在 FT.聚合參數/參數的數量 32
HNSW M 參數 512
HNSW EF_ 建構參數 4096
HNSW EF_ 執行階段參數 4096

縮放限制

MemoryDB 的向量搜尋目前僅限於單一碎片,且不支援水平縮放。向量搜尋支援垂直和複本縮放。

操作限制

索引持續性和回填

向量搜尋功能會保留索引的定義,以及索引的內容。這表示在造成節點啟動或重新啟動的任何作業要求或事件期間,索引定義和內容都會從最新的快照還原,而且會從 Journal 重新顯示任何擱置的交易。無需使用者採取任何動作即可啟動此功能。一旦資料還原,就會立即執行重建作業做為回填作業。這在功能上等同於系統為每個定義的索引自動執行 FT.CRE ATE 指令。請注意,一旦資料還原,但很可能在索引回填完成之前,節點就可用於應用程式作業,這表示應用程式會再次看到回填,例如,使用回填索引的搜尋命令可能會遭到拒絕。如需回填的詳細資訊,請參閱向量搜尋概觀

索引回填的完成不會在主要和複本之間同步處理。這種缺少同步處理可能會意外地顯示給應用程式,因此建議應用程式在初始化搜尋作業之前,先確認主要複本和所有複本的回填完成。

快照匯入/匯出和實時移轉

RDB 檔案中的搜尋索引存在會限制該資料的相容可傳輸性。由 MemoryDB 向量搜索功能定義的向量索引的格式只能由另一個 MemoryDB 向量啟用集群理解。此外,預覽叢集中的 RDB 檔案可由 GA 版本的 MemoryDB 叢集匯入,這樣會在載入 RDB 檔案時重建索引內容。

但是,不包含索引的 RDB 文件不會以這種方式進行限制。因此,可以在匯出前刪除索引,將預覽叢集中的資料匯出至非預覽叢集。

記憶體消耗

記憶體消耗是以向量數目、維度數目、M 值和非向量資料量為基礎,例如與向量關聯的中繼資料或儲存在執行個體內的其他資料。

所需的總記憶體是實際向量資料所需空間的組合,以及向量索引所需的空間。Vector 資料所需的空間是透過測量在 HASH 或 JSON 資料結構中儲存向量所需的實際容量,以及最接近記憶體基板的額外負荷來計算,以達到最佳的記憶體配置。每個向量索引都會使用儲存在這些資料結構中的向量資料的參照,並使用有效率的記憶體最佳化來移除索引中向量資料的任何重複複本。

向量的數量取決於您決定將資料表示為向量的方式。例如,您可以選擇將單一文件表示為數個區塊,其中每個區塊代表一個向量。或者,您可以選擇將整份文件表示為單一向量。

向量的尺寸數取決於您選擇的嵌入模型。例如,如果您選擇使用 AWS Titan 嵌入模型,則尺寸的數量將是 1536。

M 參數代表在索引建構期間為每個新元素建立的雙向連結數目。MemoryDB 將此值預設為 16;但是,您可以覆蓋此值。較高的 M 參數可以更好地滿足高維度和/或高召回要求,而低 M 參數則更適合低維度和/或低召回要求。M 值會隨著索引變大而增加記憶體消耗量,從而增加記憶體消耗量。

在主控台體驗中,MemoryDB 提供了一種簡單的方法,讓您在叢集設定下勾選「啟用向量搜尋」後,根據向量工作負載的特性選擇正確的執行個體類型。

AWS 主控台中的向量搜尋叢集設定。

工作量範例

客戶希望建立在其內部財務文件之上的語義搜索引擎。他們目前持有 1M 財務文件,這些文件使用具有 1536 個維度的 Titan 嵌入模型,每個文檔分成 10 個向量,並且沒有非向量數據。客戶決定使用預設值 16 做為 M 參數。

  • 向量:1 公尺 * 10 個區塊 = 10 公尺向量

  • 機身尺寸

  • 非向量資料 (GB):0 GB

  • M 型參數:16

透過這項資料,客戶可以按一下主控台內的 [使用向量計算機] 按鈕,根據參數取得建議的執行個體類型:

矢量計算器推薦的節點類型,基於輸入到計算器。
具有輸入值的向量計算器。

在這個例子中,矢量計算器將尋找最小的 MemoryDB r7g 節點類型,它可以容納根據提供的參數存儲所需的內存來存儲器。請注意,這是一個近似值,您應該測試實例類型以確保它符合您的要求。

根據上述計算方法和範例工作負載中的參數,此向量資料需要 104.9 GB 才能儲存資料和單一索引。在這種情況下,建議使用db.r7g.4xlarge執行個體類型,因為它具有 105.81 GB 的可用記憶體。下一個最小的節點類型太小,無法容納向量工作負載。

由於每個向量索引都使用對儲存的向量資料的參照,並且不會在向量索引中建立額外的向量資料複本,因此索引也會消耗相對較少的空間。這在建立多個索引時非常有用,而且在已刪除部分向量資料並重建 HNSW 圖形的情況下,將有助於為高品質向量搜尋結果建立最佳節點連接。

回填期間記憶體不足

與 Redis OSS 寫入作業類似,索引回填會受到限制。 out-of-memory 如果正在進行回填時 Redis OSS 記憶體已填滿,則會暫停所有回填。如果記憶體可用,回填程序會繼續進行。當回填由於內存不足而暫停時,也可以刪除和索引。

交易

命令FT.CREATE,,FT.DROPINDEXFT.ALIASADDFT.ALIASDEL,和不FT.ALIASUPDATE能在事務上下文中執行,也就是說,不是一個 MULTI/EXEC 塊內或 LUA 或函數腳本中執行。