
类型:向量数据库
简介:存储、索引和管理由深度神经网络和机器学习(ML)模型生成的大规模嵌入向量。
在Milvus中,为了提升存储和查询性能,可以通过内存映射(MMap)和聚类压缩(Clustering Compaction)等功能进行优化。这些优化措施可以有效地减少存储资源消耗,并在数据量巨大的情况下提高查询速度。
一、内存映射优化
内存映射文件(MMap)允许将文件内容直接映射到内存中,这一技术特别适用于内存资源有限,且无法将数据完全加载到内存中的场景。通过启用内存映射,可以在不占用过多内存的情况下,增加数据处理的容量。然而,当数据量远超过可用内存时,查询性能可能会下降,因此需要根据具体情况来配置是否启用内存映射。
1、配置内存映射
从 Milvus 2.4 版本开始,可以在集群部署前调整配置文件,以为整个集群设置默认的内存映射参数。修改后的设置在集群重启后生效。此外,还可以根据需要在运行时动态调整内存映射的设置,进一步优化存储性能。
2、集群级配置
在 Milvus 配置文件 milvus.yaml 中,可以设置是否启用内存映射,并指定存储文件的目录路径。如果未特别指定路径,系统会将内存映射文件默认存储在 {localStorage.path}/mmap 路径下。
3、内存映射配置细分
从 Milvus 2.4.10 起,内存映射设置被细化为四个单独的字段,默认值均为 false:
- queryNode.mmap.vectorField:控制是否启用向量数据的内存映射;
- queryNode.mmap.vectorIndex:控制是否启用向量索引的内存映射;
- queryNode.mmap.scalarField:控制是否启用标量数据的内存映射;
- queryNode.mmap.scalarIndex:控制是否启用标量索引的内存映射。
以上配置可以独立地开启或关闭,可满足不同数据类型的需求。
4、动态配置
在群集运行期间,可以在 Collections 或索引级别动态调整内存映射设置。在Collections 层级,内存映射会应用到集合内所有未索引的原始数据,不包括主键、时间戳和行 ID。这种方法特别适用于大型数据集的综合管理。
若要动态调整 Collections 中的内存映射设置,可使用set_properties() 方法。在这里,可以根据需要在True 或False 之间切换mmap.enabled 。
对于索引级设置,内存映射可专门应用于向量索引,而不会影响其他数据类型。对于需要优化向量搜索性能的 Collections 来说,这一功能非常宝贵。
要为 Collections 中的某个索引启用或禁用内存映射,可调用alter_index() 方法,在index_name 中指定目标索引名称,并将mmap.enabled 设置为True 或False 。
5、在不同部署中自定义存储路径
内存映射文件默认存放在localStorage.path 中的/mmap 目录中。以下是在不同部署方法中自定义此设置的方法:
对于使用 Helm Chart 安装的 Milvus:

对于使用 Milvus Operator 安装的 Milvus:
对于使用 Docker 安装的 Milvus:
6、限制与注意事项
已加载的集合无法启用内存映射,必须确保集合已经释放;
- DiskANN 和 GPU 索引不支持内存映射;
- 内存映射不适用于基于标量字段的索引。
二、聚类压缩
聚类压缩(Clustering Compaction)旨在通过根据标量字段的值重新分配实体,优化大型集合的存储和查询性能。通过将相似数据存储在同一段内,Milvus 可以显著缩小查询范围,从而提高查询效率。
1、聚类压缩的工作原理
Milvus 在向集合中添加数据时,会根据段的容量将数据分段存储。当某个段满时,Milvus 会创建新段继续存储数据。在没有聚类压缩的情况下,搜索时需要遍历多个段,增加了搜索的时间开销。而启用聚类压缩后,Milvus 会根据指定的标量字段将实体分配到不同的段,从而能将搜索范围限制在相关的段内,大幅提升查询效率。
2、启用聚类压缩
(1)全局配置
通过修改 Milvus 配置文件,可以启用聚类压缩功能。配置完成后,Milvus 会按照配置定期自动触发聚类压缩,也可以通过手动方式触发压缩操作。
(2)选择聚类键
为了启用聚类压缩,需要选择一个标量字段作为聚类键。这一字段通常是用来过滤数据的字段,如租户标识等。
(3)触发聚类压缩
聚类压缩可由 Milvus 自动定时触发,或者手动执行。可以根据数据量和查询需求灵活选择触发方式。
(4)性能提升
根据 Milvus 的基准测试,聚类压缩能够显著提高搜索性能。例如,基于 2000 万条 768 维数据的集合,启用聚类压缩后,查询性能提升可达 25 倍。通过减少搜索的实体数量,聚类压缩能够有效提高每秒查询次数(QPS)。












