Almacenamiento de gráficos eficientes para la resolución de entidad utilizando compresión basada en camarillas

En la Resolución (ER), uno de los desafíos centrales es administrar y mantener las complejas relaciones entre los registros. En su núcleo, Tilores Entidades de modelos como gráficos: cada nodo representa un registro, y los bordes representan coincidencias basadas en reglas entre esos registros. Este enfoque nos brinda flexibilidad, trazabilidad y un alto nivel de precisión, pero también viene con un almacenamiento significativo y desafíos computacionales, especialmente a escala. Este artículo explica los detalles sobre el almacenamiento eficiente de los gráficos altamente conectados utilizando un gráfico basado en camarillas Compresión.

El modelo de gráfico de entidad

En Tilores, una entidad válida es un gráfico donde cada registro está conectado a al menos otro a través de una regla coincidente. Por ejemplo, si registra a Registro de partidos b según la regla R1lo almacenamos como un borde "a:b:R1". Si otra regla, digamos R2también se conecta a y balmacenamos una ventaja adicional "a:b:R2". Estos bordes se mantienen como una lista simple, pero alternativamente podrían modelarse utilizando una estructura de la lista de adyacencias para un almacenamiento más eficiente.

¿Por qué retener todos los bordes?

Mayoría Resolución de entidad Los sistemas o los sistemas de gestión de datos maestros no conservan las relaciones entre los registros, sino que solo almacenan una representación de los datos subyacentes y, por lo general, una puntuación de coincidencia genérica, dejando al usuario incierto sobre cómo se formó la entidad. Peor aún, el usuario no tiene forma de corregir los errores cometidos por el sistema de coincidencia automática.

Por lo tanto, retener todos los bordes en un gráfico de entidad tiene múltiples propósitos:

  • Trazabilidad: Permite al usuario comprender por qué dos registros se agruparon en la misma entidad.
  • Analítica: Las ideas como la efectividad de las reglas y la similitud de datos se pueden extraer de metadatos de borde.
  • Deleción de datos y recalculación: Cuando se elimina un registro o se modifica una regla, el gráfico debe recalcularse. La información de borde es esencial para comprender cómo se formó una entidad y cómo se debe actualizar.

El problema de escala: crecimiento cuadrático

Al discutir posibles problemas de escala en la resolución de la entidad, esto generalmente se refiere al desafío de hacer coincidir cada registro con todos los demás registros. Mientras que esto es un desafío por sí soloretener todos los bordes de una entidad da como resultado problemas similares en el lado de almacenamiento. Las entidades donde muchos registros están conectados entre sí crean una multitud de bordes. En el peor de los casos, cada nuevo registro está conectado a todos los registros existentes. Este crecimiento cuadrático se puede expresar con la fórmula:

n * (n - 1) / 2

Para entidades pequeñas, esto no es un problema. Por ejemplo, una entidad con 3 registros puede tener un máximo de 3 bordes. Para n = 100, esto aumenta a 4,950 bordes y para n = 1,000 esto da como resultado hasta 499,500 bordes.

Esto crea un inmenso almacenamiento y sobrecarga computacional, especialmente porque los gráficos de resolución de entidades a menudo exhiben este tipo de conectividad densa.

Solución: compresión gráfica a base de camarilla (CBGC)

Una camarilla en un gráfico es un grupo de nodos donde cada nodo está conectado a cualquier otro nodo en ese grupo. Una camarilla también se puede llamar subgraph completo. La camarilla más pequeña posible contiene un solo nodo y sin bordes. Un par de nodos conectados por un borde también forma una camarilla. Y tres nodos, como el de abajo, forman una camarilla en forma de triángulo.

Una simple camarilla: Triángulo
(Imagen del autor)

Una camarilla máxima es una camarilla que no se puede extender agregando ningún nodo adyacente, y una camarilla máxima es la camarilla con el mayor número de nodos en todo el gráfico. A los efectos de este artículo, vamos a usar el término camarilla solo para referirnos a camarillas con al menos tres nodos.

El triángulo mostrado anteriormente podría representarse en tilores por los siguientes bordes:

[
  "a:b:R1",
  "a:c:R1",
  "b:c:R1"
]

Debido a que un triángulo es una camarilla, también podríamos representar el gráfico almacenando solo los nodos en esta camarilla y la ID de regla asociada:

{
  "R1": [
    ["a", "b", "c"]
  ]
}

Consideremos el siguiente gráfico un poco más complicado:

Subgraph completo con 6 nodos
(Imagen del autor)

Según su apariencia, podemos detectar fácilmente que todos los nodos están conectados entre sí. Entonces, en lugar de enumerar los 15 bordes [remember n*(n-1)/2]simplemente podemos almacenar esta camarilla en la siguiente forma:

