다음을 통해 공유


Azure Database for PostgreSQL을 사용하는 AGE 확장

Apache AGE(그래프 확장)는 그래프 데이터베이스 기능을 PostgreSQL 에코시스템에 원활하게 통합하도록 설계된 강력한 PostgreSQL 확장입니다. AGE를 사용하면 Apache Incubator 프로젝트에서 개발할 때 직관적인 openCypher 쿼리 언어를 지원하여 그래프 데이터를 효율적이고 표현적으로 저장하고 쿼리할 수 있습니다. 관계형 데이터와 그래프 데이터 간의 격차를 해소하여 개발자가 복잡한 관계를 관리하고 기존 데이터베이스가 공개하는 데 어려움을 겪을 수 있는 인사이트를 파악할 수 있습니다.

노드(엔터티) 및 에지(관계)를 통해 표현되는 그래프 데이터는 소셜 네트워크, 권장 시스템, 사기 탐지, 네트워크 분석 및 지식 그래프와 같은 애플리케이션에 필수적인 것으로 점점 더 인식되고 있습니다. Apache AGE는 이러한 상호 연결된 데이터를 처리하고 고급 분석 및 간소화된 데이터 관리를 가능하게 하는 강력한 솔루션을 제공합니다.

Apache AGE를 사용하여 그래프 데이터 기능 잠금 해제

Apache AGE를 사용하여 그래프 데이터 기능을 잠금 해제하면 개발자는 PostgreSQL 내에서 상호 연결된 데이터의 모든 잠재력을 활용할 수 있습니다. Apache AGE를 사용하면 그래프 데이터베이스 기능을 관계형 데이터베이스에 직접 통합하여 복잡한 관계를 원활하게 탐색하고 분석할 수 있습니다. 이 기능은 소셜 네트워크, 사기 탐지 및 권장 사항 시스템과 같은 데이터 연결에 대한 심층적인 인사이트를 필요로 하는 애플리케이션에 유용합니다. Apache AGE는 openCypher 쿼리 언어 및 강력한 PostgreSQL 기반에 대한 지원을 통해 그래프 데이터를 관리하고 쿼리하기 위한 확장 가능하고 효율적인 솔루션을 제공합니다.

Apache AGE의 주요 기능

  • 그래프 및 관계형 데이터 통합: AGE를 사용하면 PostgreSQL 내에서 그래프와 관계형 데이터 간의 원활한 상호 작용이 가능합니다.
  • openCypher 쿼리 언어: AGE는 그래프 데이터베이스에 대해 널리 인식되는 이 쿼리 언어를 지원하여 쿼리 작성 및 유지 관리를 간소화합니다.
  • 확장성 및 안정성: PostgreSQL의 검증된 아키텍처에서 AGE는 확장성과 엔터프라이즈급 견고성을 상속합니다.

그래프 데이터베이스를 사용하는 이유는 무엇인가요?

그래프 데이터베이스는 복잡하고 상호 연결된 관계를 나타내고 쿼리하는 데 탁월합니다. 심층 관계 통과에 최적화되지 않은 여러 조인 또는 문서 데이터베이스가 필요한 관계형 데이터베이스와 달리 그래프 데이터베이스는 엔터티 간의 관계를 자연스럽게 모델링합니다. 예를 들어 그래프 데이터베이스에서 "친구의 친구" 또는 "두 지점 사이의 가장 짧은 경로"를 쿼리하는 것이 더 직관적이고 효율적입니다.

AGE는 PostgreSQL의 ACID 규격 트랜잭션 시스템을 사용하여 그래프 쿼리의 안정성과 원자성을 보장합니다. 이 통합은 팩트와 개념을 노드로 구성하고 상호 연결을 에지로 구성하여 AI 기반 검색 및 데이터 생성을 지원하는 Knowledge Graphs와 같은 고급 애플리케이션을 용이하게 합니다.

Azure 고객은 AGE 확장을 사용하도록 설정할 수 있습니다.

