向量库容量测算台

公式出处

本站只写能指到出处的公式。下面逐条列出:出处链接、查证日期、原文引用,以及这条出处在本站被用在哪里。 取不到出处的,本站不写上站——页面最后有一份「没写的东西」清单。

查证日期统一为 2026-09-21。上游文档会改,公式也可能随版本变; 你要是发现链接里的原文和下面的引用对不上,以链接里的为准,本站的数按引用的版本算。

本站用到的公式

FAISS 官方 wiki · Faiss indexes(索引一览表)

https://github.com/facebookresearch/faiss/wiki/Faiss-indexes
查证日期:2026-09-21
IndexFlatL2 每条向量占 "4*d" 字节。
IndexIVFFlat 每条向量占 "4*d + 8" 字节,原文注明 "The 8 additional bytes are the vector id that needs to be stored."
IndexIVFPQ 每条向量占 "ceil(M * nbits/8)+8" 字节。

本站怎么用它:本站的原始向量占用(N × dim × 每分量字节数)、IVF 每条 8 字节 id、PQ 编码每条 ceil(m × nbits ÷ 8) 字节,都取自这张表。

FAISS 官方 wiki · Guidelines to choose an index(索引选择指南)

https://github.com/facebookresearch/faiss/wiki/Guidelines-to-choose-an-index
查证日期:2026-09-21
HNSW 部分原文:“The memory usage is (d * 4 + M * 2 * 4) bytes per vector.”

本站怎么用它:本站 HNSW 图结构占用 = N × M × 2 × 4 字节,就是这条公式里减去原始向量 d×4 之后剩下的那一项。每条连接 4 字节,×2 对应第 0 层的邻居容量 2M。

FAISS 官方 wiki · The index factory(索引工厂串)

https://github.com/facebookresearch/faiss/wiki/The-index-factory
查证日期:2026-09-21
“PQ16x12”(16 个子码、每码 12 位)对应的 code size (bytes) 写作 “ceil(16 * 12 / 8)”。
原文注明:位数省略时默认取 8。

本站怎么用它:本站 PQ 每条编码字节数用 ceil(m × nbits ÷ 8),向上取整这一步就来自这里。

FAISS 源码 · faiss/impl/ProductQuantizer.h

https://github.com/facebookresearch/faiss/blob/main/faiss/impl/ProductQuantizer.h
查证日期:2026-09-21
成员注释:“size_t M; ///< number of subquantizers”、“size_t dsub; ///< dimensionality of each subvector”、“size_t ksub; ///< number of centroids for each subquantizer”。
码本字段注释:“Centroid table, size M * ksub * dsub. Layout: (M, ksub, dsub)”,类型是 std::vector<float>。

本站怎么用它:本站 PQ 码本占用 = m × 2^nbits × (dim ÷ m) × 4 字节。ksub = 2^nbits,dsub = dim ÷ m,float 取 4 字节。

hnswlib · ALGO_PARAMS.md(参数说明)

https://github.com/nmslib/hnswlib/blob/master/ALGO_PARAMS.md
查证日期:2026-09-21
关于 M 的原文:“The parameter also determines the algorithm’s memory consumption, which is roughly M * 8-10 bytes per stored element.”

本站怎么用它:用作 HNSW 图结构量级的交叉核对:hnswlib 给的是 M × 8–10 字节/条,FAISS 给的是 M × 8 字节/条(M×2×4)。本站取 FAISS 的下限值,因为本站只报下限。

本站算出来的每一项,逐项对照

本站的项公式确定性出处
原始向量数据N × dim × 每分量字节数精确Faiss indexes
HNSW 邻居表N × M × 2 × 4 字节按算法结构推Guidelines to choose an index
PQ 编码N × ceil(m × nbits ÷ 8)按算法结构推The index factory
倒排表向量 idN × 8 字节按算法结构推Faiss indexes
PQ 码本m × 2^nbits × (dim ÷ m) × 4 字节按算法结构推ProductQuantizer.h
粗量化器质心表nlist × dim × 4 字节按算法结构推Faiss indexes(质心表本身是一个 flat 索引)

公式里每一项是什么:N 向量条数;dim 向量维度;M HNSW 每个点的最大出边数;m PQ 的子量化器个数;nbits 每个子码的位数;nlist IVF 的倒排桶数(也就是粗量化器的质心个数);2^nbits 每个子量化器的码字个数(FAISS 源码里叫 ksub);dim ÷ m 每个子向量的维度(源码里叫 dsub)。

单位口径

本站一律用二进制单位:1 KiB = 1024 字节,1 MiB = 1024 KiB,1 GiB = 1024 MiB = 1,073,741,824 字节。 不用 1000 进制的 KB/MB/GB。举个能对表的例子:100 万条 768 维 fp32 向量 =1,000,000 × 768 × 4 = 3,072,000,000 字节 =2.861 GiB(换成十进制的 GB 是 3.072 GB,差了将近 7%,所以口径必须写死)。

本站没写的东西,以及为什么不写

  • 各家向量数据库的对象头长度、内存对齐策略、分配器碎片率——没有一家给出可引用的公开公式,本站不猜。
  • 量化(fp16 / int8 / 二值)对召回率的影响——和数据分布强相关,没有通用公式,本站不评估。
  • 磁盘落盘格式、压缩率、mmap 之后的常驻内存——随实现和操作系统页缓存变化,本站不出数。