0

私はオンラインゲームのサーバー側の部分を開発しており、タスクの1つはユーザーランクを計算することです。現時点ではRDBMSを使用して実行されていますが、一部のプレーヤーがゲームに勝つたびに各ユーザー行が更新されます。平均して20人のプレーヤーがオンラインになっている場合、現在はデッドロックが発生しています。

私はその傾向を理解しています-1000人のプレーヤーがいるとデータベースソリューションはまったく機能しません。

Apache / PHPサーバーでリアルタイムでユーザーランクを計算する方法は?よりスマートなデータベースソリューションはありますか?

4

2 に答える 2

2

TRUNCATEランクは、毎回別のテーブルに入れることができます。同様の質問がすでに尋ねられ (そして回答され)、ここで見つけることができます: サーバーを強制終了せずにユーザーランキングを更新する最良の方法

于 2013-01-16T15:34:30.350 に答える
1

ランクを別のテーブルに保存するのはなぜですか? 必要に応じてランクのスコアとクエリを保存するか、ビューを作成します。テーブル全体を更新するのではなく、単一のユーザーに関連するデータのみを更新する必要があります。 InnoDB テーブルを使用している場合、UPDATE クエリは、myISAM で得られるテーブルレベルのロックではなく、行レベルのロックを使用します。

TABLE users
  user_id INT PK
  user_name VARCHAR
  ...

TABLE user_scores
  user_id PK FK
  score INT INDEX
  wins INT INDEX

VIEW v_user_ranks
  SELECT u.user_id, u.user_name, s.score, s.wins
  FROM users u INNER JOIN user_scores s
    ON u.user_id = s.user_id

SELECT *
FROM v_user_ranks
ORDER BY score, wins DESC
LIMIT 10

INSERT INTO user_scores (user_id, score, wins)
  VALUES ($id, $score, $wins)
  ON DUPLICATE KEY UPDATE score=score+$score, wins=wins+$wins
于 2013-01-16T17:18:07.063 に答える