0

Mongodb を使用して、ユーザーのステータス (オンライン | オフライン | ビジー) を含むユーザーのデータを保存しています。有効期限はわずか数秒です。数秒経ってもユーザーが表示されない (キープアライブ リクエストを送信する) 場合は、ステータスをオフラインに設定したいと考えています。

このためのスケーラブルなソリューションを探しています。「lastseen」属性を追加して、cron ジョブを実行してステータスを更新することを考えていましたが、スケーラブルではないと思います。

これを行うより良い方法はありますか?Redis または Memcashed を使用してこれを支援するにはどうすればよいですか?

4

1 に答える 1

1

TTL コレクションを使用できます。http://docs.mongodb.org/manual/tutorial/expire-data/

有効な手法の 1 つは、last_seen タイムスタンプを持つセッションのコレクションを作成することです。TTL コレクションは、last_seen タイムスタンプが X 秒以上前になると、セッションを削除するように構成されます。セッションがオンラインである限り、last_seen タイムスタンプを定期的に更新して、クリーンアップされないようにします。

例:

  1. TTL コレクションをセットアップします。

    db.sessions.ensureIndex( { last_seen:1 },{ expireAfterSeconds: 60 } );

  2. ping を実行してセッションを存続させます (セッションが存在しない場合は作成します)。

    db.sessions.update( {_id: , last_seen: }, { upsert:true } );

  3. ユーザーがオンラインかどうかを照会します。

    セッション = db.sessions.find( { _id: } )

    • がドキュメントを返す場合、ユーザーはオンラインです
    • ドキュメントが返されない場合、それらはオフラインです
于 2013-02-06T13:56:46.863 に答える