4

私たちの目的は、ユーザーがオンラインだった期間についてのタイムラインを作成することです。(どのユーザーについて話しているのか、どこでオンラインだったかは問題ではありません) オンライン ユーザーに関する情報を取得するには、API メソッド someservice.com/api/?call= whoIsOnlineを呼び出すことができます。

whoIsOnlineメソッドは、現在オンラインのユーザーのリストを提供します。ただし、誰がオンラインでないかに関する情報を取得するための API メソッドはありません。

そのため、 whoIsOnlineから取得した情報を使用してタイムラインを構築する必要があります。もちろん、測定誤差はあります(リアルタイムで情報を追跡することはできません)。2 分ごとにwhoIsOnlineメソッドを呼び出すとします(はい、2 分ごとに cron でスクリプトを実行します)。

たとえば、08:00 にwhoIsOnlineを呼び出すと、

Peter_id
Michal_id
Andy_id

08:02 にwhoIsOnlineを呼び出すと返されます

Michael_id
Andy_id
George_id

ご覧のとおり、Peter はオフラインになりましたが、新しいオンライン ユーザー、George がいます。

利用可能なインストゥルメントは、Db(MySQL) / テキスト ファイル / キー値ストレージ (Redis/memcache)です。それらのいずれか (またはすべて) を自由に選択してください。

だから、このような情報を取得する必要があります

George_id was online...
12 May: 08:02-08:30, 12:40-12:46, 20:14-22:36 
11 May: 09:10-12:30, 21:45-23:00
10 May: was not online

そして今質問...

  1. そのようなタイムラインを実装するために、どのように情報を保存しますか?
  2. ユーザーがオンラインだった期間に関する情報をどのように照会/計算しますか?

追加情報..

  1. オフライン ユーザーに関する情報は更新できません。「現在」オンラインのユーザーのみを更新できます。
  2. ソリューションは柔軟である必要があります。タイムライン情報は、任意のタイムゾーンに関連して表すことができます。
  3. 過去 7 日間の情報のみを保持する必要があります。
  4. オンラインで見られるすべてのユーザーは、データベースで自分の識別子を自動的に取得します。
4

2 に答える 2

1

「オンライン」ステータスを測定するには、2 つの異なる方法があります。

  1. 誰かがページをクリックすると、その後の概念的な間隔、たとえば 5 分間オンラインであると仮定します。したがって、ユーザーが 4:03、4:05、および 4:09 にページをクリックすると、4:03 から 4:09-4:14 のオンライン インターバルが発生します (最後のクリックに関してどのようなアルゴリズム/仮定を行うかによって異なります)。 ); また

  2. 「ハートビート」Javascript や Flash プロセスを使用して、ページが開いている頻度を追跡します。

(1)の方が一般的です。(2) 多くの場合、人々はプライバシーの問題に不安を感じます。これを別の見方で見ると、(1) はパッシブ モニタリングであり、(2) はアクティブ モニタリングです。

(1) には多くのバリエーションがあります。間隔が固定されていない場合があります。ユーザーが表示しているページによって異なる場合があります。これは、仮定や統計的サンプリング、または単なる確率モデルから構築することもできます。最も単純なケースでは、「誰がオンラインですか?」過去 5 分間 (たとえば) に何かをクリックしたユーザーのリストです。これは簡単に把握できます (すべてのページ ビューを記録しているため)。

于 2010-04-18T14:07:32.830 に答える
0

私はこのようなことをします(疑似コード)

UPDATE session_log SET last_online = NOW() WHERE user = ... AND last_online = '10 minutes ago'
IF NOT UPDATED:
    INSERT INTO session_log (last_online, user) VALUES(NOW(), user)

もちろん、(または同様の)列もあるはずですが、そうcreated atすればセッションを簡単に追跡できます。

于 2010-04-18T14:08:43.380 に答える