정말이 문제는 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를 중단시키는 놀라운 방법입니다.
위 내용을 읽을 수 없다면 죄송합니다. 이 이미지를 사용해보십시오. [link] (http://imgur.com/GWG4oxZ) –
다음은 특정 질문에 대한 대답입니다. 이것을하는 것이 올바른 방법일까요? [link] (http://imgur.com/JPDjqN0) –