配置块缓存
大块缓存机制使 Milvus 能够在需要数据之前将其预先加载到查询节点本地硬盘的缓存中。这种机制缩短了将数据从磁盘加载到内存所需的时间,从而大大提高了向量检索性能。
背景介绍
在进行向量检索查询之前,Milvus 需要将数据从对象存储加载到查询节点本地硬盘的内存缓存中。这是一个耗时的过程。在所有数据加载完毕之前,Milvus 可能会延迟响应某些向量检索请求。
为了提高查询性能,Milvus 提供了一种块缓存机制,在需要数据之前将数据从对象存储预加载到本地硬盘的缓存中。当收到查询请求时,Segcore 会首先检查数据是否在缓存中,而不是对象存储中。如果数据在缓存中,Segcore 就能快速从缓存中获取数据,并将结果返回给客户端。
配置大块缓存
本指南说明了如何为 Milvus 实例配置块缓存机制。配置因安装 Milvus 实例的方式而异。
-
对于使用 Helm Charts 安装的 Milvus 实例
将配置添加到
values.yaml文件的config部分。有关详细信息,请参阅使用 Helm Charts 配置 Milvus。 -
对于使用 Docker Compose 安装的 Milvus 实例
将配置添加到用于启动 Milvus 实例的
milvus.yaml文件。有关详细信息,请参阅使用 Docker Compose 配置 Milvus。 -
对于使用 Operator 安装的 Milvus 实例
将配置添加到
Milvus自定义资源的spec.components部分。有关详情,请参阅使用 Operator 配置 Milvus。
配置选项
queryNode:
cache:
warmup: async
warmup 参数决定 Milvus 是否在需要之前将数据从对象存储预加载到查询节点本地硬盘的缓存中。该参数默认为disable 。可能的选项如下:
async:Milvus 在后台异步预加载数据,这不会影响加载 Collection 所需的时间。不过,在加载过程完成后的短时间内,用户在检索向量时可能会遇到延迟。 这是默认选项。sync:Milvus 会同步预加载数据,这可能会影响加载 Collection 所需的时间。不过,用户可以在加载过程完成后立即执行查询,不会有任何延迟。disable:Milvus 不会将数据预加载到内存缓存中。
请注意,大块缓存设置也适用于向 Collection 中插入新数据或重建 Collection 索引的情况。
常见问题
-
如何确定块缓存机制是否正常工作?
建议你在加载 Collection 后检查搜索或查询请求的延迟。如果延迟时间明显高于预期(如几秒),则可能表明分块缓存机制仍在工作。
如果查询延迟长时间居高不下。可以检查对象存储的吞吐量,以确保分块缓存仍在工作。在正常情况下,工作中的分块缓存会在对象存储上产生高吞吐量。或者,也可以在
sync模式下尝试使用块缓存。