2012-03-28 11 views
6

ソートされたセット生成をより効率的にする方法を提案できる人がいるのでしょうか?Redis:ハッシュフィールドの値に基づいてソートされたセットから値を除外する

私は、ランキングデータが1時間単位で計算され、データベースに格納されるプロジェクトに取り組んでいます。データはメンバーの性別、国などによってフィルタリングできます。処理する必要がある行数は約200万行で、時間がかかります。

Redisでデータを保存/ソート/フィルタリングし、毎日きれいに再構築する、よりリアルタイムなアプローチに移行したいと考えています。

私のプロトタイプでは、たとえば、leaderboard.au.male、leaderboard.au.femaleなどのフィルターの組み合わせごとにソートされたセットを作成しています。このプロセスをスクリプト化しましたが、すべてのケースを処理すると118個のソートセットが作成されます。

理想的には、名前、性別、国名を含むメンバーごとに1つの並べ替えソートセットとハッシュセットが必要です。 Redisを使用すると、ユーザー定義のフィルタに基づいてソートされた設定値のみが返されます。 (例えば、オーストラリアからの男性のランキングのみを取得する)。

これはRedisでネイティブに実行できますか?

答えて

4

私はあなたがすべてのメンバーのためのランキングでセットを保つお勧め:

leaderboard = { id1: score1, id2: score2, ... } 

そして、それぞれのタイプ(性別、国など)のためのセット:

members.male = { id1, id2, ... } 
members.au = { id2, id3, ... } 

次に、あなたがZINTERSTOREを行います:

zinterstore leaderboard.male 2 leaderboard members.male 

あるいは、男性のAUのメンバーのリーダーを取得するには:

zinterstore leaderboard.au.male 3 leaderboard members.male members.au 

あなたは結果のソートセットのためのスコアリングがWEIGHTSAGGREGATEを使用して計算する方法を制御することができます。

結果セットを長く保ちたくない場合は、EXPIREとなり、存在しない場合は新しいセットのみを作成します。

+0

ありがとう、これは最も柔軟な解決策のようです。 –

関連する問題