1

私は多くのユーザーと一緒にウェブゲームを開発しています。メイン画面には、多くのマーカーが表示された地図が表示されます。各マーカーはユーザーにリンクされており、各ユーザーは、私が表示したいランキング(ポイントで計算)内の位置を持っています。

ランキングの位置を動的に計算するには、ここから次のことがわかりました。

SET @rownum := 0;
SELECT rank, points FROM (
                    SELECT @rownum := @rownum + 1 AS rank, points, uid
                    FROM landings ORDER BY points DESC
                    ) as result WHERE uid=xxxxxxxx

ただし、このクエリは、プレイヤーがマップを未踏のゾーンに移動するたびに、マップにロードされた新しいマーカーごとに発生します。

一方、プレーヤーがゲームを終了するたびに、データベース上のすべてのユーザーのランクフィールドを更新するとどうなりますか?もちろん、これは巨大に聞こえますが、このシナリオは他のシナリオよりも頻度が低くなります。どう思いますか?更新は選択よりもはるかに効率が悪いですか?いくら?

ご協力ありがとうございました!

詳細については編集してください:この描画は画面を示しています。マーカーがたくさんあるマップがあり、画面内のすべてのマーカーについて、前に説明したクエリがトリガーされます(AJAXでマーカーをロードしたとき)。もう1つのオプションは、ユーザーがゲームをプレイし、もちろんポイントの合計数を変更するたびに、データベース内の想定される「ランク」フィールドがデータベース上のすべてのユーザーに対して更新されることです。 ここに画像の説明を入力してください

4

1 に答える 1

0

どちらがより効率的になるかを言うことは不可能です。これは、ポイント列の更新数、テーブル内のレコードの総数、およびランク要求の数に完全に依存します。数値がわかっている場合、または推測できる場合は、ランダムなテストデータを使用してベンチマークします。できない場合は、実装が最も簡単なソリューションを使用し、問題が発生した場合はそれを改善してください。

于 2012-07-04T13:55:34.537 に答える