本页详细介绍了矢量搜索功能和限制。
可用性
矢量搜索适用于所有层级和所有受支持区域中的所有 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
值,以了解因调整集群大小而重新编制索引的进度。
内存消耗
向量会被复制,同时存储在键空间和向量搜索算法中。
交易
由于线程池执行任务的异步性质,向量搜索操作不遵循事务语义。