Fácil de entender y comprender: filtro Bloom

Descripción general

Naturaleza

Esencia : Un vector binario muy largo (matriz)
Función principal : Determinar si un dato existe en esta matriz. Si no existe, será 0, y si existe, será 1.
Insertar descripción de la imagen aquí

Ejemplo : almacenar "Hola" en un filtro Bloom: proceso de inserción

  1. "Hola" primero pasa por tres (N) funciones hash y se calculan tres valores hash respectivamente.
  2. Asigne los tres valores hash a la matriz y cambie la posición del subíndice correspondiente a 1

Proceso de consulta : Podemos consultar si los datos existen en el filtro Bloom según los subíndices. La existencia de los datos solo se puede confirmar cuando los resultados de las tres consultas de subíndices son todos 1. Siempre que haya datos binarios con subíndice que no sea 1, se demuestra que no existe.
Insertar descripción de la imagen aquí

Tenga en cuenta que los filtros de floración son difíciles de eliminar.

Eliminar datos :
Insertar descripción de la imagen aquí

Situación actual: La ubicación con subíndice 2 almacena dos datos: hola y hola, en este caso no sabemos si la ubicación con subíndice 2 es hola o hola. Esto se debe a que los valores hash calculados por estos datos a través de una serie de operaciones hash son los mismos , y los mismos valores hash dan como resultado los mismos subíndices calculados en función de los valores hash .

Esto hará que cuando queramos eliminar hola, cambiemos los datos en la posición subíndice 2 de 1 a 0. En este momento , los datos de hola también se eliminarán, lo que provocará errores de datos .

Ventajas y desventajas

ventaja:

  1. Los datos compuestos por matrices binarias ocupan muy poco espacio.
  2. La inserción y consulta son muy rápidas porque calcula el valor hash y luego asigna el valor hash al subíndice de la matriz. Según las características de la matriz, su consulta e inserción son muy rápidas. Solo necesita encontrar los datos correspondientes según el subíndice calculado, por lo que su complejidad temporal es O (N)
  3. La confidencialidad es muy buena, los datos que almacena son todos 0 y 1. Otros no tienen idea de lo que significan los dos datos 0 y 1 y no almacena datos originales.

defecto:

  1. Es dificil de borrar
  2. Es fácil provocar errores de juicio: no existe en el conjunto, pero después de una serie de operaciones, se juzga que los datos existen en el conjunto. Esto se debe a que los valores hash calculados para diferentes datos pueden ser los mismos.

Aplicación práctica

Práctica de código:
Insertar descripción de la imagen aquí

La tasa de errores de juicio afectará el resultado de los errores de juicio, y cuanto menor sea la tasa de errores de juicio, menos resultados de errores de juicio ocurrirán, pero también hará que el tiempo de cálculo aumente y la eficiencia de ejecución disminuya.
¿Es posible establecer que la tasa de falsos positivos sea infinitamente pequeña?

  • Cuanto menor sea la tasa de falsos positivos, mayor será el tiempo de cálculo y peor será el rendimiento.
  • Necesita configurarlo de acuerdo con su propia situación comercial

El principio subyacente de la tasa de falsos positivos:
el caso en el que la tasa de falsos positivos es 0,03
Insertar descripción de la imagen aquí

El caso en el que la tasa de falsos positivos es 0,01
Insertar descripción de la imagen aquí

Cuanto menor sea la tasa de falsos positivos, mayor será el espacio ocupado y más funciones hash utilizadas.

El propósito de aumentar el número de funciones hash es reducir la probabilidad de conflictos hash. El algoritmo de cada función hash es diferente, por lo que los resultados calculados también son diferentes. Cuantas más funciones hash, el valor hash calculado también es diferente. Cuanto más , a más datos binarios corresponde. Por tanto, se reducirá el número de errores de juicio.

Resuelva el problema de penetración de caché de Redis:

Descripción del problema : El front-end necesita consultar un dato, pero no existen dichos datos en redis, por lo que consultará la base de datos, lo que hará que la solicitud del front-end vaya directamente a la base de datos, lo que provocará una presión excesiva en la base de datos.
Insertar descripción de la imagen aquí

Principio de solución : Los datos binarios del filtro Bloom son globales. Si existen datos en la base de datos, el filtro Bloom marcará la existencia de los datos después de la solicitud de datos. Esto evita una gran cantidad de otras solicitudes de datos que no existen en la base de datos. base de datos.

Comprensión :
El filtro Bloom en realidad se usa para filtrar solicitudes no válidas. Por ejemplo, una interfaz para consultar detalles del producto. El parámetro es el ID del producto. Si alguien usa maliciosamente una solicitud de bucle, los parámetros son datos basura como 0, 1, 2. Y 3. Cada vez Para penetrar en Redis y solicitar la base de datos, incluso si está almacenada en caché en Redis, no tomará mucho tiempo. En este momento, puede colocar la identificación en el filtro de floración. Primero, determine si la identificación entrante está en el filtro de floración. Si existe, continúe con el proceso posterior. Si no existe, se considerará una identificación no válida y regresar directamente.

Supongo que te gusta

Origin blog.csdn.net/zwb568/article/details/129065349
Recomendado
Clasificación