购买实例之前,首先需要评估自身业务数据规模,依据数据规模以及业务形态选择合适的索引类型。
步骤1:评估业务向量数据规模
向量数据维度:确认实际使用的向量维度,比如768维、1024维等。如果您使用的是腾讯云向量数据库提供的 Embedding 模型,可以在 模型信息 中确认向量维度。
向量数据规模:评估向量数据的条数,比如100万条、1000万条。评估时建议预留一定的增长空间。
步骤2:选择索引类型
根据预估的向量数据规模、业务写入与检索速度的需求,以及召回率的期望值,确定最适合业务需求的索引类型。
索引类型 | 使用场景 | 适用向量规模 | 召回率 | 检索速度 |
FLAT | 暴力检索,召回率100%,但检索效率较低。 适用于数据量级不大,但对召回率要求严格的场景。 | 10万以内 | 最高,可保证100%召回率 | 慢 |
HNSW | 基于图算法构建索引,可通过调整检索参数提升召回率,具体信息请参见 配置索引参数。 HNSW 索引的性能和召回率较为平衡,适用于绝大多数线上业务场景。 | 10万-1亿 | 95%+,可根据参数调整 | 快 |
IVF 系列 | 基于聚类算法构建的索引,可通过参数调整召回率。 IVF 系列索引内存占用通常较低,同时采用指定部分聚类检索的方案,更适用于上亿规模的数据集。IVF 具体索引类型,请参见 IVF 系列索引应用指南。 | 1亿以上 | 90%+,可根据参数调整 | 快 |
步骤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_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。 |