|
百度向量数据库 VectorDB 是一款纯自研高性能、高性价比、生态丰富且即开即用的向量数据库服务,提供高效的向量索引和相似度查询服务。为了让用户更好地了解VectorDB的性能表现,VectorDB性能白皮书详细描述了性能测试环境、测试方法和测试结果。本章节说明性能测试所需的环境与数据集。
数据库规格
测试实例规格如下表格所示:
| 规格项 |
规格信息 |
| 数据库类型 |
标准版 |
| 代理节点数 |
2 |
| 数据节点规格 |
4c8g(4核心,8GB内存) |
| 数据节点数 |
3 |
该规格所支持的最大向量规模,请参见产品规格,并按照以上规格新建向量数据库实例,具体操作的流程,请参见“快速指南-创建实例”。
客户端测试环境
与百度云向量数据库实例为同一地域同一VPC内的云服务器,其环境要求如下:
说明: 在使用BCC连接VectorDB实例时,需要在BCC关联的安全组中配置出站规则,把百度VectorDB实例的IP及端口添加到出站规则中,避免因为安全组的问题导致连接失败。
测试工具
我们基于Go语言自研了性能测试工具ann-benchamrk,用于评估近似最近邻(ANN)检索库的性能测试工具,能够避免客户自行解决客户端依赖,快速进行性能测试和对比。它提供了一套标准的测试数据集和评估指标,可以用于比较不同量级数据集下向量数据库的性能表现。
本测试基于该ann-benchmark进行,以下是测试工具的运行方法:
./bin/ann-benchmark -conf ./conf/conf.toml
| 参数 |
参数含义 |
| -conf |
测试工具的配置文件路径,默认为conf文件夹下的conf.toml文件,具体配置文件中配置项含义,会在测试方法小节中详细介绍 |
数据集
测试过程使用的官方数据集都需要提前下载,测试工具在运行时会检查./dataset目录(ann-benchmark工具的根目录)下是否存在数据集文件,为了确保在使用测试工具时无需另外单独安装环境依赖,百度云向量数据库团队转换提供了parquet文件格式的ann数据集,并制作了Cohere 768维度数据集。具体数据集信息,如下表所示:
| 数据集名 |
数据集介绍 |
向量维度 |
向量数 |
距离类型 |
| SIFT_1M |
官方数据集 |
128 |
1,000,000 |
L2 |
| GIST_1M |
官方数据集 |
960 |
1,000,000 |
L2 |
| COHERE_1M |
官方数据集 |
768 |
1,000,000 |
IP |
测试方法
百度智能云VectorDB采用自研的性能测试工具ann-benchmark进行测试比对,该工具不依赖外部组件,并提供了官方的标准数据集和自制的数据集。本文详细介绍下基于ann-benchmark工具进行数据库性能测试的方法。
准备测试环境
下载测试工具。下载链接:linux-ann-benchmark-1.0.1.tar.gz
下载百度智能云VectorDB提供的数据集文件,下载链接见测试环境小节。
登录百度智能云BCC测试客户端环境(BCC的规格要求,请参见测试环境)。
执行tar -zxvf linux-ann-benchmark-1.0.1.tar.gz命令解压测试工具压缩包。
下载数据集,并放在测试工具目录dataset文件夹下。
修改配置文件
进入测试工具目录,打开配置文件,配置相关参数 执行如下命令,拷贝配置文件,根据需要修改参数:
vim conf/conf.toml
样例配置文件的内容如下所示:
logDir = "./log"
# Config for ann benchmark dataset [Dataset] path = "./dataset" name = "SIFT_1M"
# Config for vector store [VectorStore] name = "Mochow" endpoint = "http://127.0.0.1:5378" user = "root" password = "test_password" database = "benchmark_db" table = "benchmark_table" dropExistingTable = true
# Common Config for Test Case [TestCase] vectorIndex = "HNSW" topK = 10 concurrency = [24, 36, 48] duration = 120 recallRangeForQPSBench = [0.8, 0.995]
# Config for hnsw index build [TestCase.HNSW.Index] M = [16, 32] efConstruction = 200
# Config for hnsw search [TestCase.HNSW.Search] ef = [20, 40, 60, 80, 100, 120, 140, 160, 180, 200, 400, 600, 800, 1000, 1200, 1400, 1600, 1800, 2000]
配置项参数含义如下:
| 配置项 |
参数含义 |
说明 |
| logDir |
测试工具日志目录 |
./log:工具根目录下的log目录 |
| Dataset.path |
测试数据集存放目录名 |
./dataset |
| Dataset.name |
数据集名称 |
支持如下几种:
SIFT_1M:128维,L2相似度度量算法
COHERE_1M:768维,L2相似度度量算法
GIST_1M:960维,IP相似度度量算法
|
| VectorStore.name |
向量数据库名称 |
支持如下两种:
Mochow:即百度智能云VectorDB
Milvus:即Milvus向量数据库
|
| VectorStore.endpoint |
向量数据库的连接地址 |
获取向量数据库实例的内网IP地址与网络端口。可以在实例详情中的网络信息中查看,实际使用时建议添加协议前缀,目前支持http和https |
| VectorStore.user |
连接用户名 |
默认为root |
| VectorStore.password |
向量数据库的API访问密钥 |
如何获取,请参见 账号管理 |
| VectorStore.database |
测试使用的库名称 |
无 |
| VectorStore.table |
测试使用的表名称 |
无 |
| VectorStore.dropExistingTable |
是否删除并清空已存在的测试表 |
TRUE |
| TestCase.vectorIndex |
向量索引类型 |
目前仅支持HNSW |
| TestCase.topK |
向量相似性检索最多返回的记录数 |
默认为10 |
| TestCase.concurrency |
QPS测试Case中使用的并发数 |
QPS测试中会依次尝试concurrency列表中不同的并发数 |
| TestCase.duration |
QPS测试Case的持续时间,单位为秒 |
默认为120s |
| TestCase.recallRangeForQPSBench |
QPS测试的召回率闭区间 |
在召回率范围内的测试集会进行QPS测试 |
| TestCase.HNSW.Index |
向量索引类型为HNSW的索引参数:
|
写入数据集后,会依次使用不同的M和efConstruction值构建索引测试召回率和QPS |
| TestCase.HNSW.Search.ef |
向量索引类型为HNSW的检索参数:
|
在进行召回率和QPS测试时,会依次尝试使用列表中的ef参数测试召回率和QPS。同一数据集,召回率越高,即ef参数设置越大时,QPS越低。在其他配置不变的情况下,若需提高召回率,可适当增加查询参数 ef |
运行测试工具
执行如下命令,运行测试工具。其中,-conf指明配置文件路径,配置文件中配置项的含义,请参见上一小节。
cd linux-ann-benchmark-1.0.1 ./bin/ann-benchmark -conf ./conf/conf.toml
查看测试结果
测试结果
测试结束后,结果会写入到工具根目录的result/benchmark_result_{测试开始时间}格式文件中,内容样例如下:
Mochow {M:16, efc:200} {ef:100} 82.76% 2431.7927
其中每一行为一组测试参数下的测试结果,以空格分割开,每一部分的含义如下:
实例状态
百度智能云VectorDB控制台提供了实例的CPU、内存、QPS、时延等关键性能指标监控,可以在测试过程中观察上述指标的状态,具体观察方法,请参见 查看监控数据。
测试方法
百度智能云VectorDB采用自研的性能测试工具ann-benchmark进行测试比对,该工具不依赖外部组件,并提供了官方的标准数据集和自制的数据集。本文详细介绍下基于ann-benchmark工具进行数据库性能测试的方法。
准备测试环境
下载测试工具。下载链接:linux-ann-benchmark-1.0.1.tar.gz
下载百度智能云VectorDB提供的数据集文件,下载链接见测试环境小节。
登录百度智能云BCC测试客户端环境(BCC的规格要求,请参见测试环境)。
执行tar -zxvf linux-ann-benchmark-1.0.1.tar.gz命令解压测试工具压缩包。
下载数据集,并放在测试工具目录dataset文件夹下。
修改配置文件
进入测试工具目录,打开配置文件,配置相关参数 执行如下命令,拷贝配置文件,根据需要修改参数:
vim conf/conf.toml
样例配置文件的内容如下所示:
logDir = "./log"
# Config for ann benchmark dataset [Dataset] path = "./dataset" name = "SIFT_1M"
# Config for vector store [VectorStore] name = "Mochow" endpoint = "http://127.0.0.1:5378" user = "root" password = "test_password" database = "benchmark_db" table = "benchmark_table" dropExistingTable = true
# Common Config for Test Case [TestCase] vectorIndex = "HNSW" topK = 10 concurrency = [24, 36, 48] duration = 120 recallRangeForQPSBench = [0.8, 0.995]
# Config for hnsw index build [TestCase.HNSW.Index] M = [16, 32] efConstruction = 200
# Config for hnsw search [TestCase.HNSW.Search] ef = [20, 40, 60, 80, 100, 120, 140, 160, 180, 200, 400, 600, 800, 1000, 1200, 1400, 1600, 1800, 2000]
配置项参数含义如下:
| 配置项 |
参数含义 |
说明 |
| logDir |
测试工具日志目录 |
./log:工具根目录下的log目录 |
| Dataset.path |
测试数据集存放目录名 |
./dataset |
| Dataset.name |
数据集名称 |
支持如下几种:
SIFT_1M:128维,L2相似度度量算法
COHERE_1M:768维,L2相似度度量算法
GIST_1M:960维,IP相似度度量算法
|
| VectorStore.name |
向量数据库名称 |
支持如下两种:
Mochow:即百度智能云VectorDB
Milvus:即Milvus向量数据库
|
| VectorStore.endpoint |
向量数据库的连接地址 |
获取向量数据库实例的内网IP地址与网络端口。可以在实例详情中的网络信息中查看,实际使用时建议添加协议前缀,目前支持http和https |
| VectorStore.user |
连接用户名 |
默认为root |
| VectorStore.password |
向量数据库的API访问密钥 |
如何获取,请参见 账号管理 |
| VectorStore.database |
测试使用的库名称 |
无 |
| VectorStore.table |
测试使用的表名称 |
无 |
| VectorStore.dropExistingTable |
是否删除并清空已存在的测试表 |
TRUE |
| TestCase.vectorIndex |
向量索引类型 |
目前仅支持HNSW |
| TestCase.topK |
向量相似性检索最多返回的记录数 |
默认为10 |
| TestCase.concurrency |
QPS测试Case中使用的并发数 |
QPS测试中会依次尝试concurrency列表中不同的并发数 |
| TestCase.duration |
QPS测试Case的持续时间,单位为秒 |
默认为120s |
| TestCase.recallRangeForQPSBench |
QPS测试的召回率闭区间 |
在召回率范围内的测试集会进行QPS测试 |
| TestCase.HNSW.Index |
向量索引类型为HNSW的索引参数:
|
写入数据集后,会依次使用不同的M和efConstruction值构建索引测试召回率和QPS |
| TestCase.HNSW.Search.ef |
向量索引类型为HNSW的检索参数:
|
在进行召回率和QPS测试时,会依次尝试使用列表中的ef参数测试召回率和QPS。同一数据集,召回率越高,即ef参数设置越大时,QPS越低。在其他配置不变的情况下,若需提高召回率,可适当增加查询参数 ef |
运行测试工具
执行如下命令,运行测试工具。其中,-conf指明配置文件路径,配置文件中配置项的含义,请参见上一小节。
cd linux-ann-benchmark-1.0.1 ./bin/ann-benchmark -conf ./conf/conf.toml
查看测试结果
测试结果
测试结束后,结果会写入到工具根目录的result/benchmark_result_{测试开始时间}格式文件中,内容样例如下:
Mochow {M:16, efc:200} {ef:100} 82.76% 2431.7927
其中每一行为一组测试参数下的测试结果,以空格分割开,每一部分的含义如下:
实例状态
百度智能云VectorDB控制台提供了实例的CPU、内存、QPS、时延等关键性能指标监控,可以在测试过程中观察上述指标的状态,具体观察方法,请参见 查看监控数据。

