2012-10-12 3 views
4

Redis 내에서 데이터 구조를 처리하는 방법을 알아 내려고하고 있습니다. 내가 성취하고자하는 것은 두 개의 매개 변수를 사용하여 이벤트를 계산 한 다음 날짜별로 해당 데이터에 대해 Redis를 쿼리하는 것입니다. 예를 들면 다음 두 가지 매개 변수가 있습니다. 이벤트는 사이트 및 이벤트 유형이라고 부르며 이벤트가 발생한 시간과 함께 호출합니다. 거기에서 사이트 및 이벤트 유형별로 그룹화 된 날짜 범위에서 발생한 이벤트 수를 Redis에 쿼리 할 수 ​​있어야합니다. 그래서Redis에서 여러 키와 날짜가있는 이벤트 계산/쿼리

Oct 3, 2012: 
    site A/event A 
    site A/event A 
    Site B/event A 

Oct 4, 2012: 
    site B/event B 
    site A/event A 
    Site B/event A 

... 그리고 :

여기에 간단한 예를 들어 데이터 세트입니다.

내 질문에 5 주간의 기간 동안 이벤트의 총 수를 알고 싶습니다.

site A/event A ==> 3 events 
    site B/event A ==> 2 events 
    site B/event B ==> 1 event 

나는 등, 해시를 레디 스 '소트 세트 기능을 사용하여 보았다, 그리고 한 : 위의 예에서, 이것은 무엇인가가 될 것이다. Sorted Set가 가장 좋은 방법 인 것처럼 보이지만 Redis의 ZUNIONSTORE 명령을 사용하여 데이터를 쿼리하는 것은 이러한 이벤트가 5 주에 걸쳐 진행될 것이므로별로 적합하지 않은 것처럼 보입니다. 따라서 ZUNIONSTORE 명령에 적어도 35 개의 인수가 필요합니다.

힌트, 생각, 아이디어 등?

도움을 주셔서 대단히 감사드립니다.

+0

"어떤 생각인가요?" - 그래, redis는 범용 데이터 저장소가 아닙니다. 일반 SQL 데이터베이스가 여기에서 수행되지 않을 것이라고 확신합니까? (그러한 쿼리를 처리하도록 작성 되었기 때문에)? –

답변

5

일반적인 RDBMS 또는 MongoDB와 달리 Redis에는 사용할 수있는 풍부한 쿼리 언어가 없습니다. 이러한 상점을 사용하면 상점에 원시 데이터를 누적 한 다음 조회를 사용하여 통계를 계산할 수 있습니다. Redis는이 모델에 적합하지 않습니다.

Redis를 사용하면 실시간 데이터를 계산하고 원시 데이터 대신 직접 저장해야합니다. 다음과 같이 우리가 주 범위 통계에만 관심이 랬 예를 들어

, 나는 데이터를 구조화 것 :

  • 모든 critera 이산, 간단한 해시 객체 대신에 사용할 수 있기 때문에 각 해시 객체의 주

  • 한 해시 객체, 커플 사이트, 이벤트 당 하나 개의 카운터를 zsets. 선택적으로 사이트 당 하나의 카운터 및/또는 이벤트 당 하나의 카운터.

그래서 이벤트는 I 파이프 라인 것, 발생했을 때 레디 스에 다음 명령을

hincrby W32 site_A:event_A 1 
hincrby W32 site_A:* 1 
hincrby W32 *:event_A 1 

그 카운터를 초기화 할 필요가 없습니다 유의하시기 바랍니다. 존재하지 않으면 HINCRBY가 해시 객체를 생성합니다 (해시 객체).

1 주에 대한 통계를 검색하려면 : 통계에서

hgetall W32 

, 당신은 단지 이벤트 당 만 사이트 당 사이트/이벤트 당 카운터를 가지고있다.

몇 주, 파이프 라인의 다음 명령에 대한 통계 검색하려면 다음

hgetall W32 
hgetall W33 
hgetall W34 
hgetall W35 
hgetall W36 

및 언어 등등지도, 사전, 등 연관 배열을 지원하는 경우 매우 간단한 클라이언트 측에서 집계를 (수행 ..).

+0

안녕하세요 디디에, 답장을 보내 주셔서 감사합니다. 당신 말이 맞아요, 레디 스에 고급 카운트 정보 만 저장하려고합니다. 모든 원시 데이터는 다른 곳에 저장됩니다. 당신이 제공 한 예제를 가지고 일할 수있는 것들을 볼 것입니다. 다시 한번 감사드립니다. – andyengle