Red de conocimientos sobre prescripción popular - Conocimiento del confinamiento - Mire cómo PostgreSQL resuelve el mayor problema técnico en big data: la recuperación difusa

Mire cómo PostgreSQL resuelve el mayor problema técnico en big data: la recuperación difusa

Los big data están llegando a nosotros. Aunque los escenarios comerciales no serán exactamente los mismos, en uno de los escenarios más típicos (la recuperación difusa) los requisitos técnicos son sorprendentemente consistentes.

Por ejemplo:

El Internet de las cosas (IoT) a menudo genera una gran cantidad de datos, que además de los datos digitales también incluyen datos en cadena, como códigos de barras, matrículas, números de teléfono móvil y direcciones de correo electrónico, nombre, etc. Suponiendo que los usuarios necesiten realizar una recuperación difusa o incluso una coincidencia de expresiones regulares en una gran cantidad de datos sensoriales, ¿cuáles son los métodos efectivos?

En la industria farmacéutica, puede haber problemas con un lote de medicamentos que se encuentran en el mercado. Es necesario realizar consultas de expresión de reglas en los códigos de barras de los medicamentos para averiguar la dirección del flujo de los medicamentos con condiciones compuestas. Pero en un sistema tan complejo, ¿cómo se puede implementar de manera eficiente?

En operaciones de investigación y seguridad pública, puede ser necesaria la recuperación de pistas. Por ejemplo, se realiza la recuperación cruzada de números de teléfono móvil, direcciones de correo electrónico, matrículas, direcciones IP, números QQ, ID de WeChat, etc. incompletos proporcionados por los usuarios. En función de la superposición de esta información y el tiempo, se realizan coincidencias y correlaciones difusas. realizado para finalmente identificar a los criminales. Pero, ¿existe una manera eficiente de realizar este proceso?

Existen muchas necesidades similares. Casi todos los escenarios de coincidencia difusa requieren una coincidencia de expresiones regulares, que es algo similar a los acertijos faciales, y también hemos visto una gran demanda. Pero en términos de tecnología, ¿qué podría ser mejor?

En mi opinión: la coincidencia de expresiones regulares y la coincidencia difusa suelen ser la especialidad de los motores de búsqueda, pero si utilizas una base de datos PostgreSQL aún puedes lograr la coincidencia con buen rendimiento, y también existen soluciones distribuidas.

(como plproxy, pg_shard, fdw shard, pg-xc, pg-xl,

El primero es la clasificación de los escenarios de aplicación y lo que se puede utilizado en herramientas de optimización técnica existentes

.1. Las consultas difusas con prefijos, como 'ABC%', también se pueden escribir ~ '^ABC'

Puede utilizar índices btree. para optimización, o dividir columnas, usando índices bit a bit o bit a bit o de varias columnas apiladas para optimización (solo para cadenas finales de longitud fija, como char(8))

.2.With. La consulta del sufijo, como '%ABC', también se puede escribir como ~ 'ABC$'

Se puede optimizar usando la función inversa btree index, o dividiendo la columna y usando bits y o bit o (optimizado solo para cadenas de cola de longitud fija, como char(8)) índices de varias columnas apiladas

.3. Consultas difusas sin prefijos ni sufijos, como "%AB_C%". También se puede escribir como ~ 'AB.C'

Puede usar el índice gin de pg_trgm, o dividir las columnas y optimizar usando un índice de varias columnas con bit y/o bit o apilado (solo para fijos). cadena de cola de longitud, como char(8)).

.4 Consulta de expresión regular, como ~ '[\d]+def1.?[a|b|0|8]{1, 3 }'

Puede usar un índice gin a través de pg_trgm, o dividir las columnas usando un índice de varias columnas cubierto por bit o bit o (solo para cadenas finales de longitud fija, como char(8 )) Optimizar

El complemento pg_trgm de PostgreSQL admite el uso de índices en consultas difusas a partir de la versión 9.1 y admite el uso de índices en consultas de expresiones regulares a partir de la versión 9.3, lo que mejora enormemente la capacidad de PostgreSQL. consultas de convictos.

Para el código, consulte /postgrespro/pg_trgm_pro

El principio del complemento pg_trgm es agregar 2 espacios delante de la cadena y 1 espacio. al final de la cadena para formar una nueva cadena y dividir esta nueva cadena en tokens de acuerdo con cada 3 caracteres adyacentes.

Cuando se comparan usando expresiones regulares o consultas difusas, su similitud se recupera y luego se filtra. .