[Redis] HyperLogLog

반응형

이번 글에서는 redis의 unique count 기능인 HyperLogLog에 대해 알아보겠습니다.

1. HyperLogLog란?

효율적인 unique item count 기능을 제공해주는 기능입니다.

예를 들어 아래와 같이 특정 사이트에 방문자수를 count 해주는 기능이 있을때 정확한 방문자수의 집계를 위해선, 동일 정보를 가진 방문자는 count에서 제외해야 합니다.

이를 구현하기 위해 기존에는 모든 unique 방문자가 들어올때마다 해당 정보를 저장해 놓고, 매번 해당 정보와 방문자를 비교하는 방법으로밖에 구현할 수 없었습니다. 따라서 대규모 사용자가 접속하는 facebook과 같은 서비스에서는 막대한 비용이 들 수 밖에 없는 구조였습니다.

image.png

만약 redis의 set을 사용해 구현한다고 하더라도, 막대한 storage와 time complexity가 요구되었습니다.

이와 같은 문제점을 해결하고 저렴한 비용과 빠른 속도로 unique count 기능을 제공해주는 것이 redis의 HyperLogLog입니다 👏. HyperLogLog는 unique item이 add 될 때마다 counter의 값을 increment 합니다. 만약 unique하지 않은 item이 add 될 경우 아무일도 일어나지 않습니다.

😎 중요!!

여기서 중요한점은 HyperLogLog는 unique 데이터의 값을 저장해놓지 않는다는 점입니다. 따라서 이전과 달리 각각의 unique item을 저장해 놓을 대규모 storage가 필요하지 않습니다. 마찬가지로 데이터를 저장해놓지 않기 때문에 내부의 데이터를 확인할 수도 없습니다.

HyperLogLog를 사용하는 방법은 아래와 같습니다.

2. pfadd

redis-client를 열고 pfadd 명령어를 사용해 hyperloglog key인 website에 alex와 bob을 저장합니다. 이때 pfadd에 unique한 item이 포함되었을 경우 1을 리턴하며, 그렇지 않을 경우에는 0을 리턴합니다.

website에 alex와 bob이 입력된 것이 처음이므로 unique item을 의미하는 1을 리턴했습니다.

image.png

다시한번 pfadd를 사용해 website에 alex를 add 해보겠습니다. 이번에는 0을 리턴했습니다. 이미 위에서 website에 alex를 add한 적이 있으므로, unique한 값이 아님니다. 따라서 0을 리턴합니다.

image.png

3. pfcount

pfcount를 사용하면 unique item의 갯수를 확인할 수 있습니다.

image.png

4. pfmerge

pfmerge를 사용하면 두개의 HyperLogLog를 하나의 HyperLogLog로 합칠 수 있습니다.

image.png

pfmerge를 수행한뒤 pfcount를 입력해보면, 두개의 hyperloglog에서 중복되었던 item은 1개로 인식하는것을 확인할 수 있습니다.

image.png


참고 자료 : https://www.udemy.com/course/redis-bootcamp-for-beginners/


추천서적

 

Redis Essentials

COUPANG

www.coupang.com

파트너스 활동을 통해 일정액의 수수료를 제공받을 수 있음


반응형

'Redis' 카테고리의 다른 글

[Redis] CRUD with Spring Boot -2  (0) 2020.08.21
[Redis] CRUD with Spring Boot -1  (0) 2020.08.21
[Redis] Geo  (0) 2020.08.21
[Redis] Publish/Subscribe  (0) 2020.08.20
[Redis] Transaction  (0) 2020.08.20

댓글

Designed by JB FACTORY