VectorDBBench は、主要なベクトルデータベースおよびクラウドサービスのベンチマーク結果を提供するツールです。このドキュメントでは、VectorDBBench を使用して OceanBase ベクトルデータベースの性能をテストします。VectorDBBench は使いやすさを重視して設計されており、結果の再現や新しいシステムのテストを簡単に行えます。
前提条件
V4.4.0以降のOceanBaseクラスタをデプロイします。
MySQLテナントを作成します。テナントの作成を参照してください。
Python 3.11以降をインストールします。例ではCondaを使用してインストールします。
# 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 # VectorDBBenchに必要なPython環境を新規作成して初期化 conda create -n vdb python=3.11 conda activate vdb業務テナントに接続し、HNSWベクトルインデックス検索に関連するメモリとクエリパラメータを調整します:
-- ob_vector_memory_limit_percentageを30%に設定します。 ALTER SYSTEM SET ob_vector_memory_limit_percentage = 30; -- ob_query_timeoutを24時間に設定します。 SET GLOBAL ob_query_timeout = 86400000000; -- max_allowed_packetを1GBに設定します。 SET GLOBAL max_allowed_packet=1073741824; -- ddl_thread_scoreとparallel_servers_targetは、インデックス作成時の並列度を設定します。 ALTER SYSTEM SET ddl_thread_score = 8; -- DDL操作の並列度 SET GLOBAL parallel_servers_target = 624; -- データベースサーバーが同時に処理できる並列クエリ数ここで、
ob_vector_memory_limit_percentage = 30はあくまで例です。実際の値はテナントのメモリと業務負荷に応じて調整してください。計算ロジックについては ob_vector_memory_limit_percentageを参照してください。
推奨構成
テナントのリソース仕様として、次の構成を推奨します:
パラメータ |
値 |
|---|---|
| メモリ | 64G |
| CPU | 16C |
テスト方法
VectorDBBenchコードのクローン
注意
VectorDBBenchとOceanBaseクラスタは、CPUリソースの競合を避け、テスト結果の信頼性を高めるために、異なるマシンにデプロイすることを推奨します。
テストツールVectorDBBenchのコードをローカルにクローンします。
git clone https://github.com/zilliztech/VectorDBBench.git
依存関係のインストール
VectorDBBenchディレクトリに移動して依存関係をインストールします。
cd VectorDBBench
pip install .
テストの実行
VectorDBBenchを実行します。ここではHNSWインデックスとIVFインデックスの2つの例を示します。
HNSWインデックスの例
# $host、$port、$userは実際のOceanBaseデータベース接続情報に置き換えてください。
vectordbbench oceanbasehnsw --host $host --port $port --user $user --database test --m 16 --ef-construction 200 --ef-search 40 --k 10 --case-type Performance768D1M --index-type HNSW
より詳細なパラメータ情報は以下のコマンドで確認できます:
vectordbbench oceanbasehnsw --help
主なオプションの説明は以下の通りです:
--num-concurrency:並列度を調整するために使用されます。VectorDBBenchは指定された並列度でベクトルクエリを実行し、最大のQPS(Queries Per Second、1秒あたりのクエリ数)を最終結果として選択します。--skip-drop-old/--skip-load:古いデータの削除とデータロードのステップをスキップします。コマンドラインにこれら2つのオプションを追加すると、コマンドはベクトルクエリ操作のみを実行し、古いデータを削除して再度データをロードすることはありません。--k:ベクトルクエリで返す最近傍結果の個数Kを指定します。--ef-search:HNSWクエリパラメータで、クエリ時の候補集合のサイズを表します。--index-type:インデックスタイプを指定します。現在、HNSW、HNSW_SQ、HNSW_BQをサポートしています。
IVFインデックスの例
vectordbbench oceanbaseivf --host $host --port $port --user $user --database test --nlist 1000 --sample_per_nlist 256 --ivf_nprobes 100 --case-type Performance768D1M --index-type IVF_FLAT
主なオプションの説明は以下の通りです:
--sample_per_nlist:各クラスタ中心からサンプリングするデータ量です。デフォルト値は256です。--ivf_nprobes:ベクトルインデックスクエリを実行する際に、最も近いクラスタ中心をいくつ検索するかを設定します。デフォルト値は8です。値が大きいほど再現率は高くなりますが、検索時間も長くなります。--index-type:インデックスタイプを指定します。現在、IVF_FLATをサポートしています。
より詳細なパラメータ情報は以下のコマンドで確認できます:
vectordbbench oceanbaseivf --help
よくある質問
最初のテスト実行が遅いのは正常ですか?
最初のテスト実行時には、AWS S3ストレージから必要なデータセットをダウンロードする必要があるため、時間がかかる場合があります。これは正常な現象です。
テストコードをカスタマイズして変更できますか?
可能です。テストコードをカスタマイズ変更した場合は、pip install . を再度実行してからテストを実行する必要があります。