【发布时间】:2011-10-03 00:35:54
【问题描述】:
我想使用 redis 来存储大量的 user_ids 和其中的每一个 ids,该用户之前分配到的“组 id”:
User_ID | Group_ID
1043 | 2
2403 | 1
user_id 的数量相当大(~ 1000 万);唯一的数量 group ids 大约是 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 sets 实现了这个 LuT;每组都键入一个组 ID(1、2 或 3),因此总共有三组。
考虑到我要针对它运行的查询类型,这是存储这些数据的最有效方式吗?
【问题讨论】:
标签: database data-structures redis