功能和限制

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

可用性

向量搜索功能适用于所有层级的所有 Memorystore for Redis Cluster 版本,以及所有受支持的区域。

只有在 2024 年 9 月 13 日发布日期之后创建的实例才能启用向量搜索。

索引限制

以下概述了索引的限制:

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

对性能的影响

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

节点类型

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

分片数量

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

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

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

副本数量

添加更多副本后,搜索吞吐量会线性增加,因为系统可以将搜索请求负载均衡到读取副本。

缩放事件

调整 Redis 集群的大小后,索引中的文档将被移动,以使数据均匀分布到新的分片数量中。发生这种情况时,跨节点移动的文档将在后台编入索引。伸缩操作完成后,您可以监控 FT.INFO 输出中的 mutation_queue_size 值,以了解因调整集群大小而重新编制索引的进度。

内存消耗

向量会重复存储在 Redis 键空间和向量搜索算法中。

交易

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