功能和限制

本页详细介绍了矢量搜索功能和限制。

可用性

矢量搜索适用于所有层级和所有受支持区域中的所有 Memorystore for Valkey 版本。

只有在发布日期(2024 年 9 月 13 日)之后创建的实例才支持向量搜索。

索引限制

以下简要介绍了该索引的限制:

  • 索引中的属性数量上限不能超过 10 个。
  • 向量的维度不得超过 32,768。
  • HNSW 的 M 值不得超过 200 万。
  • HNSW 的 EF 构造值不得超过 4096。
  • HNSW 的 EF 运行时值也不得超过 4096。

对性能的影响

在考虑向量搜索的性能时,需要考虑一些重要的变量。

节点类型

向量搜索通过集成专用于执行向量搜索操作的线程池,有助于实现纵向伸缩。这意味着性能将与集群中每个节点上的 vCPU 数量相关联。如需详细了解每种节点类型可用的 vCPU 数量,请参阅集群和节点规范

分片数量

Memorystore for Valkey 会针对所有矢量实现本地编制索引技术。这意味着,存储在每个分片上的索引仅包含该分片中包含的文档。因此,编制索引的速度和总向量数量将随着集群中的分片数量线性扩缩。

由于每个本地索引仅包含单个分片的内容,因此搜索集群需要搜索集群中的每个分片并汇总结果。在向量数量稳定的情况下,增加分片数量会使 HNSW 索引的搜索性能呈对数级提高,而 FLAT 索引的搜索性能则呈线性提高,因为每个本地索引中包含的向量更少。

请注意,由于搜索所有分片所需的工作量增加,因此随着添加更多分片,完成给定搜索请求的可观延迟时间可能会增加。尽管如此,即使是最大的集群也支持单位毫秒级延迟时间。

副本数量

添加其他副本后,系统会将搜索请求负载均衡到读取副本,从而线性提高搜索吞吐量。

缩放事件

调整 Memorystore for Valkey 实例的大小后,系统会移动索引中的文档,以便将数据均匀分布到新的分片数量中。在这种情况下,系统会在后台为跨节点移动的文档编制索引。伸缩操作完成后,您可以监控 FT.INFO 输出中的 mutation_queue_size 值,以了解因调整集群大小而重新编制索引的进度。

内存消耗

向量会被复制,同时存储在键空间和向量搜索算法中。

交易

由于线程池执行任务的异步性质,向量搜索操作不遵循事务语义。