向量数据库

内存账与成本估算

进阶评估与成本约 20 分钟kp-026

前置知识

一句话定义

向量库的内存账 = 向量本体 × 压缩率 + 索引结构(图/倒排) + 元数据与运行时开销,再乘以副本数;掌握这张账本,就能在动手之前判断一个方案"放不放得下、值不值得买"。

为什么重要

向量检索的成本结构与关系库完全不同:向量本体是内存大户(fp32 下 1 亿条 768 维就是约 300 GB),索引结构次之,而量化(kp-011/012)与磁盘路线(kp-013)的每一分收益都要在账本上兑现。容量估算错误是"上线三个月被迫重构"的最常见原因——要么内存爆掉,要么为用不上的性能多付三倍账单。

前置知识

kp-011(SQ 压缩率)、kp-012(PQ 字节数)、kp-008(HNSW 图内存公式)。

核心概念

原理与机制

三档典型规模的完整账本(768 维、M=16、单副本):

规模 N        向量fp32    向量int8    HNSW图(2M×4B)   合计(fp32/ int8+图)
10 万          0.29 GB     0.07 GB     0.01 GB         0.3 GB / 0.09 GB
1000 万        29.5 GB     7.4 GB      1.28 GB         30.8 GB / 8.7 GB
1 亿           295 GB      74 GB       12.8 GB         308 GB / 87 GB

读法与推论:

  1. 百万级以内:fp32 直接放得下,量化收益有限,优先简单(kp-006 的 Flat 适用域)。
  2. 千万级:int8+图 ≈ 9 GB,一台大内存单机从容;fp32 开始需要认真规划。
  3. 亿级:fp32 方案(300+ GB×副本数)进入专用高内存机型或分布式区间;int8 压到 90 GB 内,PQ(m=96 → 9.6 GB)或 DiskANN(内存≈PQ+图 ≈ 25 GB)进一步降档——这正是 02 模块各压缩算法存在的经济理由。
  4. 十亿级:纯内存不可行,DiskANN/SPANN 类磁盘路线(内存 1~2 成)成为默认,代价是延迟上移(kp-013)。

月费折算:内存型云主机与普通机型的价差约 3~5 倍;1 亿向量 fp32 三副本(≈900 GB 内存)与 int8 三副本(≈270 GB)的月费差距常以千美元计——量化的收益不在 PPT 里,在账单里。

公式或模型

总内存 ≈ N × (d × bytes + 2M × 4B×系数) + 元数据 + 运行时余量(20~30%)
成本(月) ≈ 总内存 × 副本数 ÷ 机型内存单价 + SSD容量 × 盘单价

图示

内存构成(1亿条, int8, M=16):
 ████████████████████████████████░░░░░░ 74GB  向量(int8)
 ██████░░                               13GB  HNSW 图
 ██░░                                   5GB   元数据+标量索引
 ███░░                                  8GB   运行时余量(约20%)
                                        合计 ≈ 100GB → ×副本数

实例或案例

容量评审实录:业务报"预计 5000 万条、1536 维、要求 99.9% 可用(两副本)"。按 fp32 账本:5000 万×1536×4B×2 副本 ≈ 580 GB 内存,内存型机型月费高昂;改用官方建议的 Matryoshka 截断到 256 维 + int8:5000 万×256×1B×2 ≈ 25 GB + 图 ≈ 3 GB + 余量 ≈ 40 GB——先动维度与精度,再谈扩容,是成本优化的第一杠杆(呼应 kp-028)。

直观类比

内存账像装修预算:向量本体是"面积×单价"的大头,索引结构是"水电改造",元数据是"家具",副本是"同一套房装两遍"。先决定"住多大、装什么档次"(维度与精度),再谈户型(分片副本),顺序反了预算必爆。

常见误区

  1. "只算向量不算图"——HNSW 图在高 M、高维场景可占内存 10%~30%,漏算会在压力测试时 OOM。
  2. "量化收益按压缩率线性兑现"——压缩率 4 倍不等于省 4 倍钱:图不压缩、元数据不压缩、还要补 efSearch 的 CPU;账要按合计口径算。
  3. "建索引时的峰值内存 = 稳态内存"——构建期临时结构(候选队列、排序缓冲)可使峰值达稳态 1.5~2 倍,按稳态配机器会在灌数时被打爆。
  4. "副本只翻倍数据"——副本同时翻倍内存、索引与写入流量,是可用性决策(kp-029)不是免费开关。

自测题

  1. 2 亿条 1024 维、M=32、int8、三副本,内存估算?
  2. 答:向量 2e8×1024×1B ≈ 191 GB;图 2e8×64×4B ≈ 48 GB;加 20% 余量 ≈ 287 GB;×3 副本 ≈ 860 GB——fp32 同条件约 3.4 TB,量化必要性一目了然。

  3. 为什么"先降维度、再谈量化"是第一杠杆?
  4. 答:内存与 d 线性相乘,维度减半等于所有项(含索引构建时间)减半,且无精度代偿复杂度(Matryoshka 截断即可);量化只动精度项。

  5. 稳态 100 GB 的库,灌数期要预留多少内存?
  6. 答:按峰值 1.5~2 倍预留,即 150~200 GB,否则索引构建或合并窗口可能 OOM;或采用分批构建+错峰合并。

与其他知识点的关系

kp-011/012 提供压缩率的分子项;kp-008 提供图内存公式;kp-013 用 SSD 换内存改写整张账本;kp-029 把副本与分片乘进总账。

延伸阅读

Jayaram Subramanya et al., "DiskANN…"(NeurIPS 2019)——第 1 节对"十亿级向量的内存不可行性"的账本式论证,是本篇成本视角的原始出处。

相关知识点