Si analizamos la mayor dificultad técnica del big data, la recuperación difusa, ¿cómo la supera PostgreSQL?
Por ejemplo:
El Internet de las cosas a menudo genera una gran cantidad de datos, además de datos digitales, también hay datos en cadena, como códigos de barras, matrículas y teléfonos móviles. números, direcciones de correo electrónico, nombres, etc. Supongamos que los usuarios necesitan realizar una recuperación difusa o incluso una coincidencia de expresiones regulares en una gran cantidad de datos de sensores. ¿Cuáles son algunos métodos eficientes?
Farmacéuticos, puede haber problemas con un lote de medicamentos que se encuentran en el mercado. Es necesario buscar la expresión regular de los códigos de barras de medicamentos para encontrar la dirección del flujo de medicamentos con condiciones compuestas. Pero, en un sistema tan complejo, ¿cómo implementarlo de forma eficiente?
Cuando la policía y los investigadores realizan investigaciones, es posible que necesiten recopilar pistas. Por ejemplo, realizar una búsqueda cruzada de números de teléfono, correos electrónicos, matrículas, direcciones IP, números QQ e ID de WeChat incompletos proporcionados por los usuarios, y agregar superposición de tiempo, coincidencias difusas y correlación en función de esta información para finalmente encontrar a los delincuentes. ¿Pero existe un método eficiente para este proceso?
Existen muchas necesidades similares. Casi todos los escenarios de coincidencia difusa requieren una coincidencia de expresiones regulares, similar a los acertijos faciales. Ya estamos viendo una fuerte demanda. Pero técnicamente hablando, ¿qué se debería hacer mejor?
En mi opinión, las coincidencias regulares y difusas suelen ser la especialidad de los motores de búsqueda, pero aún se pueden lograr si se utiliza una base de datos PostgreSQL y el rendimiento es bastante bueno, junto con una solución distribuida.
(como pl agent, pg_shard, fdw shard, pg-xc, pg-XL,
Greenplum), procesamiento de coincidencias de reglas y efectos de coincidencia difusa de más de 10 mil millones de piezas de data , aunque no pierde las funciones inherentes de la base de datos, definitivamente es multifacético.
Primero, se clasifican los escenarios de aplicación y se introducen los métodos de optimización que se pueden utilizar con la tecnología existente.
.1. La consulta difusa con prefijo, como 'ABC%', también se puede escribir como ~ '^ABC' en PG.
Puede utilizar índices btree para optimización, o puede utilizar índices de varias columnas para apilar u optimizar bits y/o bits (solo aplicable a cadenas finales de longitud fija, como char(8)).
.2. La consulta difusa con sufijo, como '%ABC ', también se puede escribir como ~ 'ABC$ ' en PG.
Puede utilizar el índice btree de la función inversa, o dividir columnas y apilar bits o bits o cooperar con índices de varias columnas para la optimización (solo apto para cadenas finales de longitud fija, como char( 8)).
.3. La consulta difusa sin prefijo ni sufijo, como '%AB_C%', también se puede escribir como ~ 'AB. c en PG.
Puede utilizar el índice Gin de pg_trgm, o puede optimizar la división de columnas superponiendo bits o bits o utilizando índices de varias columnas (solo aplicable a cadenas finales de longitud fija, como char(8) ).
.4. Consulta de expresión regular, como ~ '[\d]+def1. ' 0|8]{1, 3} '
Puede utilizar el índice Gin de pg_trgm, o puede optimizar la división de columnas superponiendo bits o bits o utilizando índices de varias columnas (solo aplicable a archivos fijos). -Cadena de caracteres finales de longitud, como char(8)).
El complemento pg_trgm de PostgreSQL admite consultas difusas usando índices a partir de 9.1 y admite consultas de expresiones regulares usando índices a partir de 9.3, lo que mejora en gran medida las capacidades de PostgreSQL en la investigación criminal.
Consulta /postgrespro/pg_trgm_pro para ver el código.
El principio del complemento pg_trgm es agregar dos espacios antes de la cadena, luego agregar 1 espacio para formar una nueva cadena y dividir la nueva cadena en varios caracteres de acuerdo con cada tres caracteres adyacentes. simbólico.
Al hacer coincidencias mediante expresiones regulares o consultas difusas, sus valores aproximados se recuperan y luego se filtran.