0

ゲームのユーザー ベースが 100 万人で、一度にログインするユーザー数が 10 人程度である場合、Web サイトでアクティブなユーザー数を表示できるようにするには、どのように構成するのが最善でしょうか? あなたは素朴なことをしたくないでしょう(私は思う)SELECT count(*) FROM users WHERE logged_in = 1

4

2 に答える 2

1

テーブルを維持しlogins、ユーザーがログインするたびにこのテーブルに追加し、ユーザーがログオフするときにエントリを削除します。テーブルには有効期限もある可能性があるため、ログインのタイムアウトを考慮して、次のようにクエリを実行できます。

SELECT COUNT(*) FROM dbo.Logins WHERE LoginExpiry < GETDATE()
于 2012-11-08T17:18:10.643 に答える
0

2つのこと。まず、logged_in列にインデックスを配置します。第二に、これは単なるタイプミス (select-column の欠落) であると想定しています。必要なのはカウントのみである場合、これはクエリです。

select count(*) from users were logged_in = 1

別の統計テーブルを保持して、すばやくアクセスしたい任意の数の集計を追跡できます。そして、それはまったく悪い考えではありません。ただし、インデックスを追加すると、この特定のクエリをかなり高速に保つことができます。他の集計ユーザー統計を定期的にレポートする必要が生じたら、その目的のために統計表を作成します。

心に留めておいてください、あなたがそのルートをたどった場合、あなたの統計表はしばしば非常に単純になる可能性があります:

stat_id : int
name : varchar
int_value : int
float_value : float

次に、各ログインが必要なのは...

update stats set int_value += 1 where name = 'logged_in_users';

そして、ログアウトするたびに...

update stats set int_value -= 1 where name = 'logged_in_users';

また、ユーザーを自動ログアウトし、統計テーブルを定期的に「再構築」するジョブの可能性もあります。

于 2012-11-08T17:18:34.780 に答える