天天看點

基數估算HyperLogLog

HyperLogLog 可以接受多個元素作為輸入,并給出輸入元素的基數估算值:

• 基數:集合中不同元素的數量。比如 {'apple', 'banana', 'cherry', 'banana', 'apple'} 的基數就是 3 。

• 估算值:算法給出的基數并不是精确的,可能會比實際稍微多一些或者稍微少一些,但會控制在合理的範圍之内。

HyperLogLog 的優點是,即使輸入元素的數量或者體積非常非常大,計算基數所需的空間總是固定的、并且是很小的。

在 Redis 裡面,每個 HyperLogLog 鍵隻需要花費 12 KB 記憶體,就可以計算接近 2^64 個不同元素的基數。這和計算基數時,元素越多耗費記憶體就越多的集合形成鮮明對比。

但是,因為 HyperLogLog 隻會根據輸入元素來計算基數,而不會儲存輸入元素本身,是以HyperLogLog 不能像集合那樣,傳回輸入的各個元素。

繼續閱讀