Términos de Layman: ¿Qué es un filtro Bloom?

Ya hay algunas excelentes respuestas a esta pregunta, pero voy a suponer que mi Layman está más interesado en lo que el filtro puede hacer por él en lugar de cómo funciona.

Esencialmente, un filtro Bloom es una forma muy rápida de verificar si algo está en un conjunto de datos que da una de dos respuestas: “x definitivamente no está en este conjunto de datos” o “x podría estar en este conjunto de datos”. En la superficie, puede no ser evidente por qué esto es útil, pero si está haciendo muchas consultas en un conjunto de datos grande pero escaso (es decir, uno en el que es mucho más probable que no encuentre nada que encontrar algo para un consulta dada) un filtro de floración proporciona una optimización muy útil, lo que significa que la mayoría de las consultas pueden devolver “no encontrado” sin tener que comenzar a buscar en sus índices.

El ejemplo de libro de texto de cuándo es útil es una lista de bloqueo de sitios web. Puede haber una lista muy grande de sitios web bloqueados que ascienden a millones, y cada cliente en la red necesita consultar esta lista cada vez que solicita una nueva página. Para la gran mayoría de las consultas, la respuesta será “este sitio no está bloqueado”, por lo que agregar un filtro de floración reducirá sustancialmente la carga de trabajo de su base de datos, ya que en la gran mayoría de los casos podrá devolver “no coincidencia” sin tener que consultar la base de datos.

EDITAR: Según lo solicitado, también intentaré una explicación muy simple de cómo funcionan. Un filtro de Bloom es muy similar a un mapa de hash (si no sabe qué es un mapa de hash, entonces probablemente debería aprender sobre ellos antes de aprender sobre los filtros de Bloom), pero si bien es importante al implementar un mapa de hash, evite colisiones en su función hash con un filtro Bloom espera colisiones. Cuando llega una consulta para ser verificada, aplica su función hash y verifica si el valor correspondiente está configurado en el filtro. Si no encuentra nada, puede estar 100% seguro de que su consulta no está en el conjunto (porque si fuera el hash de sus datos estaría presente). Si encuentra algo, entonces no puede estar seguro de si es lo que estaba buscando, o simplemente una colisión hash con otro valor, lo que significa que debe realizar una verificación adecuada en su base de datos.

Imagine un zapatero, como el que se muestra en la imagen a continuación.

Imagen de Biswarup Ganguly, licenciada bajo CC BY 3.0.

Cada vez que su amigo John está aquí, siempre deja sus zapatos en una caja en particular.

Un día pasas caminando. De repente tienes curiosidad: ¿está John aquí? Obviamente, miras su caja favorita. Ahora hay dos casos:

  1. La caja esta vacía. En este caso estamos seguros que John no está aquí.
  2. La caja contiene unos zapatos. Pueden ser los zapatos de John, pero también pueden ser los zapatos de otra persona. La única conclusión que podemos hacer es que John podría estar aquí.

Un filtro Bloom es un filtro simple basado en hashing que se basa en la idea anterior. Nos permite almacenar elementos (“John llega”) y filtrar rápidamente muchos elementos que no están presentes (“a veces podemos estar seguros de que John no está aquí”).

Un filtro Bloom vacío es una tabla hash llena de bits configurados en falso (“un estante de zapatos vacío”). Al insertar un elemento (“John llega”), una función de hash seleccionará varios bits en la tabla de hash (“caja de zapatos favorita de John”). Para insertar el elemento (“marca que llegó John”) establecemos todos esos bits en verdadero (“coloca sus zapatos en la caja”).

Para verificar si nuestro filtro Bloom contiene un elemento particular (“¿está John aquí?”), Use la misma función hash para calcular los bits que se establecerían al insertar ese elemento. Si todos esos bits se establecen en verdadero, el elemento podría estar en el conjunto. Si alguno de esos bits todavía está establecido en falso, el elemento ciertamente no está en el conjunto.

No sé si esto es lo que buscas, pero aquí hay otro significado del filtro de floración.


La floración en gráficos de computadora o imágenes es el efecto de resplandor o santidad. Para la obtención de imágenes, puede deberse a la diafonía (generalmente por derrame de carga de un pozo a otro).

En imágenes, la floración es algo malo porque distorsiona la imagen. El filtro antifloración (o antifloración) a veces se usa para eliminar este artefacto. Aquí hay más información: Anti-Blooming.

En gráficos de computadora, a veces queremos generar el efecto de santificación. Esto puede ser para crear el artefacto de imagen o hacer que algo se vea angelical u otras razones artísticas. El filtro para agregar esto se llama filtro de floración.