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

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

向量搜尋功能和限制

向量搜尋可用性

R6g, R7g和 T4g 節點類型支援向量搜尋式 MemoryDB 組態,且可在提供 MemoryDB 的所有 AWS 區域中使用。

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

參數限制

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

項目 最大值
向量中的維度數目 32768
可以建立的索引數目 10
索引中的欄位數目 50
FT.SEARCH 和 FT.AGGREGATE TIMEOUT子句 (毫秒) 10000
FT.AGGREGATE 命令中的管道階段數量 32
FT.AGGREGATE LOAD子句中的欄位數目 1024
FT.AGGREGATE GROUPBY子句中的欄位數目 16
FT.AGGREGATE SORTBY子句中的欄位數目 16
FT.AGGREGATE PARAM子句中的參數數目 32
HNSW M 參數 512
HNSW EF_CONSTRUCTION 參數 4096
HNSW EF_RUNTIME 參數 4096

擴展限制

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

操作限制

索引持久性和回填

向量搜尋功能會延續索引的定義,以及索引的內容。這表示在任何操作請求或事件導致節點啟動或重新啟動時,索引定義和內容會從最新的快照還原,而任何待處理的交易都會從日誌中重播。不需要使用者動作即可啟動此操作。還原資料後,重建會立即作為回填操作執行。這在功能上相當於系統自動為每個定義的索引執行 FT. CREATE命令。請注意,一旦還原資料,但很可能在索引回填完成之前,節點就可供應用程式操作使用,這表示應用程式會再次看到回填 (例如,使用回填索引的搜尋命令可能會被拒絕)。如需有關回填的詳細資訊,請參閱 向量搜尋概觀

索引回填的完成不會在主要 和複本之間同步。應用程式可能會意外看到這種缺乏同步的情況,因此建議應用程式在啟動搜尋操作之前驗證主要和所有複本的回填完成。

快照匯入/匯出和即時遷移

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

不過,不包含索引RDB的檔案不會以此方式受到限制。因此,預覽叢集內的資料可以在匯出之前刪除索引,以匯出至非預覽叢集。

記憶體耗用

記憶體耗用取決於向量數量、維度、M 值和非向量資料數量,例如與向量相關聯的中繼資料,或儲存在執行個體中的其他資料。

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

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

向量的維度取決於您選擇的內嵌模型。例如,如果您選擇使用 AWS Titan 內嵌模型,則維度為 1536。

M 參數代表索引建構期間為每個新元素建立的雙向連結數目。MemoryDB 將此值預設為 16;不過,您可以覆寫此值。較高的 M 參數更適合高維度and/or high recall requirements while low M parameters work better for low dimensionality and/or低回收需求。隨著索引變大,M 值會增加記憶體的消耗,進而增加記憶體消耗。

在主控台體驗中,MemoryDB 在叢集設定下勾選啟用向量搜尋後,會根據您的向量工作負載特性,提供輕鬆選擇正確執行個體類型的方式。

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

範例工作負載

客戶想要在內部財務文件之上建置語意搜尋引擎。他們目前擁有 1M 財務文件,這些文件使用具有 1536 個維度的 titan 內嵌模型,每個文件 10 個向量,沒有非向量資料。客戶決定使用預設值 16 作為 M 參數。

  • 向量:1 M * 10 區塊 = 10M向量

  • 維度:1536

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

  • M 參數:16

透過此資料,客戶可以按一下主控台中的使用向量計算器按鈕,根據其參數取得建議的執行個體類型:

根據對計算器的輸入,向量計算器建議的節點類型。
輸入值的向量計算器。

在此範例中,向量計算器會尋找最小的 MemoryDB r7g 節點類型,該類型可根據提供的參數來存放向量所需的記憶體。請注意,這是近似值,您應該測試執行個體類型,以確保其符合您的需求。

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

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

回填期間記憶體不足

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

交易

命令 FT.CREATEFT.DROPINDEXFT.ALIASADDFT.ALIASDELFT.ALIASUPDATE無法在交易內容中執行,即不在 MULTI/EXEC 區塊內,或在 LUA或 FUNCTION指令碼內。