首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >这家向量搜索支持异步IO优化了

这家向量搜索支持异步IO优化了

作者头像
用户4035096
发布2026-07-09 19:43:08
发布2026-07-09 19:43:08
200
举报

真前卫, 向量搜索异步IO优化

基于磁盘的向量索引, 如果索引较大(大于内存), 在搜索或rerank(精排)时, 也算是比较重IO的操作.

为了降低IO操作的延迟, PG 17开始引入了异步IO接口, 在文末有响应文章介绍.

vectorchord 从0.4.0版本开始也支持了AIO(包括通过模拟AIO覆盖了PG 17以前的版本).

详见: https://docs.vectorchord.ai/vectorchord/usage/prefetch.html

IO策略通过几个参数来控制, 分别对应vectorchord的rabitq和graph索引接口search和rerank阶段的IO策略.

  • vchordrq.io_search
  • vchordrq.io_rerank
  • vchordg.io_search
  • vchordg.io_rerank

可设置的值如下

IO策略

描述

支持的 PostgreSQL 版本

read_stream

PostgreSQL 中的异步 I/O 接口

PostgreSQL 17

prefetch_buffer

VectorChord 的模拟异步 I/O 接口, 用作旧版 PostgreSQL

PostgreSQL 13、14、15、16、17

read_buffer

PostgreSQL 中的同步 I/O 接口

PostgreSQL 13、14、15、16、17

三种策略的原理如下, 以io_search为例.

vchordrq索引的io_search参数支持三种配置模式,每种模式对应不同的I/O优化策略和实现细节:

配置参数映射

io_search参数通过PostgresIo枚举定义了三种模式 :

  • read_bufferIo::Plain
  • prefetch_bufferIo::Simple
  • read_streamIo::Stream(仅PostgreSQL 17+支持)

参数转换在vchordrq_io_search()函数中实现 。

实现细节

1. read_buffer (Plain模式)

使用同步的缓冲区读取,没有预取优化 。在搜索阶段使用make_h1_plain_prefetchermake_h0_plain_prefetcher,在重排序阶段使用PlainPrefetcher

2. prefetch_buffer (Simple模式)

使用异步预取缓冲区优化I/O性能 。搜索阶段使用make_h0_simple_prefetcher进行H0元组的预取,重排序阶段使用SimplePrefetcher

3. read_stream (Stream模式)

利用PostgreSQL 17+的ReadStream API进行流式读取 。使用StreamPrefetcherHints::default()配置 。

ReadStream实现

PostgresReadStream结构体实现了流式读取功能 ,通过PostgreSQL的read_stream_begin_relationAPI创建流 。

配置默认值

默认配置根据PostgreSQL版本自动选择 :

  • PostgreSQL 13-16:默认PrefetchBuffer
  • PostgreSQL 17+:默认ReadStream

Notes

这三种模式在maxsim搜索中也有相同的实现模式。io_rerank参数使用相同的配置选项但应用于重排序阶段。每种模式的选择影响内存使用、I/O性能和CPU开销的平衡。

参考

《PG vectorchord 向量索引预热(prewarm)原理》

https://deepwiki.com/search/vchordrqiosearchreadbuffer-pre_9031b9bb-a774-4a7c-ad35-0c0f58dd6714

https://docs.vectorchord.ai/vectorchord/usage/prefetch.html

《PostgreSQL 19 preview - 合理合并 AIO io_uring 的内存映射》

《PostgreSQL 18 preview - bitmap Heap Scan支持AIO批量读》

《PostgreSQL 18 preview - AIO增强 : 增加监控工具、增强测试能力、清理代码、改进错误诊断》

《PostgreSQL 18 AIO & DIO 顶层设计》

《PostgreSQL 18 preview - 异步IO(AIO)应用到缓冲区管理器层面》

《AIO (asynchronous IO) and DIO (direct IO) support for PostgreSQL》

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2025-11-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 digoal德哥 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 真前卫, 向量搜索异步IO优化
    • 配置参数映射
    • 实现细节
      • 1. read_buffer (Plain模式)
      • 2. prefetch_buffer (Simple模式)
      • 3. read_stream (Stream模式)
    • ReadStream实现
    • 配置默认值
  • Notes
  • 参考
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档