Выбор хеш-функций, используемых фильтрами Guava Bloom

При создании фильтра Блума с библиотекой Guava ожидается, что вы укажете воронку и ожидаемое количество вставок (и, возможно, желаемый процент ложных срабатываний). Есть ли способ установить, какие хэш-функции должен использовать фильтр Блума? Если нет возможности установить хеш-функцию, что используется по умолчанию?

Фильтр Блума является частью com.google.common.hash, который предоставляет множество различных хеш-функций. К сожалению, https://github.com/google/guava/wiki/HashingExplained не смог ответьте на мой вопрос, но покажите доступные хеш-функции и дайте некоторые пояснения.


person Leandro    schedule 15.07.2018    source источник


Ответы (1)


Хэш-функция по умолчанию - это 128-битная хэш-функция murmur3 (вариант x64) (см. перечисление BloomFilterStrategies).

Вы не можете указать хеш-функцию с помощью общедоступного API. Однако, используя небольшой прием, вы могли бы это сделать - вам нужно:

  1. Поместите пользовательский класс в пакет com.google.common.hash для вызова BloomFilter .create( Funnel<? super T> funnel, long expectedInsertions, double fpp, Strategy strategy)

  2. Создайте собственную реализацию BloomFilter.Strategy (проще всего скопировать одну из реализаций из BloomFilterStrategies и превратить хеш-функцию в поле).

Однако убедитесь, что вам действительно нужна настраиваемая функция. Murmur3 действительно быстрый (хотя и небезопасный), и любая другая хеш-функция, скорее всего, будет медленнее, поэтому, возможно, единственное преимущество, на которое вы можете надеяться, - это меньшее количество столкновений.

person Tomasz Linkowski    schedule 15.07.2018