ベンチマーク
MySQL 8.4、170万件の本番データで測定しました。
検索性能(ORDER BY id LIMIT 100)
| クエリタイプ | ヒット率 | MySQL | MygramDB | 高速化 |
|---|
| 超高頻度語 | 75%(128万件) | 2,980ms | 92ms | 32倍 |
| 高頻度語 | 47%(80万件) | 1,876ms | 76ms | 25倍 |
| 中頻度語 | 22%(37万件) | 908ms | 49ms | 19倍 |
COUNT性能
| クエリタイプ | MySQL | MygramDB | 高速化 |
|---|
| 超高頻度語 | 2,891ms | 6.7ms | 431倍 |
| 低頻度語 | 124ms | 0.3ms | 413倍 |
並列性能
| 並列数 | MySQL | MygramDB |
|---|
| 10 | 9割失敗、QPS 0.4 | 全成功、QPS 288 |
| 100 | 実行不可 | 全成功、QPS 372 |
MySQL FULLTEXTが遅い理由
- ディスクI/O: 毎回B-treeをディスクから読む
- 非圧縮: ポスティングリストがそのまま
- キャッシュ頼み: コールド時は2〜3倍遅い
- 並列に弱い: I/O競合で詰まる
MygramDBが速い理由
- 全部メモリ: ディスクアクセスなし
- 圧縮済み: デルタ + Roaringビットマップ
- SIMD活用: ビットマップ演算を最適化
- 暖機不要: 起動直後から本領発揮
Elasticsearchとの比較
| 項目 | MygramDB | Elasticsearch |
|---|
| 導入 | バイナリ1つ | クラスタ構築 |
| データ同期 | binlogで自動 | ETLが必要 |
| レイテンシ | 80ms以下 | 50〜500ms |
| 運用コスト | 低い | 高い |
| 分散 | なし | あり |
詳しくはGitHubをご覧ください。