TairVector是基于Tair的向量存储引擎,集存储、检索于一体,提供高性能、实时的向量数据库服务。本文介绍了TairVector的性能测试方法和测试结果。
TairVector支持高性能的向量近似最近邻(ANN)检索,可用于非结构化数据的语义检索、个性化推荐等场景,更多信息请参见TairVector。
测试说明
测试环境
数据库实例:Tair内存型(兼容Redis 6.0),16 GB。
- 与Tair实例为同专有网络(VPC)的ECS实例,且与Tair通过专有网络连接。
- Linux操作系统。
- 已安装Python 3.7及以上版本。
测试数据
本文使用Sift-128-euclidean
、Gist-960-euclidean
、Glove-200-angular
和Deep-image-96-angular
数据集测试HNSW索引,使用Random-s-100-euclidean
和Mnist-784-euclidean
数据集测试FLAT索引。
数据集名称 | 数据集介绍 | 向量维度 | 向量总数 | 查询数量 | 数据总量 | 距离类型 |
---|---|---|---|---|---|---|
Sift-128-euclidean | 该数据集是基于Texmex的数据集整理,使用SIFT算法得到的图片特征向量。 | 128 | 1,000,000 | 10,000 | 488 MB | L2 |
Gist-960-euclidean | 该数据集是基于Texmex的数据集整理,使用GIST算法得到的图片特征向量。 | 960 | 1,000,000 | 1,000 | 3.57 GB | L2 |
Glove-200-angular | 该数据集是互联网文本数据使用GloVe算法得到的单词向量。 | 200 | 1,183,514 | 10,000 | 902 MB | IP |
Deep-image-96-angular | 该数据集是ImageNet图片经过GoogLeNet模型训练,从最后一层神经网络提取的向量。 | 96 | 9,990,000 | 10,000 | 3.57 GB | IP |
Random-s-100-euclidean | 该数据集为测试工具随机生成,不提供下载链接。 | 100 | 90,000 | 10,000 | 34 MB | L2 |
Mnist-784-euclidean | 该数据集来自于手写数字识别数据库。 | 784 | 60,000 | 10,000 | 179 MB | L2 |
测试工具与测试方法
测试结果
HNSW索引
- 写入性能
本次测试8线程并发写入,重点关注写入的吞吐率(Throughput)。
以下为
ef_construct = 500
时,不同M参数取值下的写入性能。M值越大,HNSW索引的写入性能越差。图 1. Sift数据集 图 2. Gist数据集 图 3. Glove数据集 图 4. Deep数据集 - ANN查询性能
重点关注单线程的ANN查询延迟(Latency)和多线程并发查询的吞吐率。
- 单线程ANN查询延迟
以下为
ef_construct = 500
时,在不同的M和ef_search
参数取值下,TairVector的单线程ANN查询延迟。参数ef_search
取值越大,查询过程中就会遍历更多数据,因此查询延迟越大,但召回率也会更高,请参见召回率的测试结果。图 5. Sift数据集 图 6. Gist数据集 图 7. Glove数据集 图 8. Deep数据集 - 多线程查询吞吐率
以下为
ef_construct = 500
、M = 24
时,在不同的ef_search
参数取值下,TairVector的单线程和4线程并发查询的吞吐率。图 9. Sift数据集 图 10. Gist数据集 图 11. Glove数据集 图 12. Deep数据集
- 单线程ANN查询延迟
- 召回率
HNSW索引的查询召回率跟参数密切相关。以下是不同数据集,以不同的M和
ef_search
参数取值时的Top 10召回率。M和ef_search
越大,查询召回率越高,但是查询速度越慢(参考ANN查询性能结果)。说明 您在使用过程中可以根据需求调整索引参数,平衡查询性能与召回率。图 13. Sift数据集 图 14. Gist数据集 图 15. Glove数据集 图 16. Deep数据集 - 内存效率
内存效率将通过放大系数进行展示,即索引占用的内存大小和向量数据原始大小的比值。以下为在不同M参数取值下,TairVector的内存放大系数。
HNSW索引的内存使用量只受参数M的影响,M值越大,HNSW索引的内存开销也越大。向量维度越高,例如Gist数据集(960向量维度),存储向量数据本身所占用的内存空间越多,存储索引的内存占比越小,放大系数也就越小,同时受M值的影响也越小。
FLAT索引
- 写入性能
以下为FLAT索引的写入吞吐率。
- ANN查询性能
以下为FLAT索引单线程和多线程的ANN查询吞吐率。
- 内存效率
以下为TairVector Flat索引的内存放大系数。
由于Random数据集总量小,额外的数据结构占用的内存较大,因此Random数据集内存放大系数较大。