コアデータゲーム

リアルタイムリーダーボード

ゲーム、スポーツ、ソーシャルアプリのためのライブランキング。スコアの更新と読み取りは並列に実行されます。

書き込み時にソート
常に
上位10件を取得するコマンド
1
プレイヤーの順位を取得するコマンド
1
ステップ 1 / 5
スコアを記録

試合が終わり、結果が書き込まれます。

サンプルセッションplaying
# スコアを記録
hotkv> ZADD board:2026-w42 1500 alice
(integer) 1

実際のHotKVコマンドと応答例を使ったアニメーションのウォークスルーです。任意のステップをクリックすると、そこに移動します。 コマンドと応答は、HotKVで実際に入力し表示されるとおり英語のままです。

課題

リーダーボードは絶えず書き込まれ、絶えず読み取られます。スコアが変わるたびに順位表が並べ替わる可能性があり、プレイヤーは自分の順位をすぐに見たいと考えます。リレーショナルデータベースで順位を再計算する方法は、トラフィックが増えると持ちこたえられません。

HotKVでの解決方法

ソート済みセットは、書き込まれた時点でメンバーをスコア順に保つため、順位表の上位もどのプレイヤーの順位も常にすぐ読み取れます。HotKVは多数のワーカースレッドでコマンドを実行するため、スコアの更新と読み取りが1つのスレッドに集中することはありません。

ステップごとに

コマンドごとに何が起きるか

  1. 01

    スコアを記録

    試合が終わり、結果が書き込まれます。

    ZADD board:2026-w42 1500 alice
  2. 02

    スコアを加算

    Bobがラウンドに勝ちます。スコアが増え、順位がすぐに更新されます。

    ZINCRBY board:2026-w42 250 bob
  3. 03

    上位10件を表示

    書き込みが続く中で、すべてのクライアントと配信オーバーレイが上位を読み取ります。

    ZREVRANGE board:2026-w42 0 9 WITHSCORES
  4. 04

    自分の順位は?

    各プレイヤーが自分の順位を確認できます。

    ZREVRANK board:2026-w42 alice
  5. 05

    ジョブなしで毎週リセット

    週ごとに独自のキーがあり、2週間後に期限切れになります。

    EXPIRE board:2026-w42 1209600
活用シーン

実際のシナリオ

モバイルとコンソールのゲーム

グローバル、地域、フレンド限定のボードはそれぞれ別のソート済みセットで、試合のたびに更新されます。

フィットネスと学習のアプリ

週間の連続記録やポイントのランキングは、毎週新しいキーに切り替えるだけで自動的にリセットされます。

ライブイベントとeスポーツ

結果が次々と届く中、配信のオーバーレイが毎秒順位を読み取ります。

標準搭載

得られるもの

常に並んだランキング

実行すべきランキングジョブはありません。スコアが届くたびに順序が維持されます。

ZADDZINCRBY

上位リストとプレイヤーの順位

それぞれ1つのコマンドで。

ZREVRANGEZREVRANK

多数のワーカースレッド

スコアの更新と読み取りは、1つではなく複数のワーカースレッドに分散されます。

期間ごとのボード

期間ごとに有効期限付きのキーを1つ。

EXPIRE
リファレンス:ZADDZINCRBYZREVRANGEZREVRANK

よくある質問

日次や週次のリーダーボードを作るには?

board:2026-w42のように期間ごとに1つのソート済みセットを使い、有効期限を設定します。

ボードを組み合わせられますか?

はい。ZUNIONSTOREで複数のボードを1つに合算できます。たとえば4つの週間ボードから月間ボードを作れます。

大量の書き込みで読み取りが遅くなりませんか?

HotKVは複数のワーカースレッドでコマンドを実行するため、スコアの更新と読み取りが1つのスレッドに押し込まれることはありません。

関連するユースケース

ご自身のワークロードで試してみましょう

HotKVはRedisプロトコルに対応しているため、既存のクライアントを向けるだけで、これらと同じコマンドを実行できます。