2012-06-05 3 views
3

나는 내 ruby ​​웹 응용 프로그램 (레일)에 jeremy/statsd-ruby 클라이언트가있는 batsd (사용하는 statsd) 라이브러리를 사용합니다. 그리고 간단한 방문 통계를 유지해야합니다. 큰! 위의 보석에서 statsd.increment('users.visits') 메서드를 사용합니다.redis batsd (statsd) 카운터

그런 다음이 조작은 새로운 sorted set (zset)을 작성하고 매번 한 요소 ("1338932870<X>1처럼 보임)를 추가합니다. 왜 statsd이 접근 방식을 사용합니까? 더 쉬울 것이고 더 빠를 것 에서 zset이 아닌 HINCRBY 방법을 simlpe 해시와 함께 사용 하시겠습니까?

나는 알고있다. statsd은 잘 알려져 있고 잘 알려진 도구이지만, 그게 레디 스의 스탠다드 패턴 일까? 나는 redis와 nosql을 처음 접했고, 고마워!

답변

4

패키지에 익숙하지 않지만 HINCRBY를 사용하는 경우 메트릭의 마지막 값을 계산하여 Redis로 유지하면됩니다. 나는 통계 패키지가 메트릭의 진화를 저장해야 할 수도 있다고 생각한다.

zset을 사용하면 타임 스탬프 (즉, 시간 세리에)별로 정렬 된 이벤트를 저장하므로이 메트릭의 발전 기록을 유지할 수 있습니다. 마지막 값을 유지하는 것보다 느리며 많은 메모리를 소비하지만 역사는 있습니다. 전체 이야기는 아래 노아의 설명을 보라.

HINCRBY 또는 INCRBY를 사용하여 카운터를 실시간으로 집계하고 zset을 사용하여 시계열을 저장하면 두 가지 일반적인 Redis 패턴이 있습니다.

+0

대단히 감사합니다. – caulfield

+4

사실 이것은 거의 정확하게 우리가 batsd에서 zset을 사용하는 이유입니다. 우리는 기록을 원하며, 우리는이 기록을 쉽게자를 수 있기를 원합니다. 그래서 우리는 그것을 Redis에서 유지하지 않습니다 영원히 (메모리 사용을 제한하기 위해). 다른 레벨의 집계에도 INCRBY를 사용하고 zset과 비슷한 구조로 값을 디스크에 기록합니다. – Noah