Partilhar via


Extensão AGE com o Banco de Dados do Azure para PostgreSQL

O Apache AGE (uma extensão de grafo) é uma extensão poderosa do PostgreSQL projetada para integrar perfeitamente as funcionalidades do banco de dados de grafo ao ecossistema do PostgreSQL. O AGE permite que os usuários armazenem e consultem dados de grafo de forma eficiente e expressiva, dando suporte à linguagem de consulta openCypher intuitiva, quando desenvolvida no projeto do Apache Incubator. Ele faz a ponte entre dados relacionais e de grafo, permitindo que os desenvolvedores gerenciem relações complexas e descubram insights que os bancos de dados tradicionais podem ter dificuldades para revelar.

Os dados do graph, representados por meio de nós (entidades) e bordas (relações), são cada vez mais reconhecidos como essenciais para aplicativos como redes sociais, sistemas de recomendação, detecção de fraudes, análise de rede e grafos de conhecimento. O Apache AGE fornece uma solução robusta para lidar com esses dados interconectados, habilitando análises avançadas e gerenciamento simplificado de dados.

Desbloqueio de recursos de dados de grafo com o Apache AGE

Desbloquear recursos de dados de grafo com o Apache AGE capacita os desenvolvedores a aproveitar todo o potencial de dados interconectados no PostgreSQL. O Apache AGE permite a exploração e a análise contínuas de relações complexas integrando a funcionalidade do banco de dados de grafo diretamente ao banco de dados relacional. Essa funcionalidade é valiosa para aplicativos que exigem insights profundos sobre conexões de dados, como redes sociais, detecção de fraudes e sistemas de recomendação. Com seu suporte para a linguagem de consulta openCypher e a base robusta do PostgreSQL, o Apache AGE fornece uma solução escalonável e eficiente para gerenciar e consultar dados de grafo.

Principais recursos do Apache AGE

  • Integração de Dados de Grafos e Relacionais: AGE permite interação perfeita entre dados de grafos e relacionais no PostgreSQL.
  • OpenCypher Query Language: AGE dá suporte a essa linguagem de consulta amplamente reconhecida para bancos de dados de grafo, simplificando a gravação e a manutenção da consulta.
  • Escalabilidade e confiabilidade: sob a arquitetura comprovada do PostgreSQL, a AGE herda sua escalabilidade e robustez de nível empresarial.

Por que usar um banco de dados de grafo?

Os bancos de dados do Graph se destacam em representar e consultar relações complexas e altamente interconectadas. Ao contrário dos bancos de dados relacionais, que exigem várias junções ou bancos de dados de documentos que não são otimizados para relações profundas, os bancos de dados de grafo modelam naturalmente as relações entre entidades. Por exemplo, consultar "amigos de amigos" ou o "caminho mais curto entre dois pontos" é mais intuitivo e eficiente em um banco de dados de grafo.

O AGE usa o sistema transacional compatível com ACID do PostgreSQL, garantindo confiabilidade e atomicidade para consultas de grafo. Essa integração facilita aplicativos avançados, como Gráficos de Conhecimento, que dão suporte à geração de dados e pesquisa orientada por IA estruturando fatos e conceitos como nós e suas interconexões como bordas.

Os clientes do Azure podem habilitar a extensão AGE

O Banco de Dados do Azure para PostgreSQL inclui o Apache AGE como uma extensão.

Estas etapas ajudam você a habilitar a extensão em sua instância de servidor flexível:

Acessar parâmetros do servidor

No portal do Azure, navegue até a instância do Servidor Flexível do PostgreSQL e selecione a opção Parâmetros do Servidor.

Ajuste as seguintes configurações:

  • azure.extensions: pesquise e habilite AGE entre as extensões disponíveis no filtro de parâmetro.
  • shared_preload_libraries: pesquise e habilite AGE no filtro de parâmetro.

Selecione Salvar para aplicar essas alterações. O servidor é reiniciado automaticamente para ativar a extensão AGE.

Observação

Falha ao habilitar os resultados de shared_preload_libraries no seguinte erro ao tentar usar o esquema AGE em uma consulta: "ERRO: erro de chamada de função de codificação(cstring) sem tratamento na primeira consulta de criptografia"

Habilitar AGE no PostgreSQL

