在 Milvus 向量数据库中,索引类型决定了向量检索的效率和精度。不同的索引类型适用于不同的应用场景和数据规模。以下是 Milvus 中几种常见的索引类型:
1. FLAT(Brute Force)
-
类型:暴力搜索(精确检索)
-
用途:适用于小规模的数据集,或者对查询精度要求非常高的场景。
-
特点:
-
使用暴力搜索(全量搜索)方法来查找最接近的向量。
-
每次查询时,都会计算所有向量与查询向量的距离,因此计算量较大,查询速度慢。
-
查询结果是精确的。
-
对数据规模大的情况,效率非常低。
-
-
适用场景:数据集较小,或对结果精度要求极高时使用。
2. IVF_FLAT(Inverted File with Flat Quantization)
-
类型:基于倒排文件的索引,结合了倒排文件和精确搜索(Flat)。
-
用途:适用于中等规模的高维数据集,支持快速的近似搜索。
-
特点:
-
首先通过聚类(例如 K-means)将向量划分为多个簇,然后在查询时只在相关的簇中进行搜索。
-
在每个簇内,仍然进行精确的暴力搜索(FLAT),因此仍然能保证查询结果的精度。
-
查询过程:首先找到查询向量所属的簇,再在该簇内进行精确搜索。
-
适用于较大数据集,能减少搜索空间,提高效率。
-
-
适用场景:数据集较大时,既需要较高精度又要提高查询速度。
3. IVF_SQ8(Inverted File with Scalar Quantization 8-bit)
-
类型:基于倒排文件和标量量化(Scalar Quantization)的索引。
-
用途:适用于对存储和计算有较高要求的场景,适合大规模数据集。
-
特点:
-
与 IVF_FLAT 相似,首先对数据进行簇划分,然后对每个簇内的向量进行 8位标量量化(即对每个向量的每个维度使用8位整数表示)。
-
这种量化方式可以显著减少存储空间,并且加速计算。
-
查询时,首先定位簇,然后在该簇内进行量化后的计算。
-
精度:因为是基于标量量化,查询精度会有所下降,但存储和计算速度有明显提升。
-
-
适用场景:大规模数据集,在存储和计算效率要求高的情况下使用。
4. IVF_PQ(Inverted File with Product Quantization)
-
类型:基于倒排文件和产品量化(Product Quantization)的索引。
-
用途:适用于对大规模高维向量数据的检索,尤其是在存储和计算效率要求较高的场景。
-
特点:
-
IVF_PQ 在 IVF 的基础上进一步结合了 产品量化(PQ),即将每个向量分成多个子向量,并对每个子向量进行量化。
-
这种方法能显著压缩存储空间,同时加速计算。
-
产品量化通过将数据分解为多个子空间并独立量化来减少计算量。
-
查询时,首先定位簇,然后对簇内的向量进行量化后的计算。
-
精度:因为是近似计算,查询精度会比精确搜索(如 FLAT)稍低,但速度会大大提高。
-
-
适用场景:适用于大规模高维向量数据集,特别是当存储和计算效率非常重要时。
5. HNSW(Hierarchical Navigable Small World)
-
类型:基于小世界图(HNSW)的索引。
-
用途:广泛应用于需要高效近似最近邻搜索的场景。
-
特点:
-
HNSW 通过构建图结构来加速近似最近邻搜索,使用多层次的图结构来表示向量之间的关系。
-
图结构具有小世界特性,可以高效地进行图搜索,特别适用于高维数据。
-
查询时,HNSW 从较高的层次开始搜索,逐渐进入更低的层次,以此减少计算量。
-
在查询过程中,HNSW 可以提供较高的精度和速度。
-
优点:查询速度快,精度高,适用于动态数据和实时更新。
-
-
适用场景:适用于需要快速查询的高维数据集,特别是对实时更新有要求的应用。
总结
-
FLAT:适用于小数据集,精确检索。
-
IVF_FLAT:适用于中等规模数据集,精确检索,但速度较快。
-
IVF_SQ8:适用于大规模数据集,使用标量量化来减少存储和加速查询。
-
IVF_PQ:适用于超大规模数据集,结合产品量化进一步加速查询并减少存储开销。
-
HNSW:适用于动态数据和实时查询,提供高效和高精度的近似搜索。