{
  "R1":[
    ["a", "b", "c", "d", "e", "f"]
  ]
}

Sin embargo, en un gráfico realista, no todos los registros están conectados entre sí. Considere el siguiente gráfico:

Un gráfico complejo con tres camarillas resaltadas
(Imagen del autor)

Hay tres camarillas más grandes resaltadas: amarillo, rojo y azul (verde azulado si eres exigente). También hay un solo nodo restante. Si bien esas son probablemente las camarillas más grandes, puede ver a docenas de otras. Por ejemplo, ¿nota la camarilla de 4 nodos entre los dos nodos rojos y dos amarillos?

Atiendo con las camarillas de color, podríamos almacenarlas de la siguiente manera (usando Y, R y B para amarillo, rojo y azul):

{
  "R1": [
    ["y1", "y2", "y3"],
    ["r1", "r2", "r3", "r4", "r5"],
    ["b1", "b2", "b3", "b4", "b5", "b6"]
  ]
}

Además, podemos almacenar los 10 bordes restantes (P para púrpura):

[
  "y1:r1:R1",
  "y1:r2:R1",
  "y2:r1:R1",
  "y2:r2:R1",
  "r4:p1:R1",
  "r5:p1:R1",
  "r5:b1:R1",
  "b2:p1:R1",
  "y3:b5:R1",
  "y3:b6:R1"
]

Esto significa que todo el gráfico ahora se puede representar con solo tres camarillas y diez bordes, en lugar de los 38 bordes originales.

Gráfico comprimido
(Imagen del autor)

Esta compresión gráfica a base de camarilla (CBGC) está libre de pérdidas (a menos que necesite propiedades de borde). En un conjunto de datos realista, identificamos ahorros de almacenamiento masivos. Para un cliente, CBGC redujo el almacenamiento de borde en un 99.7%, reemplazando cientos de miles de bordes con solo unos pocos cientos de camarillas y bordes escasos.

Beneficios de rendimiento más allá del almacenamiento

CBGC no se trata solo de compresión. También permite operaciones más rápidas, particularmente al manejar el registro y la eliminación de borde.

Cualquier motor de resolución de entidad sano debe dividir una entidad en múltiples si se eliminó el único vínculo entre dos subgrafías, por ejemplo, debido a razones regulatorias o de cumplimiento. Identificar subgrafías separadas y no conectadas se realiza típicamente utilizando un algoritmo de componentes conectados. En resumen, funciona agrupando todos los nodos que están conectados a través de bordes en subgrafías separadas. Como resultado, cada borde debe verificarse al menos una vez.

Sin embargo, si un gráfico se almacena como un gráfico comprimido, entonces no hay necesidad de atravesar todos los bordes de una camarilla. En su lugar, es suficiente agregar un número limitado de bordes para cada camarilla, por ejemplo, una ruta transitiva entre los nodos de una camarilla, tratando cada camarilla como un subgrafio preconectado.

Compromisos: complejidad de detección de camarillas

Existe una compensación: la detección de camarillas es computacionalmente costosa, particularmente cuando se intenta encontrar las camarillas máximas, un problema muy conocido de NP.

En la práctica, a menudo es suficiente simplificar esta carga de trabajo. Algoritmos aproximados para la detección de camarillas (por ejemplo, heurística codiciosa) funcionan lo suficientemente bien para la mayoría de los usos. Además, CBGC se recalcula selectivamente, generalmente cuando el recuento de borde de una entidad supera un umbral. Este enfoque híbrido equilibra la eficiencia de compresión con un costo de procesamiento aceptable.

Más allá de las camarillas

Podría decirse que el patrón más común en la resolución de la entidad es el subgrafio completo. Sin embargo, se podría lograr una mayor optimización identificando otros patrones recurrentes como

  • Estrellas: almacene como una lista de nodos donde la primera entrada representa el nodo central
  • Rutas: almacene como una lista ordenada de nodos
  • Comunidades: almacene como una camarilla y marque los bordes faltantes

Pensamientos de cierre

Los sistemas de resolución de entidades a menudo enfrentan el desafío de administrar gráficos densos y altamente interconectados. Almacenar todos los bordes ingenuamente se vuelve insostenible. CBGC proporciona una forma eficiente de modelar entidades mediante la explotación de propiedades estructurales de los datos.

No solo reduce la sobrecarga de almacenamiento, sino que también mejora el rendimiento del sistema, especialmente durante la eliminación de datos y el reprocesamiento. Si bien la detección de camarones tiene sus costos computacionales, las opciones de ingeniería cuidadosas nos permiten cosechar los beneficios sin sacrificar la escalabilidad.