跳到主要内容

向量检索与全文检索基准测试

本页给出向量检索和全文检索在 1000 万行数据上的查询延迟和吞吐,每次查询返回 Top 10 结果。所有数据集都是公开数据集。执行本页的 SQL,可以搭建相同的测试环境。

测试环境​

项目值
WarehouseSmall,单集群,默认配置,AWS us-east-2
客户端同一 region,AWS PrivateLink,HTTP Query API
延迟测试8 QPS。客户端延迟:从发出请求到收到全部结果行。服务端延迟:在 warehouse 内的执行时间。
吞吐测试4–48 个并发客户端,热缓存
热缓存测试前缓存已填满
冷缓存测试开始时缓存为空
Recall@10与全表扫描得到的精确 Top 10 的重合比例

向量检索​

延迟​

单位:ms。480 次请求,0 错误。

缓存延迟p50p90p99Recall@10
热客户端40.843.253.394.6%
热服务端27282994.6%
冷(估算)客户端47269578594.6%
冷(估算)服务端45868076094.6%
备注

冷缓存数据为估算值:向量索引已在内存中,结果行从对象存储读取。

吞吐​

Small warehouse,单集群。单位:ms(客户端)。1,000 个查询向量,0 错误。

并发数QPSp50p90p99
471.246.252.258.9
698.650.558.067.5
8117.057.368.378.1
10141.759.977.294.6
12137.076.895.8115.3
提示

并发数超过 12 后,QPS 稳定在约 120–125,延迟随之上升。如需更高的 QPS,请开启 Multi-Cluster,或使用更大规格的 warehouse。

数据集​

项目值
来源Wikipedia 2023-11 (en),文件 0000–0099
行数10,000,000 × 1024 维 float32(Cohere embed-multilingual-v3)
大小原始 41.0 GB → 数据 19.4 GB + HNSW 索引 7.5 GB
索引HNSW,cosine,m = 32, ef_construct = 200
查询文件 0100 中的 1,000 个向量(不在表中)

加载与查询​

使用 Hugging Face CLI 下载文件,再使用 BendSQL 上传到 stage:

# 1. Download files 0000–0100 (approximately 22 GB)
hf download CohereLabs/wikipedia-2023-11-embed-multilingual-v3 --repo-type dataset \
--revision ade45fb52bd549f5e8c065636fe4160a43c2af36 \
--include "en/00*.parquet" "en/0100.parquet" --local-dir /data/wiki

# 2. Upload the files to a stage
bendsql --query "CREATE STAGE wiki_stage FILE_FORMAT = (TYPE = PARQUET)"
bendsql --query "PUT fs:///data/wiki/en/*.parquet @wiki_stage/"
-- 3. Table with a vector index
CREATE TABLE vec_10m (
id BIGINT,
emb VECTOR(1024),
VECTOR INDEX vidx (emb) distance = 'cosine' m = 32 ef_construct = 200
);

-- 4. Load files 0000–0099 (10,000,000 rows). Hash the string _id to BIGINT.
COPY INTO vec_10m
FROM (SELECT xxhash64(_id) >> 1, emb FROM @wiki_stage)
PATTERN = '00[0-9][0-9][.]parquet';

-- 5. Query vectors from file 0100
CREATE TABLE vec_queries AS
SELECT _id, emb::VECTOR(1024) AS emb
FROM @wiki_stage/0100.parquet
LIMIT 1000;

-- 6. Top 10 query. Use a vector from vec_queries.
SELECT id, cosine_distance(emb, [0.0123, -0.0456, ...]::VECTOR(1024)) AS distance
FROM vec_10m
ORDER BY distance ASC
LIMIT 10;

全文检索​

延迟​

单位:ms。1,677 条查询,0 错误。

缓存延迟p50p90p99
热客户端34.540.552.7
热服务端212638
冷客户端35.699.2253.1
冷服务端2285229

吞吐​

Small warehouse,单集群。单位:ms(客户端)。1,677 条查询,0 错误。

并发数QPSp50p90p99
482.438.145.257.5
6109.643.355.471.8
8120.053.872.190.1
10127.267.485.3103.4
12128.082.2101.0132.2
提示

并发数超过 12 后,QPS 稳定在约 120–125,延迟随之上升。如需更高的 QPS,请开启 Multi-Cluster,或使用更大规格的 warehouse。

数据集​

项目值
来源MS MARCO v2.1 passages,分片 00–05
行数10,000,000 条段落,平均 990 字节
大小原始 9.9 GB → 数据 2.1 GB + 倒排索引 3.5 GB
查询1,677 条 TREC 2021–2023 查询

加载与查询​

# 1. Download shards 00–05 and the queries (approximately 26 GB)
hf download CohereLabs/msmarco-v2.1-embed-english-v3 --repo-type dataset \
--revision e78737fe92ac1b783211b705c12207ca75fcc9b7 \
--include "passages_parquet/*segmented_0[0-5].parquet" "queries_parquet/queries.parquet" \
--local-dir /data/msmarco

# 2. Upload the files to a stage
bendsql --query "CREATE STAGE msmarco_stage FILE_FORMAT = (TYPE = PARQUET)"
bendsql --query "PUT fs:///data/msmarco/*/*.parquet @msmarco_stage/"
-- 3. Table with an inverted index
CREATE TABLE fts_10m (
id VARCHAR,
text VARCHAR,
INVERTED INDEX idx_text (text)
);

-- 4. Load shards 00–04 (9,511,868 rows), then 488,132 rows of shard 05
COPY INTO fts_10m
FROM (SELECT docid, segment FROM @msmarco_stage)
PATTERN = '.*segmented_0[0-4][.]parquet';

INSERT INTO fts_10m
SELECT docid, segment
FROM @msmarco_stage/msmarco_v2.1_doc_segmented_05.parquet
LIMIT 488132;

-- 5. Queries
CREATE TABLE fts_queries AS
SELECT _id, text
FROM @msmarco_stage/queries.parquet;

-- 6. Top 10 query. Use a text from fts_queries in lowercase,
-- with special characters escaped by a backslash (\).
SELECT id, score() AS score
FROM fts_10m
WHERE MATCH(text, 'what is produced by muscle', 'operator=or')
ORDER BY score DESC
LIMIT 10;
向量检索1000 万行
p50
40.8ms
p90
43.2ms
p99
53.3ms
客户端延迟Databend CloudDatabend Cloud
全文检索1000 万行
p50
34.5ms
p90
40.5ms
p99
52.7ms
客户端延迟Databend CloudDatabend Cloud