10 pontos por GN⁺ 2025-03-04 | 2 comentários | Compartilhar no WhatsApp
  • pgRouting é uma extensão do Postgres usada principalmente em sistemas de informação geográfica (GIS) para encontrar o caminho mais curto entre dois pontos
  • No entanto, o pgRouting também pode ser usado para processar dados com várias estruturas de grafo além dos dados geoespaciais
  • Pode servir como uma alternativa mais leve a bancos de dados de grafos especializados como Apache AGE e Neo4j

Introdução ao pgRouting

  • pgRouting é uma extensão do PostGIS que oferece recursos de roteamento geoespacial
  • Com ele, é possível calcular caminhos mínimos, fazer análise de redes e resolver problemas complexos de roteamento
  • É usado principalmente em GIS, como para encontrar o caminho mais curto entre dois locais

Relação com grafos

  • O ponto forte do pgRouting é que ele pode trabalhar com qualquer dado estruturado como grafo
  • Um grafo é composto por uma rede de pontos interconectados, em que:
    • nós representam entidades
    • arestas representam relações ou caminhos entre nós
  • Em mapas ou GIS, nós e arestas significam cruzamentos e estradas, respectivamente, mas isso também pode ser aplicado a sistemas abstratos como redes sociais

Casos de uso do pgRouting fora de GIS

  • Agendamento de tarefas

    • Em projetos, há dependências entre tarefas, formando um grafo acíclico direcionado (DAG)
      • Os nós representam tarefas
      • As arestas representam dependências
    • Um dos principais desafios da gestão de projetos é encontrar o 'caminho crítico (critical path)', que determina a duração total do projeto
    • É possível modelar as dependências das tarefas com pgRouting e encontrar o caminho crítico com algoritmos de grafos
  • Roteamento de proxy reverso com base em alocação de recursos

    • Em sistemas distribuídos, é importante alocar recursos com eficiência entre os nós da rede
    • Cada nó representa uma localização física ou um processo computacional, e as arestas representam os caminhos de movimentação de dados entre os nós
    • Por exemplo, em uma infraestrutura de nuvem, o pgRouting pode ser usado para rotear dados ou cargas computacionais entre servidores distribuídos pelo caminho mais eficiente
  • Motores de recomendação como o YouTube

    • Em motores de recomendação ou algoritmos de busca que usam grafos de conhecimento, o pgRouting pode ser usado para construir relações entre entidades e eventos
    • Por exemplo, no algoritmo de recomendação do YouTube:
      • nós representam entidades como usuários, vídeos e categorias
      • arestas representam relações como interações entre usuários e vídeos ou compartilhamento de categorias entre vídeos
    • Essa estrutura em grafo pode fornecer recomendações personalizadas aos usuários

Mais informações sobre o pgRouting

  • O pgRouting é uma extensão poderosa do Postgres e pode ser usado para resolver vários problemas baseados em grafos
  • Mais detalhes podem ser encontrados na documentação oficial do pgRouting

2 comentários

 
curiosityprocessor 2025-03-05

Alguém aqui já adotou de fato o Apache AGE ou o pgRouting?
Na empresa, estamos introduzindo um banco de dados em grafo e já usamos o Postgres como RDB, mas ouvimos dizer que, embora plugins/extensões permitam usar o Postgres “como se fosse um banco de dados em grafo”, na prática o desempenho não compensa. Então estávamos considerando o Neo4j, mas pelo visto o pessoal do Hacker News também tem bastante reclamação dele.

 
GN⁺ 2025-03-04
Comentários no Hacker News
  • Há cinco anos, fiquei decepcionado com bancos de dados e bibliotecas de grafo e tentei colocar vários DBMS não voltados a grafos por trás de uma interface Python semelhante ao NetworkX

    • O Neo4J travava em todos os grafos, e SQLite e Postgres eram opções mais adequadas para tarefas de processamento de rede
    • Com o aumento da compatibilidade com Postgres, fico curioso se vale a pena revisitar o projeto
    • Mais bancos de dados de grafo, como o MemGraph, são compatíveis com CYPHER e podem funcionar melhor que o Neo4J
    • O objetivo era descobrir se o pgrouting é uma boa ferramenta para construir uma camada de memória para IA/agentes
    • Os resultados iniciais são promissores, e devo fazer um acompanhamento em breve com outro artigo
    • Há extensões interessantes, como o onesparse, baseado em SuiteSparse
  • O Supabase continua publicando ótimos conteúdos relacionados ao PostGIS

    • Há material sobre servir tiles diretamente ou (abusar de) funcionalidades no contexto geográfico do PG
    • Não é inovador nem complexo, mas é divertido e estimulante intelectualmente
    • Elogio o fato de eles publicarem com frequência conteúdos que despertam interesse em trabalhar com bancos de dados
  • Sempre me perguntei por que não existe um "SQLite para grafos"

    • Fico curioso se há alguma forma de armazenamento que dificulte uma solução in-process com armazenamento em disco
  • Estou trabalhando em um projeto simples de banco de dados de grafos com Postgres

    • As consultas e a estrutura das tabelas são muito mais simples para o mesmo trabalho
  • Gostaria de ouvir opiniões sobre armazenar bitmaps roaring em uma coluna bytea do postgres para representar uma matriz de adjacência

    • Como o RDS oferece suporte a plrust e ao SPI do PostgreSQL, parece que isso poderia ser construído com croaring-rs
    • Seria possível representar muitos grafos, com cada grafo atribuído a um locatário (caso de uso de empresa/B2B SaaS)
    • Usando plrust, seria possível armazenar bitmaps roaring em bytea no servidor do banco e usar SPI para minimizar a sobrecarga de rede
    • O PostgreSQL oferece segurança transacional e também suporte a outros dados em colunas, como JSONB para consultar a coluna de ID do locatário e metadados de relacionamentos
    • Preciso oferecer suporte a muitos grafos de locatários, e como já uso citus, parece que isso também pode funcionar em grande escala
    • Acho que seria necessário criar algumas operator classes para indexar melhor os relacionamentos
    • Conheço o pg_roaringbitmap, mas ele usa int64, e prefiro começar no RDS
    • Tenho usado PostgreSQL profundamente sem recorrer ao Neo4J (incluindo trabalho com tabelas de mais de ~20 TB)
    • Um grande agradecimento ao autor da postagem do blog
    • Parece que o pgRouting pode ser usado como banco de dados de grafos, então vou adicioná-lo à minha lista de testes
  • Fico curioso se alguém tem alguma opinião sobre o "Apache AGE"

    • Apache AGE™ é PostgreSQL com recursos de banco de dados de grafos
  • Fico curioso se há realmente alguma diferença entre bancos de dados de "grafo" e bancos de dados de "SQL comum" olhando apenas para o modelo de dados (e não, por exemplo, para a linguagem de consulta)

  • Fico curioso se alguém tem experiência em gerar isócronas com PgRouting

    • Há um caso de uso para gerar mapas de isócronas para caminhada, ciclismo etc.
    • Se possível, gostaria de usar apenas Postgres e evitar outras infraestruturas como Valhalla, OpenTripPlanner e OpenRouteService
  • O Postgres sempre oferece extensões que abrem novas oportunidades de modelagem de dados

    • Fico curioso para saber como isso se compara aos recursos de grafo do CedarDB (compatível com Postgres)