PassFront
  1. PassFront
  2. База знаний
  3. Графы и прочие структуры

Что такое фильтр Блума и где он применяется?

Графы и прочие структуры

Фильтр Блума — вероятностное множество из битового массива и k хеш-функций: на вопрос «есть ли элемент?» он отвечает «точно нет» или «возможно, да», занимая около 10 бит на элемент независимо от размера самих ключей.

Как работает

  • Добавление: вычислить k хешей и выставить k битов.
  • Проверка: если хоть один из k битов равен 0, элемента точно нет; если все единицы — возможно ложное срабатывание.
  • Ложных отрицаний не бывает, ложные положительные — да.
  • Удалить элемент нельзя: сброс бита затронет чужие элементы. Для удаления есть counting Bloom filter со счётчиками вместо битов.

Числа

  • Вероятность ложного срабатывания ≈ (1 − e^(−kn/m))^k, где m — битов, n — элементов.
  • Оптимальное k = (m/n)·ln 2.
  • 1 % ошибок — около 9,6 бита на элемент и k = 7; каждое десятикратное снижение ошибки стоит ещё ≈4,8 бита на элемент.
  • Вместо k независимых функций хватает двух: gᵢ = h₁ + i·h₂ (приём Кирша — Митценмахера).

Где применяется

  • LSM-хранилища (RocksDB, Cassandra, HBase): перед чтением SSTable с диска проверить, может ли там быть ключ.
  • CDN: не кешировать объект при первом запросе, чтобы не тратить диск на единичные обращения.
  • Проверка «этот пароль в утечках?» или «URL уже обходили?» без хранения всего списка.

Коротко для собеседования

Фильтр Блума экономно отвечает «точно нет» или «возможно, да» и ставится перед дорогой проверкой — например, перед чтением с диска в LSM-хранилищах. Ложных отрицаний нет, но удалять элементы и расширять фильтр без исходных ключей нельзя, поэтому размер закладывают заранее.

Другие вопросы раздела