MySQL用にランキング専用ストレージエンジンを作る話
前提:
- ゲームに限らずランキング機能が必要になるケースは多い
- つまり需要はある
- だが、MySQLで高速なランキング表示は難しい
- 具体的に言うと、以下の要件を満たすのが不可能
- 1行の更新コストが要素数Nに対して O(log N) 以下
- 任意のランキング位置周辺のSELECTコストが O(log N) 以下
- 具体的に言うと、以下の要件を満たすのが不可能
- ならば、専用のストレージエンジンを作ればいいのではないか
いつやるか? 今でしょ! 以下理由
- MySQL 5.5以降?だとストレージエンジンをまたぐトランザクションがまともになってるはず*1
- ランキング専用でいいから、テーブル構造とか固定でいい(つまり実装が簡単!)
- ランキング専用だから、テーブル・ロックで十分(つまり実装が簡単!)
- 更新すると順位がずれる(つまりテーブルの大部分に影響がある)ので行ロック実装するメリットが小さい*2
- ランキング専用でいいから、全データをメモリにもっても問題ない(つまり実装が簡単!)
まあ僕は、今のところやるつもりないけど。