5 秒ごとにデータベースにクエリを実行して、現在ソフトウェアをアクティブに使用しているユーザーを特定する SQL クエリがあります。アクティブなユーザーが過去 10 秒間にサーバーに ping を実行しました。(テーブルはユーザーアクティビティで正しく更新され、セッションタイムアウトでエントリを削除するスレッドがあり、すべて正しく機能します)。
私が探しているのは、約5秒ごとに頻繁に呼び出されるため、これを行うためのより効率的/迅速な方法です。さらに、データベースには最大 500 人のユーザーが存在する場合があります。言語は Java ですが、質問は実際にはどの言語にも当てはまります。
List<String> r = new ArrayList<String>();
Calendar c = Calendar.getInstance();
long threshold = c.get(Calendar.SECOND) + c.get(Calendar.MINUTE)*60 + c.get(Calendar.HOUR_OF_DAY)*60*60 - 10;
String tmpSql = "SELECT user_name, EXTRACT(HOUR FROM last_access_ts) as hour, EXTRACT(MINUTE FROM last_access_ts) as minute, EXTRACT(SECOND FROM last_access_ts) as second FROM user_sessions";
DBResult rs = DB.select(tmpSql);
for (int i=0; i<rs.size(); i++)
{
Map<String, Object> result = rs.get(i);
long hour = (Long)result.get("hour");
long minute = (Long)result.get("minute");
long second = (Long)result.get("second");
if (hour*60*60 + minute*60 + second > threshold)
r.add(result.get("user_name").toString());
}
return r;