2012-03-28 1 views
6

소트 된 집합 생성을보다 효율적으로 수행 할 수있는 방법에 대한 제안이 있다면 궁금합니다.Redis : 해시 필드 값을 기준으로 정렬 된 집합에서 값 제외

저는 순위 데이터가 매시간 계산되고 데이터베이스에 저장되는 프로젝트를 진행하고 있습니다. 데이터는 회원 성별, 국가 별 등으로 필터링 할 수 있습니다. 처리해야하는 행은 약 2 백만 개이며 시간이 오래 걸립니다.

Redis에서 데이터를 저장/정렬/필터링하고 일일 깨끗하게 다시 작성하는 좀 더 실시간 접근 방식으로 전환하고자합니다.

프로토 타입에서 나는 가능한 필터의 조합 (예 : leaderboard.au.male, leaderboard.au.female 등)별로 정렬 된 세트를 만듭니다.이 프로세스를 스크립팅했지만 모든 사례를 처리하면 생성 된 118 개의 정렬 된 집합이 있습니다.

이상적으로는 이름, 성별 및 국가가 포함 된 각 구성원에 대해 단일 순위 정렬 집합 및 해시 집합을 갖고 싶습니다. 그런 다음 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

감사합니다. 가장 유연한 솔루션 인 것 같습니다. –