向量搜索功能和限制 - 适用于 Redis 的 Amazon MemoryDB
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

向量搜索功能和限制

此功能位于 MemoryDB for Redis 预览版中,可能会发生变化。

向量搜索可用性

R6g、R7g 和 t4g 节点类型支持支持矢量搜索的 MemoryDB 配置,并且在以下 Amazon 地区可用:美国东部(弗吉尼亚北部)、美国东部(俄亥俄州)、美国西部(俄勒冈)、亚太地区(东京)和欧洲(爱尔兰)。

参数限制

下表列出了预览中各种向量搜索项目的限制:

项目 最大值
向量中的维数 32768
可以创建的索引数量 10
索引中的字段数量 50
同时执行的索引 FT.CREATE 回填操作的数量 1
FT.SEARCH 和 FT.AGGREGATE 的 TIMEOUT 子句(毫秒) 60000
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 文件中,这会限制数据兼容传输。只有另一个预览版集群才能理解预览版定义的索引格式。因此,带有搜索索引的 RDB 文件只能在启用预览的 MemoryDB 集群之间传输或使用。

但是,不包含索引的 RDB 文件不受这种限制。因此,只要在导出前删除索引,就可以将预览群集中的数据导出到非预览群集。

内存消耗

当前实现向量索引所消耗的内存大约是正式发布版实现所需内存的两倍。

在回填期间内存不足

与 Redis 写入操作类似,索引回填也受到限制。 out-of-memory 如果 Redis 内存在回填过程中已满,则所有回填都将暂停。有可用内存后,回填过程会恢复。当由于内存不足导致回填暂停时,也可以删除内容和编制索引。

事务

命令 FT.CREATEFT.DROPINDEXFT.ALIASADDFT.ALIASDELFT.ALIASUPDATE 不能在事务上下文中执行,也就是说,不能在 MULTI/EXEC 块或 LUA 或 FUNCTION 脚本中执行。