配置块缓存
块缓存机制使得在需要之前,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 在需要之前是否将数据从对象存储预加载到查询节点的本地硬盘缓存中。这个参数的默认值是 async
。可能的选项如下:
async
:Milvus 在后台异步预加载数据,不会影响加载集合所需的时间。然而,在加载过程完成后的短时间内检索向量时,用户可能会体验到延迟。这是默认选项。sync
:Milvus 同步预加载数据,可能会影响加载集合所需的时间。然而,在加载过程完成后,用户可以立即执行查询而无需任何延迟。off
:Milvus 不会将数据预加载到内存缓存中。
请注意,当向集合插入新数据或重建集合索引时,块缓存设置也会生效。
常见问题解答
-
如何确定分块缓存机制是否正常工作?
建议你在加载集合后,检查搜索或查询请求的延迟。如果延迟显著高于预期(例如,几秒钟),可能表示分块缓存机制仍在工作。
如果查询延迟长时间保持高位,你可以检查对象存储的吞吐量,以确保分块缓存仍在工作。通常情况下,工作中的分块缓存会在对象存储上生成高吞吐量。另外,你也可以尝试使用“同步”模式的分块缓存。