跳到主要内容
版本:V1.0.0

seekdb MLDR 测试

本文介绍如何使用 MLDR 对 seekdb 进行性能测试。

什么是 MLDR

MLDR 全称为 Multi-Lingual Document Retrieval,是一个数据集测试框架,用于评估和测试多语言文档检索系统的性能。支持多种查询类型(BM25、Dense Vector、混合检索等)。

支持的查询类型

查询类型说明支持后端
bm25BM25 全文检索OceanBase 数据库、seekdb
denseDense 向量检索OceanBase 数据库、seekdb
hybrid_dense_bm25Dense+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 虚拟环境

  1. 下载安装 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
  2. 重新打开终端,初始化 Conda

    source ~/miniconda3/bin/activate
    conda init --all
  3. 新建和初始化 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 依赖

  1. 升级 pip

    pip install --upgrade pip
  2. 安装依赖

    pip install -r requirements.txt

步骤六:配置数据库信息

  1. 复制示例配置文件

    cp config.yaml.example config.yaml
  2. 编辑配置文件,将数据库信息替换为自己的配置

    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

有关参数介绍如下:

参数类型默认值说明
--langstren测试语言(如:enzh 等)
--backendstroceanbase数据库后端(目前仅支持 oceanbase
--query-typestrbm25查询类型,可选值:hybrid_dense_bm25(混合检索)、dense(向量检索)、bm25(全文检索)
--skip-insertflagFalse跳过数据插入步骤(数据已存在时使用)
--result-dirstr临时目录结果保存目录
--configstrNone配置文件路径(YAML 格式),默认使用当前目录下的 config.yaml

测试流程说明

测试框架会自动执行以下步骤:

  1. 数据插入:插入 200,000 条测试数据并创建索引
  2. 预热测试(可选):执行一次搜索预热
  3. 正式测试:执行指定次数的搜索和评估
  4. 结果输出:显示平均 Recall@10,NDCG@10,平均时延

测试结果

测试结果可参考 seekdb MLDR 测试报告