- 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
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.
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 Supabase continua publicando ótimos conteúdos relacionados ao PostGIS
Sempre me perguntei por que não existe um "SQLite para grafos"
Estou trabalhando em um projeto simples de banco de dados de grafos com Postgres
Gostaria de ouvir opiniões sobre armazenar bitmaps roaring em uma coluna
byteado postgres para representar uma matriz de adjacênciacroaring-rsbyteano servidor do banco e usar SPI para minimizar a sobrecarga de redepg_roaringbitmap, mas ele usa int64, e prefiro começar no RDSFico curioso se alguém tem alguma opinião sobre o "Apache AGE"
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
O Postgres sempre oferece extensões que abrem novas oportunidades de modelagem de dados