2011-07-26 16 views
3

いくつかの統計情報(ログインしたユーザー数やSQLクエリなど)があり、定期的に時間依存統計を収集したいと考えています。Redisに時間依存メトリックを保存するには、どのような方法が良いですか?

たとえば、特定の年、月、週、日、時には登録されたユーザーの数を知りたいとします。

私はおそらくレディスは良いフィット感があると思った。しかし、私はそのような統計を保存するための良い戦略を想像することはできません。私が持っている唯一のアイデアは、数日、数週間などのために独立したカウンターを保管し、それらをすべて一度にバンプすることです。

あなたはどのようにしますか?私は良いトリックが必要です。あるいは、レディスは私の仕事にはまったく役に立たないかもしれない。

答えて

1

あなたが必要とするのは、各期間のカウントですが、あなたが提案する複数のカウンターアプローチが良いです。 1回のパイプライントランザクションで5つのカウンタをインクリメントするのはO(1)ですが、設定操作はO(log n + m)でn/mの値が大きい可能性があります。

フランクが提案した解決策は、その場所を持っています - 私は、何が起こったか知る必要があるところで、何か類似したものを使用します。明らかに、各アクションの詳細を格納するには、カウンタよりも多くのメモリが必要ですが、通常は利用可能なRAMの量が多くなり、問題が発生する前に何百万ものレコードを格納できます。

0

私はちょうどスコアがエポック(Unix時間)からの秒単位のタイムスタンプであるソートセットを使用します。ソートされたログインセットを持っていて、2010年にログインがいくつ行われたかを見たい場合は、201:59:59と20100101 00:00:00を秒に変換して、それらを最大と最小の引数であるzcount 。

ここで明らかに難しいのは、自分で時間変換を処理することですが、実際には標準のUnix形式なので非常に簡単です。 %S(少なくともlinuxでは)でdateコマンドを使用するか、システムコールtime()、localtime()、mktime()を使用することができます。また、特定の言語で利用可能な無数の方法これらのシステムコール。

Windowsには同等のパラダイムがあると確信していますが、そこには経験はありません。

+0

私のRAMにはあまりにも多くのデータがありますか? –

+0

あなたはどのくらいの量のRAMを持っているのか、ログインする頻度はわかりません。これはちょうど私がレディスでそれをやる方法です。 – frankc

関連する問題