seekdb MLDR 测试
本文介绍如何使用 MLDR 对 seekdb 进行性能测试。
什么是 MLDR
MLDR 全称为 Multi-Lingual Document Retrieval,是一个数据集测试框架,用于评估和测试多语言文档检索系统的性能。支持多种查询类型(BM25、Dense Vector、混合检索等)。
支持的查询类型
| 查询类型 | 说明 | 支持后端 |
|---|---|---|
bm25 | BM25 全文检索 | OceanBase 数据库、seekdb |
dense | Dense 向量检索 | OceanBase 数据库、seekdb |
hybrid_dense_bm25 | Dense+BM25 混合检索 | OceanBase 数据库、seekdb |
评估指标
- Recall@10:前 10 个结果的召回率。
- NDCG@10:归一化折损累积增益。
- 平均查询时间:单次查询的平均响应时间。
环境准备
测试前请按照如下要求进行测试环境准备:
-
Python 需要 3.11 及以上版本。
-
JDK:需使用 11 及以上版本(用于 pyserini)。
-
seekdb:使用服务器模式 seekdb,详细部署操作请参考 通过 yum install 部署 seekdb。
-
部署的 seekdb 所对应的日志盘、clog 盘、data 盘分三块盘,性能级别 PL1,即在启动 seekdb 时,需在
/etc/oceanbase/seekdb.cnf下设置以下参数:port=2881
base-dir=/data/1/seekdb
data-dir=/data/2/seekdb
redo-dir=/data/3/seekdb
测试方案
-
本次测试需使用到 2 台机器,MLDR 部署在一台机器上。seekdb 部署在另一台机器上,seekdb 的规格为 4C8G,其日志盘、clog 盘、data 盘分三块盘,性能级别 PL1。
-
测试数据量:200,000 条。
-
使用 MLDR 数据集,对 seekdb 的召回进行评估。
使用 MLDR 工具手动执行 MLDR 测试
步骤一 :获取 seekdb 连接串
mysql -hxx.xx.xx.xx -P2881 -uroot -p**** -A
步骤二:安装 Java 环境
sudo dnf install java-11-openjdk-devel -y
export JAVA_HOME=/usr/lib/jvm/java-11-openjdk
export JVM_PATH=$JAVA_HOME/lib/server/libjvm.so
步骤三:创建 Python 虚拟环境
-
下载安装 Conda
mkdir -p ~/miniconda3
wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh -O ~/miniconda3/miniconda.sh
bash ~/miniconda3/miniconda.sh -b -u -p ~/miniconda3
rm ~/miniconda3/miniconda.sh -
重新打开终端,初始化 Conda
source ~/miniconda3/bin/activate
conda init --all -
新建和初始化 MLDR 所需的 Python 环境
conda create -n test python=3.11
conda activate test
步骤四:下载 MLDR
git clone https://github.com/oceanbase/ob-mldr-test
cd ob-mldr-test
步骤五:安装 Python 依赖
-
升级 pip
pip install --upgrade pip -
安装依赖
pip install -r requirements.txt
步骤六:配置数据库信息
-
复制示例配置文件
cp config.yaml.example config.yaml -
编辑配置文件,将数据库信息替换为自己的配置
vim config.yaml需要修改的主要配置项如下:
oceanbase.host:数据库主机地址
oceanbase.port:数据库端口号
oceanbase.user:数据库用户名
oceanbase.password:数据库密码
oceanbase.database:数据库名称
embedding.vector_download_url:向量文件下载 URL(如果使用向量检索)
步骤七:一键运行完整测试
# 英文混合检索测试
python mldr_test_runner.py --lang en --query-type hybrid_dense_bm25
# 跳过数据插入(数据已存在)
python mldr_test_runner.py --lang en --query-type hybrid_dense_bm25 --skip-insert
有关参数介绍如下:
| 参数 | 类型 | 默认值 | 说明 |
|---|---|---|---|
--lang | str | en | 测试语言(如:en、zh 等) |
--backend | str | oceanbase | 数据库后端(目前仅支持 oceanbase) |
--query-type | str | bm25 | 查询类型,可选值:hybrid_dense_bm25(混合检索)、dense(向量检索)、bm25(全文检索) |
--skip-insert | flag | False | 跳过数据插入步骤(数据已存在时使用) |
--result-dir | str | 临时目录 | 结果保存目录 |
--config | str | None | 配置文件路径(YAML 格式),默认使用当前目录下的 config.yaml |
测试流程说明
测试框架会自动执行以下步骤:
- 数据插入:插入 200,000 条测试数据并创建索引
- 预热测试(可选):执行一次搜索预热
- 正式测试:执行指定次数的搜索和评估
- 结果输出:显示平均 Recall@10,NDCG@10,平均时延
测试结果
测试结果可参考 seekdb MLDR 测试报告。