10 puntos por GN⁺ 2025-03-04 | 2 comentarios | Compartir por WhatsApp
  • pgRouting es una extensión de Postgres que se usa principalmente en sistemas de información geográfica (GIS) para encontrar la ruta más corta entre dos puntos
  • Sin embargo, pgRouting también puede aprovecharse para procesar datos con diversas estructuras de grafo, además de los datos geoespaciales
  • Puede usarse como una alternativa ligera a bases de datos de grafos especializadas como Apache AGE o Neo4j

Introducción a pgRouting

  • pgRouting es una extensión de PostGIS que ofrece funciones de enrutamiento geoespacial
  • Con esto es posible calcular rutas más cortas, realizar análisis de redes y resolver problemas complejos de enrutamiento
  • Se utiliza sobre todo en GIS, por ejemplo para encontrar la ruta más corta entre dos ubicaciones

Relación con los grafos

  • La fortaleza de pgRouting es que puede trabajar con cualquier dato estructurado como grafo
  • Un grafo está compuesto por una red de puntos interconectados, donde:
    • Los nodos representan entidades
    • Las aristas representan relaciones o caminos entre nodos
  • En mapas o GIS, nodos y aristas significan intersecciones y carreteras, respectivamente, pero también puede aplicarse a sistemas abstractos como las redes sociales

Casos de uso de pgRouting fuera de GIS

  • Programación de tareas

    • En un proyecto existen dependencias entre tareas, lo que forma un grafo acíclico dirigido (DAG)
      • Los nodos representan tareas
      • Las aristas representan dependencias
    • Uno de los desafíos principales en la gestión de proyectos es encontrar la 'ruta crítica (critical path)', que determina la duración total del proyecto
    • Con pgRouting se pueden modelar las dependencias de las tareas y encontrar la ruta crítica mediante algoritmos de grafos
  • Enrutamiento de proxy inverso basado en asignación de recursos

    • En sistemas distribuidos, es importante asignar eficientemente los recursos entre los nodos de la red
    • Cada nodo representa una ubicación física o un proceso de cómputo, y las aristas representan las rutas de movimiento de datos entre nodos
    • Por ejemplo, en infraestructura en la nube, pgRouting puede usarse para enrutar datos o cargas de cómputo entre servidores distribuidos por la ruta más eficiente
  • Motores de recomendación como YouTube

    • En motores de recomendación o algoritmos de búsqueda que usan grafos de conocimiento, pgRouting puede emplearse para construir relaciones entre entidades y eventos
    • Por ejemplo, en el algoritmo de recomendación de YouTube:
      • Los nodos representan entidades como usuarios, videos y categorías
      • Las aristas representan relaciones como interacciones entre usuarios y videos o categorías compartidas entre videos
    • A través de esta estructura de grafo, se pueden ofrecer recomendaciones personalizadas a los usuarios

Información adicional sobre pgRouting

  • pgRouting es una potente extensión de Postgres que puede usarse para resolver diversos problemas basados en grafos
  • Más detalles disponibles en la documentación oficial de pgRouting

2 comentarios

 
curiosityprocessor 2025-03-05

¿Hay alguien que haya implementado realmente apache age o pgRouting?
En la empresa estamos introduciendo una Graph DB, y aunque ya usamos Postgres como RDB existente,
me dijeron que con plugins/extensiones se puede usar Postgres “como si fuera una Graph DB”, pero que en la práctica el rendimiento no da, así que estábamos considerando neo4j; sin embargo, parece que en Hacker News también hay bastante descontento con neo4j.

 
GN⁺ 2025-03-04
Opiniones de Hacker News
  • Hace cinco años, se sintió decepcionado con las bases de datos y bibliotecas de grafos, así que intentó colocar varios DBMS no orientados a grafos detrás de una interfaz de Python similar a NetworkX

    • Neo4J fallaba con todos los grafos, y SQLite y Postgres eran opciones más adecuadas para tareas de procesamiento de redes
    • Se pregunta si vale la pena retomar el proyecto ahora que la compatibilidad con Postgres ha aumentado
    • Más bases de datos de grafos, como MemGraph, son compatibles con CYPHER y podrían funcionar mejor que Neo4J
    • El objetivo era averiguar si pgrouting es una buena herramienta para construir una capa de memoria para IA/agentes
    • Los resultados iniciales son prometedores, y pronto planea dar seguimiento con otro artículo
    • Hay extensiones interesantes como onesparse, basada en SuiteSparse
  • Supabase sigue publicando excelente contenido relacionado con PostGIS

    • Hay contenido sobre servir tiles directamente o sobre (mal)usar funciones dentro del contexto geográfico de PG
    • No es innovador ni complejo, pero sí divertido y mentalmente estimulante
    • Elogia que publiquen con frecuencia contenido que despierta el interés por trabajar con bases de datos
  • Siempre se ha preguntado por qué no existe un "SQLite para grafos"

    • Se pregunta si hay algún método de almacenamiento que impida una solución en proceso con almacenamiento en disco
  • Está trabajando en un proyecto simple de base de datos de grafos sobre Postgres

    • Las consultas y la estructura de tablas son mucho más simples para hacer lo mismo
  • Le gustaría conocer opiniones sobre representar una matriz de adyacencia almacenando bitmaps roaring en una columna bytea de Postgres

    • Como RDS soporta plrust y el SPI de PostgreSQL, parece posible construirlo usando croaring-rs
    • Se pueden representar muchos grafos, y cada uno estaría asignado a un tenant (caso de uso de empresa/B2B SaaS)
    • Usando plrust, se pueden guardar bitmaps roaring en bytea dentro del servidor DB y usar SPI para minimizar la sobrecarga de red
    • PostgreSQL ofrece seguridad transaccional y también soporte para otros datos basados en columnas, como JSONB para consultar metadatos de relaciones y columnas de ID de tenant
    • Necesita soportar muchos grafos de tenants y ya usa citus, así que parece posible incluso a gran escala
    • Parece que habrá que crear algunas clases de operadores para indexar mejor las relaciones
    • Conoce pg_roaringbitmap, pero usa int64 y prefiere comenzar en RDS
    • Está usando PostgreSQL de forma profunda en lugar de Neo4J (por ejemplo, trabajando con tablas de más de ~20 TB)
    • Expresa un gran agradecimiento al autor de la entrada del blog
    • Como parece que pgRouting puede usarse como base de datos de grafos, lo añade a su lista de pruebas
  • Se pregunta si alguien tiene opiniones sobre "Apache AGE"

    • Apache AGE™ es PostgreSQL con capacidades de base de datos de grafos
  • Se pregunta si realmente hay una diferencia entre una base de datos de "grafos" y una base de datos de "SQL general" al mirar solo el modelo de datos (por ejemplo, no el lenguaje de consultas)

  • Se pregunta si alguien tiene experiencia usando PgRouting para generar isócronas

    • Tiene un caso de uso para generar mapas de isócronas para caminar, ciclismo, etc.
    • Si es posible, le gustaría usar solo Postgres y evitar otra infraestructura como Valhalla, OpenTripPlanner y OpenRouteService
  • Postgres siempre ofrece extensiones que abren nuevas oportunidades de modelado de datos

    • Se pregunta cómo se compara con las capacidades de grafos de CedarDB (compatible con Postgres)