购买实例之前,首先需要评估自身业务数据规模,依据数据规模以及业务形态选择合适的索引类型。
步骤1:评估业务向量数据规模
向量数据维度:确认实际使用的向量维度,比如768维、1024维等。如果您使用的是腾讯云向量数据库提供的 Embedding 模型,可以在 模型信息 中确认向量维度。
向量数据规模:评估向量数据的条数,比如100万条、1000万条。评估时建议预留一定的增长空间。
步骤2:选择索引类型
索引类型 | 特点 | 适用向量规模 | 召回率 | 检索速度 |
FLAT | 基于暴力计算,确保 100% 精确召回,适用于小规模精确检索场景。 | 10万以内 | 最高(100%) | 慢 |
HNSW | 基于图算法构建,实现检索性能与召回精度的最佳平衡,适用于大多数线上业务。 | 10万-1亿 | 高(95%+) | 快 |
IVF 系列 | 基于聚类算法,以可控精度损失换取高速检索与更低内存成本,适用于超大规模数据。 | 1亿以上 | 中等(90%+) | 快 |
IVF_RABITQ | 基于倒排与量化技术,在保证高召回率的同时实现高倍压缩,显著降低存储与检索成本。 | 1亿以上 | 高(95%+) | 快 |
步骤3:内存估算
不同的索引类型,其节点内存容量估算方法存在差异。请根据下表中提供的计算公式来预算业务所需的单份数据的内存容量。
注意:
在实际业务读写操作过程中,系统会产生额外的内存消耗。为了确保业务安全稳定运行,避免因内存不足(如发生 Out of Memory,OOM)等情况影响业务的正常使用,建议在计算向量索引所需的内存用量后,额外预留 20% 以上的内存空间作为资源缓冲区(buffer)。
索引类型 | 单份数据内存估算计算公式 | 公共参数 | 其他参数 |
FLAT | 单节点内存(GB)= 数据量 * 向量维度 * 4 * 1.2 / (1024^3) | 数据量:指向量数据的总条数。 向量维度:指向量数据的维度。 4:是一个常数,表示一个浮点数在内存中占用的字节数。 1.2:是一个经验系数,内存 buffer 预留。 1024^3:表示1GB的字节数。 | - |
HNSW | 单节点内存(GB)= 数据量 *(向量维度 * 4 + M * 8)* 1.2/(1024^3) | | M:为 HNSW 索引参数,指定每个节点在检索构图中可以连接多少个邻居节点。取值范围:[4,64]。M 值过大会影响写入效率。若无特殊要求,可直接使用默认参数16。 |
IVF_RABITQ | 单节点内存(GB)= 数据量 * 向量维度 * 4 * 1.2 * 压缩比 / (1024^3) | | 压缩比 = bits/32,其中,bits 为索引参数,指每个维度要量化到的 bit 数。 取值范围 [1, 9],取值越小,压缩程度越高,性能越好,但召回率越低。 |
IVF_FLAT | 单节点内存(GB)= 数据量 * 向量维度 * 4 * 1.2 / (1024^3) | | - |
IVF_PQ | 单节点内存(GB)= 数据量 * 向量维度 * 4 * 1.2 * 压缩比 / (1024^3) | | 压缩比 = M / (4 * 向量维度),其中,M 为 IVF_PQ 系列索引参数,指乘积量化中原始数据被拆分的子向量的数量。 取值要求:原始数据的向量的维度 D(即向量中元素的个数)必须能够被 M整除,M 必须是一个正整数。 取值范围:[1,向量维度]。 |
IVF_SQx | | | 压缩比 = x / 32,其中,x 决定了 IVF_SQ 索引的压缩比,如 IVF_SQ8 索引的 x = 8,压缩比为:8 / 32 = 0.25。 |