混合缓存 (Hybrid Cache): HNSW + Milvus
混合缓存结合了内存中的 HNSW 索引(用于快速搜索)和 Milvus 向量数据库(用于可扩展、持久化的存储)。
概览
混合架构提供:
- 快速搜索:通过内存中的 HNSW 索引实现
- 可扩展存储:通过 Milvus 向量数据库实现
- 持久性:以 Milvus 作为单一事实来源 (Source of Truth)
- 热数据缓存:带有本地文档缓存
架构
┌──────────────────────────────────────────────────┐
│ 混合缓存 (Hybrid Cache) │
├──────────────────────────────────────────────────┤
│ ┌─────────────────┐ ┌──────────────────┐ │
│ │ 内存中的 │ │ 本地缓存 │ │
│ │ HNSW 索引 │◄─────┤ (热数据) │ │
│ └────────┬────────┘ └──────────────────┘ │
│ │ │
│ │ ID 映射 │
│ ▼ │
│ ┌──────────────────────────────────────────┐ │
│ │ Milvus 向量数据库 │ │
│ └────────────── ────────────────────────────┘ │
└──────────────────────────────────────────────────┘
工作原理
写入路径 (AddEntry)
添加缓存条目时:
- 使用配置的嵌入模型生成嵌入
- 将条目写入 Milvus 以实现持久化
- 将条目添加到内存中的 HNSW 索引(如果空间允许)
- 将文档添加到本地缓存
读取路径 (FindSimilar)
搜索相似查询时:
- 生成查询嵌入
- 在 HNSW 索引中搜索最近邻
- 在本地缓存中检查匹配的文档
- 如果在本地缓存中找到:立即返回(热路径)
- 如果未找到:从 Milvus 获取(冷路径)
- 将获取到的文档缓存在本地缓存中,以备将来查询
内存管理
- HNSW 索引:受限于配置的最大条目数
- 本地缓存:受限于配置的文档数量
- 驱逐策略:达到限制时采用 FIFO (先进先出) 策略
- 数据持久性:无论内存限制如何,所有数据都保留在 Milvus 中
配置
基础配置
semantic_cache:
enabled: true
backend_type: "hybrid"
similarity_threshold: 0.85
ttl_seconds: 3600
# 混合缓存特定设置
max_memory_entries: 100000 # HNSW 中的最大条目数
local_cache_size: 1000 # 本地文档缓存大小
# HNSW 参数
hnsw_m: 16
hnsw_ef_construction: 200
# Milvus 配置
backend_config_path: "config/semantic-cache/milvus.yaml"