그래프 데이터베이스 개념

그래프 데이터베이스는 실제 모델의 객체를 그래프 형태로 저장하고 관리합니다.
객체(정점) 사이에는 관계(간선)가 존재하며, 유사한 정점의 모음은 그룹(레이블)으로 표현할 수 있습니다.
정점과 간선은 데이터(속성)를 가지므로 속성 그래프 모델(Property Graph Model)이라고도 부를 수 있습니다.

이 그래프 데이터 모델의 구성 요소를 좀 더 자세히 살펴보겠습니다.
다음 예제는 그래프의 구성 요소를 보여줍니다.

정점

정점은 그래프 데이터 모델에서 가장 기본이 되는 요소입니다. 정점은 실세계의 엔터티를 나타내며 속성을 가집니다.

그래프는 정점과 간선을 기본 단위로 가집니다. AgensGraph에서는 정점과 간선 모두 속성을 포함할 수 있습니다. 엔터티는 보통 정점으로 표현되지만, 경우에 따라 간선으로 나타낼 수도 있습니다. 간선이나 속성과 달리 정점은 레이블 값을 가지지 않거나 여러 개 가질 수 있습니다.

가장 단순한 형태의 그래프는 하나의 정점으로 구성됩니다. 정점은 속성을 가지지 않거나 하나 이상 가질 수 있습니다.

다음 단계는 여러 개의 정점으로 그래프를 구성하는 것입니다. 이전 단계의 그래프에 정점을 두 개 이상 추가하고, 기존 정점에 속성을 하나 이상 추가합니다.

간선

간선은 정점을 연결합니다. 두 정점이 간선으로 연결되면, 각 정점은 간선의 방향에 따라 시작 정점 또는 끝 정점의 역할을 합니다. 정점과 마찬가지로 간선도 속성을 가집니다.
정점 사이의 간선은 그래프 데이터베이스에서 중요한 역할을 하며, 특히 연결된 데이터를 검색할 때 그러합니다.
간선을 사용하면 정점을 리스트, 트리, 맵, 복합 엔터티 등 다양한 데이터 구조로 만들 수 있습니다. 지금까지 구성하던 예제에 간선을 추가하면 더 의미 있는 데이터를 표현할 수 있습니다.

예제에서는 ACTED_IN 과 DIRECTED 가 간선 타입으로 사용됩니다. ACTED_IN 의 속성인 Roles 는 배열 타입의 값을 저장합니다.

ACTED_IN 간선은 Tom Hanks 정점을 시작 정점으로, Forrest Gump 정점을 끝 정점으로 가집니다. 다시 말해, Tom Hanks 정점은 나가는 간선(outgoing edge)을 가지고 Forrest Gump 정점은 들어오는 간선(incoming edge)을 가진다고 할 수 있습니다.

한 방향으로 간선이 존재하는 경우, 반대 방향으로 간선을 중복해서 추가할 필요는 없습니다. 이는 그래프 순회나 성능과 관련이 있습니다.

간선은 항상 방향성을 가지지만, 애플리케이션에서 방향성이 필요하지 않다면 이를 무시할 수도 있습니다. 아래 다이어그램은 자기 자신을 가리키는 간선을 가진 정점을 보여줍니다.

그래프 순회를 보다 효율적으로 수행하기 위해 모든 간선은 간선 타입을 가지는 것이 권장됩니다.

속성

정점과 간선 모두 속성을 가질 수 있습니다. 속성은 어트리뷰트 값이며, 각 어트리뷰트 이름은 문자열 타입으로만 정의되어야 합니다.

속성 값에 사용할 수 있는 데이터 타입은 다음과 같습니다.

  • 숫자 타입

  • 문자열 타입

  • 불리언 타입

  • 리스트 타입(다양한 데이터 타입의 모음)

NULL 값은 속성 값으로 사용할 수 없습니다. NULL이 입력되면 해당 속성 자체가 없는 것으로 간주됩니다. 단, NULL 값은 리스트 안에서는 사용할 수 있습니다.

타입

설명

값 범위

boolean

true/false

byte

8-bit integer

-128 to 127, inclusive

short

16-bit integer

-32768 to 32767, inclusive

int

32-bit integer

-2147483648 to 2147483647, inclusive

long

64-bit integer

-9223372036854775808 to 9223372036854775807, inclusive

float

variable-precision, inexact

15 decimal digits precision

char

16-bit unsigned integers representing Unicode characters

u0000 to uffff (0 to 65535)

String

sequence of Unicode characters

infinite

레이블

레이블을 사용하여 정점이나 간선의 역할 또는 타입을 정의할 수 있습니다. 유사한 특성을 가진 정점이나 간선을 그룹으로 묶고 그 그룹의 이름을 정의할 수 있는데, 이를 “레이블”이라고 합니다. 즉, 유사한 레이블을 가진 모든 정점이나 간선은 동일한 그룹에 속합니다.

레이블을 사용하면 전체 그래프가 아니라 해당 그룹에 대해서만 데이터베이스 쿼리 구문을 수행할 수 있으며, 이는 보다 효율적인 쿼리에 도움이 됩니다.

정점에 레이블을 사용하는 것은 선택 사항이며, 각 정점은 레이블을 가지지 않거나 하나만 가질 수 있습니다.

레이블은 속성에 대한 제약 조건을 정의하거나 인덱스를 추가하는 데에도 사용할 수 있습니다.

정점과 마찬가지로 간선에도 레이블을 할당할 수 있습니다. 단, 정점과 달리 레이블이 없는 간선은 존재할 수 없으며, 모든 간선은 적어도 하나의 레이블을 가져야 합니다.

기존 예제 그래프에 Person 과 Movie 레이블을 추가해 보겠습니다.

레이블 이름

레이블 이름은 문자와 숫자로 표현할 수 있으며, 모두 소문자로 변환됩니다.

레이블은 int 타입의 고유 id를 저장하며, 이는 데이터베이스가 최대 2^16-1(65535)개의 레이블을 포함할 수 있음을 의미합니다.

순회

순회는 요청된 쿼리에 응답하기 위해 그래프를 탐색하면서 경로를 따라가는 것입니다. 순회는 요청된 쿼리의 답을 찾기 위해 시작 정점부터 관련 정점을 검색하는 과정입니다. 다시 말해, 특정 규칙에 따라 그래프를 순회하는 정점과 그로부터 파생되는 간선을 따라가는 것을 의미합니다.

지금까지 설명한 예제에서는 Tom Hanks 가 출연한 영화를 찾고자 합니다. Tom Hanks 정점에서 시작하여, 이와 연결된 ACTED_IN 간선을 따라 Forrest Gump 정점에서 끝나는 모든 과정을 순회할 수 있습니다.

그래프 데이터베이스에서 cypher 쿼리 구문의 순회와 추가 기법을 사용하면 더 나은 결과 데이터를 도출할 수 있습니다. 자세한 내용은 Cypher Query Language를 참조하십시오.

경로

경로는 쿼리 구문 또는 순회의 결과 데이터로, 하나 이상의 정점과 그에 연결된 간선을 보여줍니다.

이전 예제의 경로(순회 결과 데이터)는 다음과 같습니다.

위 경로의 길이는 1입니다. 가장 짧은 경로의 길이는 0이며, 이는 하나의 정점이 간선을 가지지 않는 경우입니다.

정점이 자기 자신을 가리키는 간선을 가지면 경로의 길이는 1입니다.