Iがuser_idsの大きなセットを格納するためのRedisを使用して、そのユーザが以前に割り当てられたこれら IDS、「グループID」の各々としたい:redisの効率的なルックアップテーブル - redisセットを使用して実装されていますか?
User_ID | Group_ID
1043 | 2
2403 | 1
user_idsの数が(かなり大きいです〜1000万)ユニーク グループIDの数は約3 - 5
このLUTのための私の目的はルーチンです:
が与えられたユーザーのためのグループIDを見つけます。その与えられたユーザーと同じ グループIDに
リターン(指定した長さの)他のユーザのリスト
Redisのまたは少なくともこれを行うための慣用的な方法があるかもしれません最も効率的な方法です。もしそうなら、私はそれが何であるか知りたいです。ここでは(Pythonクライアントを使用して)私のワーキング実装の簡易版です:
# assume a redis server is already running
# create some model data:
import numpy as NP
NUM_REG_USERS = 100
user_id = NP.random.randint(1000, 9999, NUM_REG_USERS)
cluster_id = NP.random.randint(1, 4, NUM_REG_USERS)
D = zip(cluster_id, user_id)
from redis import Redis
# r = Redis()
# populate the redis LuT:
for t in D :
r.sadd(t[0], t[1])
# the queries:
# is user_id 1034 in Group 1?
r.sismember("1", 1034)
# return 10 users in the same Group 1 as user_id 1034:
r.smembers("1")[:10] # assume user_id 1034 is in group 1
ので、私は普通のRedisにセットを使用して、このLUTを実装しています。各セットはグループID(1、2、または3)にキーされているため、合計で3つのセットがあります。
これは、実行したいクエリの種類に応じて、このデータを格納する最も効率的な方法ですか?あなたはユーザーごとにグループIDを保存しない限り
をどこかにあなたが得るために5ラウンドトリップが必要になります。セットを使用して
パイプライニングを使用して5つのリクエストを組み合わせることができます。http://redis.io/topics/pipelining –