Azure Database for PostgreSQL에는 Apache AGE가 확장으로 포함되어 있습니다.

다음 단계는 유연한 서버 인스턴스에서 확장을 사용하도록 설정하는 데 도움이 됩니다.

액세스 서버 매개 변수

Azure Portal 내에서 PostgreSQL 유연한 서버 인스턴스로 이동하고 서버 매개 변수 옵션을 선택합니다.

다음 설정을 조정합니다.

  • azure.extensions: 매개 변수 필터에서 사용 가능한 확장 중 AGE를 검색하고 사용하도록 설정합니다.
  • shared_preload_libraries: 매개 변수 필터에서 AGE를 검색하고 사용하도록 설정합니다.

저장을 선택하여 이러한 변경 내용을 적용합니다. 서버가 자동으로 다시 시작하여 AGE 확장을 활성화합니다.

비고

shared_preload_libraries이(가) 활성화되지 않으면 쿼리에서 AGE 스키마를 사용하려고 할 때 다음과 같은 오류가 발생합니다: "오류: 첫 번째 암호 쿼리에서 처리되지 않은 암호(cstring) 함수 호출 오류"

PostgreSQL에서 AGE 사용

서버가 다시 시작되면 psql 인터프리터를 사용하여 PostgreSQL 인스턴스에 연결합니다. 다음 명령을 실행하여 AGE를 사용하도록 설정합니다.

CREATE EXTENSION IF NOT EXISTS AGE CASCADE;

성공하면 쿼리 출력으로 표시됩니다 CREATE EXTENSION .

pg_extension 카탈로그 테이블을 쿼리하여 AGE가 사용되었는지 확인하고 확장의 버전을 확인할 수도 있습니다.

SELECT * FROM pg_extension WHERE extname = 'age';

스키마 경로 구성

AGE는 그래프 데이터 처리에 필수적인 스키마를 ag_catalog추가합니다. 다음을 실행하여 이 스키마가 검색 경로에 포함되는지 확인합니다.

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

Python의 경우 다음을 실행하여 스키마 경로를 설정할 수 있습니다.

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

애플리케이션에서 프로그래밍 방식으로 구성할 수도 있습니다.

다음 단계를 수행하면 AGE 확장 기능을 사용하도록 PostgreSQL 인스턴스가 올바르게 구성되었는지 확인합니다. AGE 확장은 PostgreSQL 내에서 직접 고급 그래프 데이터베이스 기능을 제공합니다. 이 설정을 사용하면 그래프 쿼리를 애플리케이션에 원활하게 통합하여 강력한 데이터 관계 및 인사이트를 잠금 해제할 수 있습니다. AGE 확장을 사용하도록 설정하고 구성하면 이제 PostgreSQL 환경 내에서 그래프 분석의 모든 잠재력을 살펴볼 준비가 되었습니다.

ag_catalog 스키마의 중요한 테이블

  • ag_graph
  • ag_label

ag_graph

Apache AGE의 ag_catalog 스키마 내의 ag_graph 테이블은 함수를 통해 ag_catalog.create_graph PostgreSQL 내에서 만든 그래프와 관련된 메타데이터의 리포지토리 역할을 합니다. 특히 PostgreSQL에서 스키마 역할을 하는 그래프의 이름 및 연결된 네임스페이스와 같은 세부 정보를 유지 관리합니다. 이 네임스페이스는 그래프의 구조를 구성하고 꼭짓점 및 에지 데이터를 저장하기 위한 테이블을 포함합니다.

\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

ag_label 테이블에는 AGE 그래프에 사용되는 레이블에 대한 메타데이터가 저장됩니다. 이러한 레이블을 추적하여 해당 그래프와 연결하고 꼭짓점 또는 가장자리를 나타내는지 여부를 정의합니다. 항목에는 레이블의 고유 ID, 연결된 그래프, 인덱스 및 데이터를 저장하는 기본 PostgreSQL 테이블이 포함됩니다.

\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