IVFFlat
一种基于k-means聚类的近似最近邻索引方法,将向量聚为若干簇,查询时只扫描最近的若干簇,内存开销小、构建快,但召回率通常低于HNSW
核心事实
时间轴 (近 90 天)
IVFFlat 将向量空间聚类划分为多个 Voronoi 单元,插入时只计算所属簇并追加,不涉及全局图重构,因此写入吞吐更高,但召回率通常低于 HNSW。
IVFFlat 的 lists 参数通常建议取行数的平方根,但写入密集场景可选用较小 lists(如 100)以降低插入开销。
同时创建 IVFFlat(写入用)和 HNSW(读取用)两个向量索引进行读写分离,可以解决写写阻塞问题,插入吞吐从 50/s 提升到 180/s。
对于写入频繁、数据持续增长、对召回敏感的场景应选择 HNSW;对于数据相对静态、内存紧张、可接受定期重建的场景应选择 IVFFlat。
IVFFlat 要求建索引时表中已有代表性数据,否则聚类中心无法反映真实分布,且新数据写入后列表分布会逐渐失衡、召回率可能下降,需要定期重建索引。
IVFFlat 先用 k-means 把向量聚成若干列表,查询时只扫描最接近查询向量的若干个列表,由 probes 参数控制扫描列表数量。
pg_vectorsearch 的官方公告没有给出基准测试数据集的维度、吞吐量(QPS),也没有直接的 IVFFlat 对比,多客户端吞吐测试被列为待完成项。
根据项目方给出的基准测试数据,Pg_vectorsearch在查询吞吐上超越了pgvector的IVFFlat和HNSW。
pgvector提供IVFFlat和HNSW两种索引类型,分别面向不同的召回率与速度权衡场景。
IVFFlat使用lists(聚类桶数量)和probes(查询时实际扫描桶数)两个参数,lists常取rows/1000(行数不超过百万时)或sqrt(rows),probes通常从sqrt(lists)起步调优。
还有 5 条时间轴事件
全部知识事实 (14)
向量数据库的核心操作是近似最近邻搜索(ANN),通过HNSW、IVF等索引算法将相似度计算加速到毫秒级响应
80%已验证pgvector 是 PostgreSQL 的开源扩展,为关系型数据库原生添加向量数据类型与相似度搜索能力,支持精确最近邻和近似最近邻(HNSW、IVFFlat 索引)两种检索模式
70%待验证IVFFlat 的 lists 参数通常建议取行数的平方根,但写入密集场景可选用较小 lists(如 100)以降低插入开销。
50%待验证IVFFlat 将向量空间聚类划分为多个 Voronoi 单元,插入时只计算所属簇并追加,不涉及全局图重构,因此写入吞吐更高,但召回率通常低于 HNSW。
50%待验证同时创建 IVFFlat(写入用)和 HNSW(读取用)两个向量索引进行读写分离,可以解决写写阻塞问题,插入吞吐从 50/s 提升到 180/s。
50%待验证IVFFlat 要求建索引时表中已有代表性数据,否则聚类中心无法反映真实分布,且新数据写入后列表分布会逐渐失衡、召回率可能下降,需要定期重建索引。
50%待验证对于写入频繁、数据持续增长、对召回敏感的场景应选择 HNSW;对于数据相对静态、内存紧张、可接受定期重建的场景应选择 IVFFlat。
50%待验证IVFFlat 先用 k-means 把向量聚成若干列表,查询时只扫描最接近查询向量的若干个列表,由 probes 参数控制扫描列表数量。
50%待验证pgvector提供IVFFlat和HNSW两种索引类型,分别面向不同的召回率与速度权衡场景。
50%待验证IVFFlat使用lists(聚类桶数量)和probes(查询时实际扫描桶数)两个参数,lists常取rows/1000(行数不超过百万时)或sqrt(rows),probes通常从sqrt(lists)起步调优。
50%待验证IVFFlat在数据分布倾斜或聚类数量设置不当时,会出现扫描桶数不够导致召回率崩塌、扫描桶数太多导致速度退化的两难问题。
50%待验证pgvector 支持 HNSW 和 IVFFlat 两类主流索引;HNSW 召回率高、延迟低但构建慢、内存占用大;IVFFlat 内存开销小、构建快但召回率通常较低。
50%待验证pgvector 在超大规模数据集下,其基于 IVFFlat 或 HNSW 索引的性能往往受限于单机内存和 CPU 资源,难以水平扩展
50%待验证HNSW 和 IVF 是两类主流的近似最近邻索引算法,HNSW 查询速度快、召回率高但内存占用较大
50%