Spanner Graph는 Spanner 및 Spanner Omni의 기능으로, Spanner 내에서 직접 그래프 데이터베이스를 사용하여 속성 그래프를 빌드하고 쿼리할 수 있습니다. Spanner Graph는 Spanner의 확장성과 안정성을 그래프 모델링 및 쿼리의 강력한 기능과 결합합니다.
속성 그래프는 데이터를 노드 (항목)와 에지 (항목 간 관계)로 모델링하며, 둘 다 속성 (라벨 및 메타데이터)을 가질 수 있습니다. 이는 소셜 네트워크, 사기 감지, 추천 엔진과 같이 연결성이 높은 복잡한 데이터에 특히 유용합니다.
이 문서의 주제는 Spanner에 적용되는 방식과 동일하게 Spanner Omni에도 적용됩니다.
Spanner Graph 설정 및 쿼리
Spanner Graph를 사용하려면 먼저 Spanner Omni 배포 및 데이터베이스를 만들어야 합니다. 데이터베이스를 만든 후 기존 Spanner Omni 테이블을 그래프 노드 및 에지에 매핑하는 속성 그래프 스키마를 정의합니다.
스키마를 설정하고 기본 테이블에 데이터를 삽입한 후에는 ISO GQL 표준을 구현하는 GoogleSQL의 확장 프로그램인 Graph Query Language (GQL)를 사용하여 그래프 쿼리를 실행할 수 있습니다. 자세한 내용은 Spanner 문서의 Spanner Graph 설정 및 쿼리를 참고하세요.
Spanner Graph 스키마 개요
Spanner Graph 스키마는 관계형 데이터를 그래프로 해석합니다. 스키마는 그래프를 구성하는 노드 테이블과 에지 테이블을 지정합니다. 각 테이블은 Spanner 테이블의 행을 그래프 요소에 매핑합니다. 요소에는 요소를 분류하는 라벨과 속성을 저장하는 속성이 있을 수 있습니다. 자세한 내용은 Spanner 문서의 스키마 개요를 참고하세요.
Spanner Graph 스키마 만들기 및 관리
데이터 정의 언어 (DDL) 문을 사용하여 속성 그래프 정의를 만들거나 업데이트하거나 삭제합니다. CREATE PROPERTY GRAPH 문은 기본 테이블, 키, 라벨을 지정하여 그래프를 정의합니다. 자세한 내용은 Spanner 문서의 Spanner Graph 스키마 만들기 및 관리를 참고하세요.
스키마 설계 권장사항
효율적인 스키마 설계는 성능에 매우 중요합니다. 권장사항은 다음과 같습니다.
인터리브 처리를 사용하여 에지를 소스 노드와 공동 배치합니다.
참조 제약 조건 (외래 키)을 사용하여 그래프 무결성을 보장합니다.
자주 필터링되는 속성에 보조 색인을 만듭니다.
쿼리 패턴에 따라 스키마가 적용된 설계와 스키마가 없는 설계 중에서 선택합니다.
자세한 내용은 Spanner 문서의 스키마 설계 권장사항을 참고하세요.
SQL 뷰를 사용하여 속성 그래프 만들기
SQL 뷰를 사용하여 그래프의 노드와 에지를 정의할 수 있습니다. SQL 뷰와 테이블을 사용하여 그래프를 만드는 것의 차이점을 알아보려면 Spanner 문서의 테이블 대신 뷰로 그래프를 만드는 이점을 참고하세요.
SQL 뷰에서 생성된 그래프 개요
뷰를 추상화 계층으로 사용하면 행 수준 액세스 제어, 유연한 데이터 변환, 스키마가 없는 데이터 모델에서 공식 데이터 모델로의 원활한 전환이 가능합니다. 자세한 내용은 SQL 뷰에서 생성된 그래프 개요를 참고하세요.
SQL 뷰에서 그래프 만들기
뷰에서 그래프를 만들려면 표준 SQL을 사용하여 뷰를 정의합니다. 그런 다음 CREATE PROPERTY GRAPH 문의 NODE TABLES 또는 EDGE TABLES 절에서 이를 참조합니다. 뷰 기반 요소마다 KEY를 명시적으로 정의해야 합니다. KEY 절은 각 그래프 요소를 고유하게 식별하는 소스 뷰의 열을 지정합니다. 자세한 내용은 Spanner 문서의 SQL 뷰에서 그래프 만들기를 참고하세요.
Spanner Graph 데이터 관리
그래프를 정의하는 기본 테이블을 수정하여 Spanner Graph의 데이터를 관리합니다. 자세한 내용은 Spanner 문서의 Spanner Graph 데이터 관리를 참고하세요.
| 작업 | 설명 |
|---|---|
| 삽입 | INSERT 문 또는 변이 API를 사용하여 노드 및 에지 테이블에 새 행을 추가합니다. |
| 업데이트 | 기본 테이블에서 해당 열을 업데이트하여 기존 속성을 수정합니다. |
| 삭제 | 해당 행을 삭제하여 노드 또는 에지를 삭제합니다. 노드를 삭제할 때 연결된 에지를 자동으로 삭제하려면 ON DELETE CASCADE를 사용하세요. |
Spanner Graph 쿼리
Spanner Graph는 그래프 데이터를 순회하고 분석하는 쿼리를 위해 Graph Query Language (GQL)를 지원합니다.
쿼리 개요
그래프 쿼리는 GRAPH 절을 사용하여 대상 그래프를 지정하고 MATCH 절을 사용하여 찾으려는 패턴을 정의합니다. 노드 및 에지 속성을 반환하거나 결과에 집계를 실행할 수 있습니다. 자세한 내용은 Spanner 문서의 쿼리 개요를 참고하세요.
경로 사용
경로는 그래프의 노드와 에지의 시퀀스를 나타냅니다. PATH_LENGTH(), NODES(), EDGES()와 같은 함수를 사용하여 두 노드 간의 모든 경로를 찾거나, 최단 경로를 찾거나, 속성 또는 길이에 따라 경로를 필터링할 수 있습니다. 자세한 내용은 Spanner 문서의 경로 작업을 참고하세요.
쿼리 조정 권장사항
그래프 쿼리를 최적화하려면 다음 단계를 따르세요.
낮은 카디널리티 노드에서 순회를 시작합니다.
모든 노드 및 에지 패턴의 라벨을 명시적으로 지정합니다.
IS_FIRST()함수를 사용하여 카디널리티가 높은 슈퍼 노드에서 순회하는 에지 수를 제한합니다.
자세한 내용은 Spanner 문서의 쿼리 조정 권장사항을 참고하세요.
Spanner Graph로 전체 텍스트 검색 사용
Spanner Graph는 Spanner 전체 텍스트 검색 기능과 통합되어 SEARCH() 함수를 사용하여 구조화되지 않은 텍스트 속성을 기반으로 노드나 에지를 검색할 수 있습니다. 자세한 내용은 Spanner 문서의 Spanner Graph로 전체 텍스트 검색 사용을 참고하세요.
Spanner Graph에서 벡터 검색 사용
그래프 데이터에 대해 벡터 유사성 검색을 수행하여 K-최근접 이웃 (KNN) 또는 근사 최근접 이웃 (ANN)을 찾을 수 있습니다. 이는 유사성 기반 추천 및 AI 기반 애플리케이션에 유용합니다. 자세한 내용은 Spanner 문서의 Spanner Graph에서 벡터 검색 사용을 참고하세요.
Spanner Graph로 스키마 없는 데이터 관리
진화하는 데이터 모델이 있는 애플리케이션의 경우 Spanner Graph는 스키마 없는 데이터 관리를 지원합니다. 속성의 JSON 열이 있는 단일 일반 테이블에 모든 노드와 가장자리를 저장할 수 있으므로 DDL 변경 없이 새 유형과 속성을 추가할 수 있습니다. 자세한 내용은 Spanner 문서의 Spanner Graph로 스키마 없는 데이터 관리를 참고하세요.
Spanner Graph로 마이그레이션
다른 데이터베이스의 기존 그래프 데이터를 Spanner Graph로 마이그레이션할 수 있습니다. 이 프로세스에는 일반적으로 데이터를 CSV 또는 JSON 파일로 내보낸 다음 새 속성 그래프를 지원하는 Spanner 테이블로 가져오는 작업이 포함됩니다. 자세한 내용은 Spanner 문서의 Spanner Graph로 데이터 마이그레이션을 참고하세요.
openCypher 사용자를 위한 Spanner Graph 참조
openCypher를 사용해 본 적이 있다면 Spanner Graph의 GQL 구현이 익숙할 수 있지만 구문에는 몇 가지 차이점이 있습니다.
이 참조를 통해 openCypher 개념과 쿼리를 Spanner Graph MATCH 및 RETURN 시맨틱에 매핑할 수 있습니다. 자세한 내용은 Spanner 문서의 openCypher 사용자를 위한 Spanner Graph 참조를 참고하세요.
Spanner Graph 문제 해결
Spanner Graph의 일반적인 문제로는 참조 무결성 위반 (매달린 에지)과 느리게 실행되는 쿼리가 있습니다. 문제 해결에는 스키마 정의를 검사하고, 누락된 노드나 에지를 확인하고, 쿼리 계획을 사용하여 성능 병목 현상을 식별하는 작업이 포함됩니다. 자세한 내용은 Spanner 문서의 Spanner Graph 문제 해결을 참고하세요.