配置 Chunk Cache
Chunk cache 机制使 Milvus 能够在需要数据之前将数据预加载到查询节点本地硬盘的缓存中。该机制通过减少从磁盘加载数据到内存所需的时间,显著提高了向量检索性能。
背景
在进行查询以检索向量之前,Milvus 需要将数据从对象存储加载到查询节点本地硬盘的内存缓存中。这是一个耗时的过程。在所有数据加载完成之前,Milvus 可能会延迟响应某些向量检索请求。
为了提高查询性能,Milvus 提供了一个 chunk cache 机制,在需要数据之前将数据从对象存储预加载到本地硬盘的缓存中。当收到查询请求时,Segcore 首先检查数据是否在缓存中,而不是在对象存储中。如果数据在缓存中,Segcore 可以快速从缓存中检索数据并将结果返回给客户端。
配置 Chunk Cache
本指南提供了如何为 Milvus 实例配置 chunk cache 机制的说明。配置因 Milvus 实例的安装方式而异。
-
对于使用 Helm Charts 安装的 Milvus 实例
将配置添加到
config
部分下的values.yaml
文件中。有关详细信息,请参阅 使用 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 Index 时,chunk cache 设置也适用。
常见问题
-
如何确定 chunk cache 机制是否正常工作?
建议您在加载 Collection 后检查搜索或查询请求的延迟。如果延迟明显高于预期(例如,几秒钟),可能表明 chunk cache 机制仍在工作。
如果查询延迟长时间保持较高。您可以检查对象存储的吞吐量以确保 chunk cache 仍在工作。在正常情况下,工作中的 chunk cache 会在对象存储上产生高吞吐量。或者,您可以简单地尝试在
sync
模式下使用 chunk cache。