HyperLogLog가 뭐냐
- 집합의 고유 원소 개수(cardinality)를 추정하는 확률적 자료구조이다.
- 핵심은 정확한 값이 아니라 근사값을 매우 적은 메모리로 구한다는 점이다.
왜 필요한가?
- 예를 들어 오늘 우리 사이트에 방문한 고유 사용자 수를 세고싶다고 가정해보자.
- 가장 간단한 방법
- SET 을 사용해 모든 사용자 ID를 저장하면 정확함. → 사용자가 수천만명이면? 메모리가 엄청 든다.
- HyperLogLog를 사용하면 항상 최대
12KB만 사용하면서 표준 오차 0.81% 이내의 근사값을 준다.
Redis HyperLogLog 기본 명령어 사용 예시
PFADD - 원소 추가 → O(1)
PFADD visitors "user:1" "user:2" "user:3"
PFCOUNT - 고유 원소 수 카운트 → O(1)
PFCOUNT visitors
**→ (integer) 3**
PFMERGE - 여러 HyperLogLog 합치기 → O(N)
PFADD visitors:2025-02-05 "user:1" "user:2"
PFADD visitors:2025-02-06 "user:2" "user:3" "user:4"
PFMERGE visitors:week visitors:2025-02-05 visitors:2025-02-06
PFCOUNT visitors:week
**→ (integer) 4 (user:2는 중복이므로 한 번만 셈)**