ベンチマーク
以下の表とグラフは、計測結果のスナップショットから表示しています。ここに載せる結果はすべて同じデータセット、同じクエリキャッシュ設定で計測しています。
再現可能
リポジトリを clone して、次の順に実行します。
bash
# Docker Compose と Rye が必要です。
make bench-up
# "Seed Data Load Complete" と MygramDB の "server_ready" が出るまで待ちます。
make bench-logs
make bench-run
make bench-downbench-down はベンチマーク用のコンテナとボリュームを削除します。ベンチマーク用Compose設定ではMygramDBのクエリキャッシュを無効にしています。
計測条件
1,100,000件のWikipedia記事、MySQL 8.4.10 FULLTEXT(ngram パーサー)、MygramDB v1.9.0、verify_text: all、クエリキャッシュ無効。レイテンシは10回計測のp50です。
検索レイテンシ(SORT id LIMIT 100)
検索レイテンシ(SORT id LIMIT 100) (p50, log scale)
| クエリタイプ | マッチ数 | MySQL | MygramDB | 高速化 |
|---|---|---|---|---|
| Multi-word ("quantum physics") | 104 | 2928.44ms | 15.19ms | 193x |
| Medium-freq ("quantum") | 1,961 | 2072.03ms | 62.75ms | 33x |
| Low-freq ("algorithm") | 2,498 | 375.14ms | 12.78ms | 29x |
| Rare term ("fibonacci") | 84 | 1172.29ms | 53.66ms | 22x |
CJK検索レイテンシ(SORT id LIMIT 100)
CJK検索レイテンシ(SORT id LIMIT 100) (p50, log scale)
| クエリ | マッチ数 | MySQL | MygramDB | 高速化 |
|---|---|---|---|---|
| 日本 | 32,282 | 917.03ms | 20.64ms | 44x |
| 東京 | 6,989 | 201.51ms | 4.39ms | 46x |
| 科学 | 1,551 | 3.35ms | 2.49ms | 1x |
COUNT性能
COUNT性能 (p50, log scale)
| クエリタイプ | カウント | MySQL | MygramDB | 高速化 |
|---|---|---|---|---|
| Medium-freq ("quantum") | 1,961 | 2000.08ms | 82.76ms | 24x |
| Low-freq ("algorithm") | 2,498 | 469.95ms | 14.06ms | 33x |
結果一致性
| クエリ | MySQL | MygramDB | 一致 |
|---|---|---|---|
| quantum | 1,961 | 1,961 | 一致 |
| algorithm | 2,498 | 2,498 | 一致 |
| 日本 | 32,282 | 32,282 | 一致 |
| 科学 | 1,551 | 1,551 | 一致 |
並列スループット
並列スループット — QPS
クエリ: "algorithm"、接続数ごとに10秒。
| 接続数 | MySQL QPS | MygramDB QPS | MySQL p50 | MygramDB p50 |
|---|---|---|---|---|
| 1 | 2.51 | 83 | 399.71ms | 11.86ms |
| 4 | 7.09 | 245 | 569.23ms | 16.45ms |
メモリ使用量
| ドキュメント数 | インデックス | ドキュメント+テキスト | RSS合計 | 100万件あたり |
|---|---|---|---|---|
| 1,100,000 | 152MB | 1.78GB | 3.41GB | ~3.1GB |
Docker Desktopには32 GiBを割り当て、コンテナからは31.29 GiBが利用可能でした。
verify_text モード
off(デフォルト): メモリ使用量は少ないですが、n-gramの偽陽性を含む場合があります。all: ドキュメントテキストを保持してポストフィルタ検証を行い、この計測ではMySQL FULLTEXTと同じ件数を返しました。
アーキテクチャの違いはMySQL FULLTEXTが遅い理由を、製品ごとの使い分けは比較ページをご覧ください。