使用Guava庫創(chuàng)建Bloom過濾器時,需要提供一個漏斗和一個預期的插入次數(shù)(以及所需的誤報率)。有沒有辦法設(shè)置Bloom過濾器應該使用的哈希函數(shù)?如果沒有辦法設(shè)置哈希函數(shù),默認情況下使用什么?Bloom過濾器是com.google.common.hash的一部分,它提供了各種不同的哈希函數(shù)。不幸的是https://github.com/google/guava/wiki/HashingExplained無法回答我的問題,但是顯示了可用的哈希函數(shù)并給出了一些解釋。
1 回答

慕森王
TA貢獻1777條經(jīng)驗 獲得超3個贊
默認的哈希函數(shù)是128位murmur3哈希函數(shù)(x64變體)(請參閱BloomFilterStrategies枚舉)。
您不能使用公共API指定哈希函數(shù)。但是,使用一點技巧就可以做到-您需要:
將自定義類放在
com.google.common.hash
包中以調(diào)用BloomFilter。create( Funnel<? super T> funnel, long expectedInsertions, double fpp, Strategy strategy)
創(chuàng)建的自定義實現(xiàn)
BloomFilter.Strategy
(最簡單的方法是從復制一個實現(xiàn)BloomFilterStrategies
,并將hash函數(shù)轉(zhuǎn)換為字段)。
但是,請確保您確實需要自定義功能。Murmur3確實非??欤ūM管并不安全),并且其他所有哈希函數(shù)都可能會慢得多,因此,您可能希望的唯一好處就是減少沖突。
添加回答
舉報
0/150
提交
取消