测试结果说明
本文提供了百度智能云VectorDB和某开源系统的对比测试结果报告。性能报告主要主要关注以下两个指标:
本文的所有测试都是在相同规格的实例下进行的,测试配置如下:
测试方法:向量索引选择HNSW,检索最相似Top10的向量,对比百度云向量数据库与某开源向量数据库的QPS表现。
测试规格:数据节点规格均为4核+8GB内存的配置,数据节点数量均为3个。
数据集:测试SIFT128、COHERE768、GIST960三种维度的数据集,数据集大小均为100万。
数据表配置:数据表均为1个分区/分片,分片副本数(含主副本)均为3。
测试结果
SIFT(128维)
128维数据集下,百度智能云VectorDB与某开源向量数据库的QPS对比结果如下图所示:

详细测试结果如下表所示:
| 数据集 |
索引类型 |
召回率 |
QPS |
| 某开源向量数据库 |
百度智能云VectorDB |
| SIFT_1M |
HNSW(M=32,efConstruction=200) |
95% |
3269 |
22261(↑580%) |
| 98% |
3200 |
18942(↑491%) |
| 99% |
3055 |
14572(↑376%) |
COHERE(768维)
768维数据集下,百度智能云VectorDB与某开源向量数据库的QPS对比结果如下图所示:

详细测试结果如下图所示:
| 数据集 |
索引类型 |
召回率 |
QPS |
| 某开源向量数据库 |
百度智能云VectorDB |
| COHERE_1M |
HNSW(M=32,efConstruction=200) |
95% |
1508 |
11223(↑644%) |
| 98% |
1037 |
5866(↑465%) |
| 99% |
658 |
4138(↑528%) |
GIST(960维)
768维数据集下,百度智能云VectorDB与某开源向量数据库的QPS对比结果如下图所示:

详细测试结果如下图所示:
| 数据集 |
索引类型 |
召回率 |
QPS |
| 某开源向量数据库 |
百度智能云VectorDB |
| GIST_1M |
HNSW(M=32,efConstruction=200) |
95% |
958 |
2856(↑198%) |
| 98% |
647 |
1632(↑152%) |
| 99% |
503 |
926(↑84%) |
|