HyperLogLog란 하나의 set에서 cardinality(the number of unique data, 유니크한 데이터의 수)를 추정하기 위한 데이터 구조입니다.
즉, 유니크 데이터 수를 구하는 전용 자료구조 입니다.
그래서 원본 데이터가 뭔지는 제공해줄 수 없습니다. 넣을 때 카운트를 계산할 수 있게 넣어 놓지만 원본 데이터를 유지하지는 않습니다.
HyperLogLog를 이용하면 작은 데이터 공간을 이용해서 많은 수의 데이터의 cardinality를 추정치로 계산할 수 있습니다.
Redis에서는 HyperLogLog를 지원하는 커맨드들이 있습니다.
<aside> ❗
HyperLogLog가 어떻게 작은 사이즈의 데이터구조를 가지고 많은 수의 데이터의 unique count(cardinality)를 계산할 수 있는 지에 대한 수학적인 설명은 다음 글을 참고
하나의 Key에 대해서는 O(1)이지만, key를 여러개 준 경우 O(N) 이상으로 늘어납니다.
키가 1개일 때 1ms였다고 키가 2개일 때 2ms가 아니라 그 이상으로 늘어날 수 있습니다.
PF로 시작하는 것이 특징입니다.
<aside> ❗
HyperLogLog의 모든 commands: Link
</aside>
주어진 Key의 HyperLogLog 자료구조에 데이터를 추가합니다.
예시
> PFADD hll:user_ids user1 user2 user3
(integer) 1
> PFADD hll:user_ids user3 user4
(integer) 1
> PFADD hll:user_ids user4
(integer) 0 # 이미 존재하는 값이기 때문에 변경 없음