Depois que o servidor for reiniciado, conecte-se à instância do PostgreSQL usando o interpretador psql. Execute o seguinte comando para habilitar o AGE:

CREATE EXTENSION IF NOT EXISTS AGE CASCADE;

Depois de bem-sucedido, você verá CREATE EXTENSION como a saída da consulta.

Você também pode consultar a tabela de catálogo pg_extension para confirmar se o AGE estava habilitado e verificar a versão da extensão.

SELECT * FROM pg_extension WHERE extname = 'age';

Configurar caminhos de esquema

AGE adiciona um esquema chamado ag_catalog, essencial para lidar com dados de grafo. Verifique se esse esquema está incluído no caminho de pesquisa executando:

SET search_path=ag_catalog,"$user",public;

Para Python, você pode definir o caminho do esquema executando:

import psycopg as pg
with pg.Connection.connect(con_str + " options='-c search_path=ag_catalog,\"$user\",public'") as con:

Ele também pode ser configurado programaticamente em seu aplicativo.

Seguindo estas etapas, você garante que a instância do PostgreSQL esteja configurada corretamente para usar os recursos da extensão AGE. A extensão AGE fornece recursos avançados de banco de dados de grafo diretamente no PostgreSQL. Essa configuração permite a integração perfeita de consultas de grafo em seus aplicativos, desbloqueando relações de dados avançadas e insights. Com a extensão AGE habilitada e configurada, agora você está pronto para explorar todo o potencial da análise de grafo em seu ambiente postgreSQL.

Tabelas importantes no esquema ag_catalog

  • ag_graph
  • ag_label

ag_graph

A tabela ag_graph dentro do esquema ag_catalog do Apache AGE serve como um repositório para metadados relacionados a grafos criados no PostgreSQL por meio da ag_catalog.create_graph função. Especificamente, ele mantém detalhes como o nome do grafo e o namespace associado, que atua como um esquema no PostgreSQL. Esse namespace organiza a estrutura do grafo e contém tabelas para armazenar dados de vértice e borda.

\d+ ag_graph
                                          Table "ag_catalog.ag_graph"
 Column   |     Type | Collation | Nullable | Default | Storage | Compression | Stats target | Description
-----------+--------------+-----------+----------+---------+---------+-------------+--------------+-------------
 graphid   | oid |           | not null |         | plain   |             |              |
 name | name |           | not null |         | plain   |             |              |
 namespace | regnamespace |           | not null |         | plain   |             |              |
Indexes:
    "ag_graph_graphid_index" UNIQUE, btree (graphid)
    "ag_graph_name_index" UNIQUE, btree (name)
    "ag_graph_namespace_index" UNIQUE, btree (namespace)
Referenced by:
    TABLE "ag_label" CONSTRAINT "fk_graph_oid" FOREIGN KEY (graph) REFERENCES ag_graph(graphid)
Access method: heap

ag_label

A tabela ag_label armazena metadados sobre rótulos usados em grafos AGE. Ele mantém o controle desses rótulos, associando-os aos respectivos grafos e definindo se eles representam vértices ou bordas. A entrada inclui a ID exclusiva do rótulo, o grafo associado, todos os índices e a tabela PostgreSQL subjacente que armazena os dados.

\d+ ag_label
                                   Table "ag_catalog.ag_label"
 Column  |    Type | Collation | Nullable | Default | Storage | Compression | Stats target | Description
----------+------------+-----------+----------+---------+---------+-------------+--------------+-------------
 name | name |           | not null |         | plain   |             |              |
 graph    | oid |           | not null |         | plain   |             |              |
 id       | label_id   |           |          |         | plain   |             |              |
 kind     | label_kind |           |          |         | plain   |             |              |
 relation | regclass   |           | not null |         | plain   |             |              |
 seq_name | name |           | not null |         | plain   |             |              |
Indexes:
"ag_label_graph_oid_index" UNIQUE, btree (graph, id)
"ag_label_name_graph_index" UNIQUE, btree (name, graph)
"ag_label_relation_index" UNIQUE, btree (relation)
"ag_label_seq_name_graph_index" UNIQUE, btree (seq_name, graph)
Foreign-key constraints:
- `fk_graph_oid` FOREIGN KEY (graph) REFERENCES ag_graph(graphid)
Access method: heap