Skip to content

ベンチマーク

以下の表とグラフは、計測結果のスナップショットから表示しています。ここに載せる結果はすべて同じデータセット、同じクエリキャッシュ設定で計測しています。

再現可能

リポジトリを clone して、次の順に実行します。

bash
# Docker Compose と Rye が必要です。
make bench-up

# "Seed Data Load Complete" と MygramDB の "server_ready" が出るまで待ちます。
make bench-logs

make bench-run
make bench-down

bench-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)

クエリタイプマッチ数MySQLMygramDB高速化
Multi-word ("quantum physics")1042928.44ms15.19ms193x
Medium-freq ("quantum")1,9612072.03ms62.75ms33x
Low-freq ("algorithm")2,498375.14ms12.78ms29x
Rare term ("fibonacci")841172.29ms53.66ms22x

CJK検索レイテンシ(SORT id LIMIT 100)

CJK検索レイテンシ(SORT id LIMIT 100) (p50, log scale)

クエリマッチ数MySQLMygramDB高速化
日本32,282917.03ms20.64ms44x
東京6,989201.51ms4.39ms46x
科学1,5513.35ms2.49ms1x

COUNT性能

COUNT性能 (p50, log scale)

クエリタイプカウントMySQLMygramDB高速化
Medium-freq ("quantum")1,9612000.08ms82.76ms24x
Low-freq ("algorithm")2,498469.95ms14.06ms33x

結果一致性

クエリMySQLMygramDB一致
quantum1,9611,961一致
algorithm2,4982,498一致
日本32,28232,282一致
科学1,5511,551一致

並列スループット

並列スループット — QPS

クエリ: "algorithm"、接続数ごとに10秒。

接続数MySQL QPSMygramDB QPSMySQL p50MygramDB p50
12.5183399.71ms11.86ms
47.09245569.23ms16.45ms

メモリ使用量

ドキュメント数インデックスドキュメント+テキストRSS合計100万件あたり
1,100,000152MB1.78GB3.41GB~3.1GB

Docker Desktopには32 GiBを割り当て、コンテナからは31.29 GiBが利用可能でした。

verify_text モード

  • off(デフォルト): メモリ使用量は少ないですが、n-gramの偽陽性を含む場合があります。
  • all: ドキュメントテキストを保持してポストフィルタ検証を行い、この計測ではMySQL FULLTEXTと同じ件数を返しました。

アーキテクチャの違いはMySQL FULLTEXTが遅い理由を、製品ごとの使い分けは比較ページをご覧ください。