ログが不足しているだけの場合は、Splunkのようなものを見たいと思うでしょう。
一般に、このメモリ内で高速(リアルタイム)が必要な場合は、たとえば24時間後にエビクションを使用してログインデータの分散キャッシュを作成し、そのキャッシュに過去1時間以内のログインなどを照会できます。
ログインレコードが次のようになっていると仮定します。
public class Login implements Serializable {
public Login(String userId, long loginTime) {..}
public String getUserId() {..}
public long getLoginTime() {..}
public long getLastSeenTime() {..}
public void setLastSeenTime(long logoutTime) {..}
public long getLogoutTime() {..}
public void setLogoutTime(long logoutTime) {..}
String userId;
long loginTime;
long lastSeenTime;
long logoutTime;
}
24時間後の削除をサポートするには、キャッシュに有効期限(TTL)を設定するだけです。
<expiry-delay>24h</expiry-delay>
現在ログインしているすべてのユーザーを照会するには:
long oneHourAgo = System.currentTimeMillis() - 60*60*1000;
Filter query = QueryHelper.createFilter("loginTime > " + oneHourAgo
+ " and logoutTime = 0");
Set idsLoggedIn = cache.keySet(query);
過去1時間のログイン数やアクティブユーザー数を照会するには、次の手順に従います。
long oneHourAgo = System.currentTimeMillis() - 60*60*1000;
Filter query = QueryHelper.createFilter("loginTime > " + oneHourAgo
+ " or lastSeenTime > " + oneHourAgo);
int numActive = cache.keySet(query).size();
(クエリの詳細については、 http://docs.oracle.com/cd/E15357_01/coh.360/e15723/api_cq.htmを参照してください。これらの例はすべてOracle Coherenceによるものです。)
完全に開示するために、私はOracleで働いています。この投稿で表明された意見や見解は私自身のものであり、必ずしも私の雇用主の意見や見解を反映しているわけではありません。