SuperAPI AI 工具集

qdrant-sliding-time-window

数据与分析

查看项目

更新于 10-16 08:48

技能介绍

用途:当只有近期数据需要快速检索、旧数据可过期或可容忍较慢访问时(如社交媒体帖子、新闻、工单、日志、职位列表),指导 Qdrant 的滑动时间窗口扩展。

三种策略:

  1. 分片轮换(推荐):适用于数据有自然时间边界(日、周、月)。做法是创建启用用户自定义分片的集合,为每个时间段创建一个分片键(如 2025-01 至 2025-06),写入当前时段对应的分片键,新时段开始时新建分片键并切换写入,删除保留窗口外最旧的分片键。删除分片键可即时回收全部资源(无碎片、无优化器开销)。应在轮换前预先创建下一时段分片键以免写入中断;查询时用 shard_key_selector 只搜索特定时段以提升效率;分片键可放到特定节点实现冷热分层。
  2. 集合轮换(别名切换):适用于需要按时段使用不同集合配置(如不同量化或存储设置)。做法是每个时段建一个集合,写入别名指向最新集合;查询并行跨所有活跃集合并客户端合并结果;新时段创建新集合并切换写入别名,删除窗口外最旧集合。代价是需要应用层扇出、运维开销更高。
  3. 过滤删除:适用于数据连续到达、无明显时间边界,或想要最简单方案。做法是在每个点上存时间戳 payload 并建 payload 索引,查询时用范围条件过滤,定期用 delete-by-filter 删除过期点。清理应在非高峰分批进行(1 万至 5 万点),避免优化器锁;删除并非免费,被墓碑标记的点会降低搜索性能直到优化器合并段,且磁盘不会立即回收(合并是异步的)。

冷热分层:近期数据需内存内快速检索、旧数据仍需可搜索但可降速时,分片轮换方式把当前分片键放快速存储节点、旧分片键移至廉价节点,所有查询仍走单个集合;集合轮换方式把当前集合保持在内存(always_ram: true),旧集合转为 mmap 或磁盘向量并可用量化。

禁忌:不要对每天百万级删除的高吞吐时序数据使用过滤删除(应改用轮换);不要忘记给时间戳字段建索引(无索引的范围过滤会全表扫描);分片轮换足够时不要用集合轮换;删除分片键或集合前先确认其时段已完全在保留窗口之外;不要跳过预创建下一时段的分片键或集合(轮换期间写入失败难以恢复)。