2014-05-10 11 views
1

일부 보고서를 만들려는 문제에 대한 투표 데이터가 있습니다.Redis를 사용하여 투표 데이터를 저장하는 방법

나는 기준

나이 섹스 소득 교육

다른 문제는 낙태, 총기 규제 등이 될 수 인종 ..

방법은 다음 각 문제에 대한 투표 결과를 표시하려면 Redis를 사용하여이 투표 데이터를 저장 한 다음 보고서를 표시합니까? 제가 작성하려고하는 보고서가 하나 있습니다. 여기

보고서 내가 나이가 투표 데이터를 표시 할 때의 모습입니다

https://docs.google.com/spreadsheets/d/1N-C4pNN_fwb1kNGQck44TIrIAEn-jPZEpEsW6qQ8lh8/edit?usp=sharing

나는 비슷한 보고서를 작성하고 싶지만 그들은 또한 연령과 성별 또는 연령과 소득 또는 소득이 될 수

당신이 내가 만들고자하는 것을 이해하기를 바랍니다. 나는 최종 사용자가 웹 사이트에서 다른 기준을 선택하도록하고이 동적 보고서를 최대한 빨리 작성할 수 있도록하고 싶습니다. 왜 그렇게 할 수 있을까요? MySQL에 이것을 사용하고 싶지 않습니다. Redis가이 문제를 해결하는 데 사용될 수는 있지만 시작하는 방법을 모르겠습니다.

사전에 어떤 포인터라도 제공해 주셔서 감사합니다.

+0

위 내용을 읽을 수 없다면 죄송합니다. 이 이미지를 사용해보십시오. [link] (http://imgur.com/GWG4oxZ) –

+0

다음은 특정 질문에 대한 대답입니다. 이것을하는 것이 올바른 방법일까요? [link] (http://imgur.com/JPDjqN0) –

답변

1

정말이 문제는 PostgreSQL/MySQL과 같은 전통적인 RDBMS에서 가장 쉽게 해결할 수있는 문제입니다.

그러나 Redis에서이 작업을 수행 할 수있는 몇 가지 방법이 있습니다.

한 가지 방법은 단순히 각 투표의 특성을 해시에 저장하는 것입니다.

redis.hmset "vote:123", "age", 26, "abortion", "yes", "gun_control", "undecided" #, ... 

는 또한 레디 스 세트를 원하는 것 (예 : "all_votes") 당신이 투표를 검색 할 redis.keys를 사용하지 않아도, 모든 투표 ID를 포함.

다음 단계는 다른 세트를 만드는 것입니다. 연령대별로 빠르게 볼 수 있기를 원한다면, 각 연령대에 대해 SET (즉, "vote_indexes : age : 18-22")을 작성하고 그 안에 투표 수의 ID를 채워야 할 것입니다 연령대. 투표를 추가하거나 투표를 제거 할 때마다 all_votes SET뿐만 아니라 해당 연령대 SET 및 사용자가 작성한 다른 색인 SET에 추가하거나 제거해야합니다. 데이터베이스 인덱스와 비슷하게 들린다면 정확히 같습니다. 당신이 직접 관리해야한다는 점을 제외하고는 RDBMS로 작성할 필요가없는 여분의 코드입니다.

이제 색인 집합이 생겼으므로 이러한 집합의 교차를 수행하여 일부 쿼리를 수행 할 수 있습니다. 대신 수동으로 자신의 손으로 내장 된 인덱스를 유지

redis.sinter("indexes:age:18-22", "indexes:abortion:yes").count 
# => 20 

, 당신은 단순히 모든 투표를 통해 반복의 길을 갈 수 당신이가는대로 한 번에 희망, 보고서를 작성합니다. 이것은 응용 프로그램 내에서 구현하는 것이 매우 느립니다. 가장 효과적인 옵션은 redis 내에서 실행되는 Lua 스크립팅을 사용하는 것입니다. 기본적으로 Lua 스크립트는 필터 매개 변수를 사용하여 redis로 전달되며 모든 투표를 반복하고 필터링을 수행하여 일치하는 결과 또는 최종 보고서를 반환합니다.

물론 루아를 배워야한다는 것을 의미합니다. 그것의 좋은 작은 언어와 데리러하기 어렵지 만 당신이 이미 알고있는 언어보다 조금 더 어렵습니다 : SQL.

나는 Redis를 좋아하지만 그 필요성을 확신하지 못합니다. 애드혹보고 시스템은 SQL이 문자 그대로 만들어진 것입니다. 성능 문제가있을 때까지 걱정하지 마십시오. SQL이 당신을 얼마나 멀리까지 끌어들일 수 있는지 놀라게 될 것입니다. 일부 성능 문제가 발생하면 Redis는 SQL 결과를 캐싱하고 RDBMS를 중단시키는 놀라운 방법입니다.

+0

Carl님께 감사드립니다. 나는 SQL을 먼저 시도한 다음 당신이 말한 것을 따를 것입니다. 주제에 대한 자세한 생각을 주셔서 다시 한 번 감사드립니다. 이 길로 가기 전에 내가 확인해 줘서 기뻐. –

관련 문제