반응형

이번 시간에는 neo4j의 Multi label기능과 유사한 AgensGraph의 Label 상속에대해 다뤄보도록 한다.

 

Multi-label은 말그대로 하나의 노드에 여러개의 레이블을 부여하는 것을 의미한다. 이와 유사하게 Label 상속은 부모 레이블에 자식 레이블을 상속시켜 노드에 여러개의 레이블을 상속할 수 있다.

 

레이블을 상속하는 코드는 다음과 같다.

CREATE VLABEL childVlabelName inherits (parentVlabelName);
CREATE ELABEL childElabelName inherits (parentElabelName1, parentElabelName2);

위에서 inherits()는 자식 레이블을 상속하는 명령이다. 레이블을 생성할 때 레이블 이름 뒤에 해당 키워드와 함께 부모 레이블의 이름을 명시하면 레이블을 상속할 수 있다. 여기서 부모 레이블은 여러개가 될 수 있다.

 

Example

간단한 예시를 통해 레이블 상속을 이해해보도록 한다.

위와 같이 이름이 초코인 강아지와 나비인 고양이를 '동물'이라는 레이블에 상속시키도록 한다.

create vlabel 동물;
create vlabel 강아지 inherits (동물);
create vlabel 고양이 inherits (동물);

create (v:강아지 {이름:'초코'});
create (v:고양이 {이름:'나비'});

먼저 부모 레이블인 '동물'을 생성하고 자식 레이블인 '강아지', '고양이'를 '동물'레이블에 상속시키며 생성한다. 그리고 각 '강아지', '고양이' 레이블에 이름이 초코, 나비인 노드를 생성해준다.

결과를 확인해 보면 강아지 레이블에는 '초코', 고양이 레이블에는 '나비', 동물 레이블에는 둘 다 포함되어 있음을 알 수 있다.

이번 시간에는 레이블을 상속하는 방법에 대해 알아보았다.

레이블 상속은 잘 활용하면 복잡한 관계에서 다양하고 효율적인 그래프 모델링이 가능할 것이라 생각된다. 따라서, 추후에 활용방안을 더 고민하고 학습해보고 포스팅을 통해 공유해보도록 하겠다.

 

참고

https://bitnine.net/ko/documentation/ (아젠스그래프 개발자 메뉴얼 가이드)

 

문서 ⋆ Bitnine Global Inc.

문서 ⋆ Bitnine Global Inc.

bitnine.net

 

반응형
반응형

이전 포스팅들을 통해 간단하게 Cypher를 이용하여 그래프를 다루는 법을 알아보았다.

 

이번 시간에는 그래프를 표현하는 방법패턴에 대해 알아보도록 한다.

패턴은 하나이상의 노드 or 엣지의 조합으로 나타내며 패턴을 어떻게 작성하는지는 그래프에서 매우 중요한 부분이다.

 

노드(Node)

노드는 괄호()를 이용하여 표현하며 레이블(vlabel), 속성(property), 변수(variable)을 이용하여 더욱 구체화 할 수 있다.

 

1. 기본 노드 패턴

()

괄호 안에 레이블, 속성 등을 표기하지 않는 패턴모든 노드를 의미한다.

 

2. 레이블(vlabel) 추가 노드 패턴

(:person)

노드에 레이블을 표현하고자하면 괄호 안에 (:vlabel_name)으로 표기한다. 위의 예는 person이라는 vlabel을 갖고 있는 노드를 의미한다.

 

3. 변수(variable) 추가 노드 패턴

(v)
(var)
(v:person)

노드에 변수(variable)을 부여하고자 한다면 (variable_name)으로 표기한다. 변수는 알파벳(a~z), 숫자(0~9), 언더바(_)의 조합으로 명명할 수 있다.(숫자로 시작 x) 노드에 변수와 레이블을 동시에 나타내고자 할 때는 (variable_name:vlabel_name)으로 표기한다.

 

4. 속성(property) 추가 노드 패턴

({name: 'Jack'})
(v:person {name: 'Jack'})
(v:person {name: 'Jack', age: 24})

노드 안에 속성(property)를 표현하고자 한다면 ({property_name:property_value})로 표기한다. 값이 문자열(string)인 경우에 작은 따옴표('')로 값을 감싸주어야하며, 속성을 여러개 표현하고자 한다면 콤마(,)를 이용한다.

 

엣지(Edge)

엣지는 2개의 대시(-)와 화살괄호(<,>)를 이용하여 표현하며 레이블(elabel), 속성(property), 변수(variable)을 이용하여 더욱 구체화 할 수 있다. 

 

1. 기본 엣지 패턴

-[]-
-[]->
<-[]-

대괄호([]) 안에 레이블, 속성 등을 표기하지 않는 패턴모든 엣지를 의미한다. 화살괄호를 추가하면 방향을 가진 모든 엣지를 의미한다.

 

2. 레이블(elabel) 추가 엣지 패턴

-[:knows]->

엣지에 레이블을 표현하고자하면 대괄호 안에 -[:elabel_name]-> 으로 표기한다. 위의 예는 know이라는 elabel을 갖고 있는 엣지를 의미한다.

 

3. 변수(variable) 추가 엣지 패턴

-[e]->
-[e:likes]->

엣지에 변수(variable)를 부여하고자 한다면 -[variable_name]->으로 표기한다. 엣지에 변수와 레이블을 동시에 나타내고자 할 때는 -[variable_name:elabel_name]->으로 표기한다.

 

4. 속성(property) 추가 엣지 패턴

-[{why: 'She is lovely'}]->
-[:likes {why: 'She is lovely'}]->
-[e:likes {why: 'She is lovely'}]->

엣지 안에 속성(property)를 표현하고자 한다면 -[{property_name:property_value}]->로 표기한다. 값이 문자열(string)인 경우에 작은 따옴표('')로 값을 감싸주어야하며, 속성을 여러개 표현하고자 한다면 콤마(,)를 이용한다.

 

노드와 엣지 (Nodes & Edges)

패턴은 노드와 엣지를 각각 표현할 수도 있고, 함께 사용하여 표현할 수도 있다.

 

1. 기본 노드&엣지 패턴

()-[]->()

노드와 엣지를 함께 사용하는 패턴의 기본틀은 ()-[]->()이다.

 

2. 레이블(label), 변수(variable), 속성(property) 추가 노드&엣지 패턴

(jack:person {name: 'Jack'})-[k:knows]->(emily:person {name: 'Emily'})

노드와 엣지 각각의 패턴 표현과 마찬가지로 노드&엣지 패턴에서도 레이블, 변수, 속성을 추가하여 패턴을 구체화할 수 있다. 

 

3. 패턴 전체에 변수(variable) 추가 노드&엣지 패턴

p = (:person)-[:knows]->(:person)

변수는 노드와 엣지 각각에도 부여할 수 있지만 패턴 전체를 대상으로도 부여할 수 있다. 패턴 전체에 변수를 부여하고자 한다면 =를 이용한다. 위 예제에서 p는 변수(variable)이고, =을 이용하여 패턴 전체를 대상으로 변수를 적용하였다.

 

Path

패턴 내에서 노드와 엣지의 개수는 지속적으로 증가할 수 있다. 이러한 과정에서 패턴 내 일련 경로의 단위를 path라고 한다.

 

(a)-[]->( )-[]->(c)
(a)-[*2]->(c)

(a)-[]->( )-[]->( )-[]->(d)
(a)-[*3]->(d)

(a)-[]->( )-[]->( )-[]->( )-[]->(e)
(a)-[*4]->(e)

길이가 긴 path의 경우, 가독성을 높이고 작성의 편의성을 위해 축약된 형태로 바꿀 수 있다. 노드 n개가 엣지를 n-1번 거쳐서 간다면 대괄호 내에 별표(*)와 함께 n-1을 표기하면 된다. 위의 첫번째 예제에서 a노드는 c노드까지 2번을거쳐 가므로 대괄호 안에 별표와 함께 2를 표기하여 표기하였다.

 

Flexible Length

패턴을 작성하다보면 상황에 따라 한 질의 내에서 거쳐야 하는 엣지의 수에 동적인 변화를 줘야하는 경우가 생길 수 있다.

 

(a)-[*2..]->(b)
(a)-[*..7]->(b)
(a)-[*3..5]->(b)
(a)-[*]->(b)

path의 길이에 동적인 변화를 부여하고 싶을 때는 대괄호 내에 ..를 표기하면 된다. 위 예제는 차례대로 엣지의 개수를 2개 이상 지닌 path, 7개 이하 지닌 path, 3개 이상 5개 이하 지닌 path, 무한 길이의 path를 뜻한다.

 

이것으로 이번 포스팅에서는 Cypher에서 그래프를 표현하는 방법, 패턴에대해 알아보았다.

 

다음 포스팅에서는 레이블의 상속 방법에대해 다뤄보도록한다.

참고

https://bitnine.net/ko/documentation/ (아젠스그래프 개발자 메뉴얼 가이드)

 

문서 ⋆ Bitnine Global Inc.

문서 ⋆ Bitnine Global Inc.

bitnine.net

 

반응형
반응형

이전 포스팅들을 통해 GDB에 데이터를 적재하고 조회하는 방법까지 알아보았다.

Cypher - 그래프 질의하기

 

Cypher - 그래프 질의하기(Querying Graph)

이전 포스팅들을 통해 GDB에 그래프와 레이블을 생성한 후, 노드&엣지를 생성하였다. Cypher - 노드&엣지 생성/제거하기 Cypher - 노드&엣지 생성/제거하기(CREATE/DELETE Node&Edge) GDB를 사용하기 위해서는

jobdahan-tech.tistory.com

이번에는 GDB에서 적재한 데이터를 수정하는 방법을 알아보도록 한다.

 

그래프 수정(Mnipulating Graph)

기존에 있던 그래프 데이터를 수정하기 위해서는 그래프 조회 때와 마찬가지로 MATCH 절의 패턴을 표기하여 해당 그래프를 찾아낸 뒤에 수정 작업을 해야 한다.

 

그래프를 수정하는 쿼리는 다음과 같다.

MATCH (v:label_name {property: 'property_name'})
SET v.property = 'property_name2'

MATCH 절은 해당 절에 표기된 패턴에 부합하는 그래프 데이터를 찾아낸다. 그리고 SET 절을 이용하여 노드나 엣지의 속성 값을 설정할 수 있다. (기존의 속성 값: property_name -> 새로 설정한 속성 값: property_name2)

 

패턴을 표기하는 방법은 다음 포스팅을 참고한다.

Cypher - 그래프 표현 방법, 패턴(Pattern)

 

Cypher - 그래프 표현 방법, 패턴(Pattern)

이전 포스팅들을 통해 간단하게 Cypher를 이용하여 그래프를 다루는 법을 알아보았다. 이번 시간에는 그래프를 표현하는 방법인 패턴에 대해 알아보도록 한다. 패턴은 하나이상의 노드 or 엣지의

jobdahan-tech.tistory.com

 

예시

이전에 적재한 그래프 정보에서 이름이 '박OO'인 사람의 나이'박OO'이 '이OO'에게 남긴 좋아요 수 속성 값을 새로 설정해보록 한다.

속성 값을 수정하는 질의는 다음과 같다.

MATCH (v:n_user{name:'박OO'})-[r:e_follow{like:0}]->(v2:n_user{name:'이OO'})
SET v.age = 31, r.like = 1;

우선 MATCH절로 '박OO'와 '이OO'의 관계를 나타내는 패턴을 표기하여 원하는 그래프를 찾는다. 그리고 SET절을 이용하여 변수v에 해당하는 사용자 '박OO'의 나이 속성 값을 31변수 r에 해당하는 '박OO'과 '이OO' 팔로우 관계의 좋아요 수속성 값을 1로 변경한다.

 

쿼리의 결과는 다음과 같다.

쿼리를 실행하면 'UPDATE 2' 알림을 통해 속성 값 두가지가 업데이트 됨을 알 수 있다.

 

이제 새로 설정한 속성 값이 잘 변경이 되었는지 조회를 통해 확인하도록 한다.

MATCH (v:n_user{name:'박OO'})-[r:e_follow]->(v2:n_user{name:'이OO'})
RETURN *;

마찬가지로 MATCH절을 통해 '박OO'와 '이OO'의 관계를 나타내는 패턴을 표기하여 원하는 그래프를 찾고, RETURN절을 통해 모든 속성 값들을 조회하여 새로 설정한 값들이 잘 변경되었는지 확인한다.

 

조회의 쿼리를 실행한 결과는 다음과 같다.

위의 결과를 통해 사용자 '박OO'의 나이가 31, '박OO'이 '이OO'에게 남긴 좋아요 수가 1로 변경이 된것을 확인할 수 있다.

 

이것으로 이번 포스팅에서는 Cypher를 이용하여 그래프를 수정하는 방법을 알아보았다.

 

다음 포스팅에서는 이전의 포스팅들에서 많이 언급이 되었던 그래프를 표현하는 방법, 패턴에대해 알아보도록한다.

 

참고

https://bitnine.net/ko/documentation/ (아젠스그래프 개발자 메뉴얼 가이드)

 

문서 ⋆ Bitnine Global Inc.

문서 ⋆ Bitnine Global Inc.

bitnine.net

 

반응형
반응형

GDB를 사용하기 위해서는 그래프를 생성하고, 레이블을 생성한 후, 노드&엣지를 생성해야 한다.

 

이전 포스팅들을 통해 그래프와 레이블을 생성하고 삭제하는 방법까지 알아보았다.

Cypher - 레이블 생성 & 삭제하기

 

Cypher - 레이블 생성&삭제하기(CREATE/DROP LABEL)

GDB를 사용하기 위해서는 그래프를 생성하고, 레이블을 생성한 후, 노드&엣지를 생성해야 한다. 이전 포스팅에서 그래프를 생성하고 삭제하는 방법까지 알아보았다. Cypher - 그래프 생성&삭제하기

jobdahan-tech.tistory.com

이번 포스팅에서는 노드&엣지를 생성하고 삭제하는 방법을 알아본다.

 

노드&엣지 생성하기(CREATE Node&Edge)

이전 포스팅에서 언급한 바와 같이 GDB는 국내 유일 GDB 기업 비트나인의 AgensGraph를 사용하고, 결과를 보기위한 클라이언트 애플리케이션은 PostgreSQL의 Pgadmin을 사용하도록 한다.

 

노드&엣지를 생성하는 쿼리는 다음과 같다.

CREATE (:vlabel_name {property: 'property_name'});
CREATE (:vlabel_name {property: 'property_name'})-[:elabel_name]->(:vlabel_name {property: 'property_name2'});

CREATE절은 노드&엣지 생성하는 명령이며  생성할 노드 혹은 엣지를 패턴으로 작성하여 사용한다. 패턴을 표현하는 방법에 대해서는 다음의 포스팅을 참고하도록 한다.

 

노드&엣지 제거하기(DELETE Node&Edge)

노드와 엣지를 만들었으니 이제 삭제하는 방법에 대해 알아본다.

 

노드와 엣지를 삭제하는 쿼리는 다음과 같다.

-- Delete Node
MATCH (v:vlabel_name {property:'property_name'})
DELETE v;

-- Delete Edge
MATCH (v:vlabel_name {property:'property_name'})-[r:elabel_name]->(v2:vlabel_name {property:'property_name2'})
DELETE l;

DELETE절은 노드 or 엣지를 제거하는 절이며 MATCH절을 통해 제거하고자 하는 노드 or 엣지를 찾고 DELETE절에 variable을 표기하여 해당 노드 or 엣지를 제거한다. 단, 제거하려는 노드가 다른 노드와 엣지로 연결되어 있다면 해당 엣지를 먼저 제거해야 노드가 제거된다.

 

예시

이전 포스팅에서 GDB 설명 포스팅의 예시 그래프를 이용하여 sns_network라는 이름의 그래프를 만들고, n_user, e_follow라는 레이블을 생성했다. 다음으로 각 노드와 엣지를 생성해야 한다.

위의 그래프에서 노드의 정보 사용자 정보이고 엣지의 정보 팔로우 정보이므로 사용자 정보 테이블을 이용하여 노드를 생성하고 팔로우 정보 테이블을 이용하여 엣지를 생성한다.

-- Create Node
CREATE (:n_user {name:'김OO', gender:'M', age:27, address:'서울'});
CREATE (:n_user {name:'이OO', gender:'W', age:22, address:'인천'});
CREATE (:n_user {name:'박OO', gender:'W', age:30, address:'부산'});
-- Create Edge
MATCH (v:n_user{name:'김OO'}), (v2:n_user{name:'이OO'})
CREATE (v)-[:e_follow {like:3, comment:5}]->(v2);
MATCH (v:n_user{name:'이OO'}), (v2:n_user{name:'김OO'})
CREATE (v)-[:e_follow {like:2, comment:5}]->(v2);
MATCH (v:n_user{name:'박OO'}), (v2:n_user{name:'이OO'})
CREATE (v)-[:e_follow {like:0, comment:1}]->(v2);

노드와 엣지를 생성하는 쿼리는 위와같다.

 

엣지를 생성할 때 CREATE절만 사용하면 row마다 새로운 노드와 엣지가 생성되므로 노드가 중복이 되어 생성된다. 따라서, MATCH절을 이용하여 엣지를 생성할 노드들을 정해준 후 엣지를 생성해야 한다.

 

노드와 엣지를 한번에 생성한 쿼리를 실행한 결과는 다음과 같다.

작성한 쿼리를 선택한 후 1번의 실행 버튼을 누르면 밑에 쿼리가 성공적으로 실행됨을 알려주고, 다음으로 노드와 엣지의 데이터의 수 count_rows를 선택하면 데이터가 생성된 것을 알 수 있다.

지금까지 사용자 정보 테이블을 이용하여 노드, 팔로우 정보 테이블을 이용하여 엣지를 생성하였다.

 

이를 DELETE절을 이용하여 제거해주도록 한다.

-- Delete Edge
MATCH (v:n_user{name:'김OO'})-[r:e_follow{like:3}]->(v2:n_user{name:'이OO'})
DELETE r;
MATCH (v:n_user{name:'이OO'})-[r:e_follow{like:2}]->(v2:n_user{name:'김OO'})
DELETE r;
MATCH (v:n_user{name:'박OO'})-[r:e_follow{like:0}]->(v2:n_user{name:'이OO'})
DELETE r;

-- Delete Node
MATCH (v:n_user{name:'김OO'})
DELETE v;
MATCH (v:n_user{name:'이OO'})
DELETE v;
MATCH (v:n_user{name:'박OO'})
DELETE v;

위에서 설명한바와 같이 제거하려는 노드가 다른 노드와 엣지로 연결되어 있다면 해당 엣지를 먼저 제거해야 노드가 제거되므로 엣지를 먼저 제거한 후 노드를 제거한다.

 

노드와 엣지를 제거하는 쿼리를 실행한 결과는 다음과 같다.

작성한 쿼리를 선택하여 1번 버튼으로 실행하면 아래의 메시지를 통해 노드와 엣지가 제거된 것을 알 수 있고, 2번을 통해 노드와 엣지의 데이터의 수 count_rows를 선택하면 데이터가 제거된 것을 알 수 있다.

이것으로 이번 포스팅에서는 Cypher를 이용하여 노드와 엣지를 생성하고 제거하는 방법을 알아보았다.

 

다음 포스팅에서는 그래프 질의를 통해 데이터를 조회하는 방법을 다뤄보며 이번시간에 적재한 데이터가 잘 적재되었는지도 확인 해보도록 한다.

 

참고

https://bitnine.net/ko/documentation/ (아젠스그래프 개발자 메뉴얼 가이드)

 

문서 ⋆ Bitnine Global Inc.

문서 ⋆ Bitnine Global Inc.

bitnine.net

 

반응형
반응형

GDB를 사용하기 위해서는 그래프를 생성하고, 레이블을 생성한 후, 노드&엣지를 생성해야 한다.

 

이전 포스팅에서 그래프를 생성하고 삭제하는 방법까지 알아보았다.

Cypher - 그래프 생성&삭제하기

 

Cypher - 그래프 생성&삭제하기(CREATE/DROP GRAPH)

GDB와 Cypher에대해 간단하게 알아보았으니 이제 Cypher를 사용하여 GDB를 다루는 법을 알아보자. GDB와 Cypher가 무엇인지 모르는분들은 이전 포스팅을 참고하길 바란다. GDB란?

jobdahan-tech.tistory.com

이번 포스팅에서는 레이블을 생성하고 삭제하는 방법을 알아본다.

 

레이블 생성하기(CREATE LABEL)

이전 포스팅에서 언급한 바와 같이 GDB는 국내 유일 GDB 기업 비트나인의 AgensGraph를 사용하고, 결과를 보기위한 클라이언트 애플리케이션은 PostgreSQL의 Pgadmin을 사용하도록 한다.

 

레이블을 생성하는 쿼리는 다음과 같다.

CREATE VLABEL vlabel_name;
CREATE ELABEL elabel_name;

CREATE VLABEL 노드, CREATE ELABEL 엣지 생성하는 명령이며  해당 명령과 함께 생성할 노드, 엣지 레이블의 이름(vlabel_name, elabel_name)을 함께 명시하여 사용한다.

 

레이블 삭제하기(DROP LABEL)

레이블을 만들었으니 이제 삭제하는 방법에 대해 알아본다.

 

레이블을 삭제하는 쿼리는 다음과 같다.

DROP VLABEL vlabelName;
DROP ELABEL elabelName;

DROP VLABEL vlabelName CASCADE;

DROP VLABEL/ELABEL는 레이블을 삭제하는 명령이다. 각 명령은 삭제할 VLABEL/ELABEL의 이름을 함께 명시하여 사용한다.

 

상속관계에 있는 VLABEL은 직접적으로 삭제가 되지 않으므로 CASCADE를 사용하여 의존관계의 모든 데이터를 삭제해야 한다. 노드의 레이블을 상속하는 것에 대한 내용은 추후에 다시 다뤄보도록 하며 다음으로 예시를 살펴보자. 

 

예시

이전 포스팅에서 GDB 설명 포스팅의 예시 그래프를 이용하여 sns_network라는 이름의 그래프를 만들었고, 다음으로 레이블을 생성해야 한다.

예시 그래프

위의 그래프에서 노드의 정보 사용자 정보이고 엣지의 정보 팔로우 정보이므로 노드의 레이블(VLABEL) n_user, 엣지의 레이블(ELABEL) e_follow라고 정의한다.

CREATE VLABEL n_user;
CREATE ELABEL e_follow;

위와 같이 VLABEL, ELABEL을 생성하는 쿼리를 실행하면 결과는 다음과 같다.

작성한 쿼리를 선택한 후 1번의 실행 버튼을 누르면 밑에 쿼리가 성공적으로 실행됨을 알려준다. 

 

다음으로 DB를 새로고침 하면 n_user라는 노드 레이블과 e_follow라는 엣지 레이블이 생성된 것을 확인할 수 있다.

지금까지 n_user, e_follow라는 VLABEL, ELABEL을 sns_network그래프에 만들었다.

 

이를 DROP VLABEL/ELABEL을 이용하여 삭제해주도록 한다.

DROP VLABEL n_user;
DROP ELABEL e_follow;

마찬가지로 위와 같이 레이블을 삭제하는 쿼리를 작성한 후 실행한다.

작성한 쿼리를 선택하여 1번 버튼으로 실행하면 아래의 메시지를 통해 레이블이 삭제된 것을 알 수 있고, 2번을 통해 DB를 새로고침 하면 다음과 같이 n_user, e_follow가 목록에서 사라진 것을 알 수 있다.

이것으로 이번 포스팅에서는 Cypher를 이용하여 레이블을 생성하고 삭제하는 방법을 알아보았다.

 

다음 포스팅에서는 노드&엣지를 생성하고 삭제하는 방법에 대해 알아보도록 한다.

 

참고

https://bitnine.net/ko/documentation/ (아젠스그래프 개발자 메뉴얼 가이드)

 

문서 ⋆ Bitnine Global Inc.

문서 ⋆ Bitnine Global Inc.

bitnine.net

 

반응형
반응형

GDB와 Cypher에대해 간단하게 알아보았으니 이제 Cypher를 사용하여 GDB를 다루는 법을 알아보자.

 

GDB와 Cypher가 무엇인지 모르는분들은 이전 포스팅을 참고하길 바란다.

GDB란?

 

GDB란?

GDB란? Cypher 사용하는 방법을 설명하기에 앞서 GDB에 대해 간단히 알아보도록 하자. GDB는 Graph Database의 약자로 위키피디아에서 "데이터를 표현하고 저장하기 위해 노드, 에지 및 속성이 있는 시맨

jobdahan-tech.tistory.com

 

 

Cypher란?

 

Cypher란?

Cypher는 그래프 데이터를 대상으로 질의를 수행하는 그래프 질의 언어이다. 쉽게 말하면 RDB에서의 질의 언어 Oracle, PostgreSQL 등과 같이 GDB를 대상으로 하는 질의 언어가 Cypher라고 생각하면 된다. G

jobdahan-tech.tistory.com

GDB는 노드와 엣지로 표현한 그래프의 형태로 데이터를 저장하고 관리한다. 따라서, GDB를 사용하기 위해서는 그래프를 생성하고, 레이블을 생성한 후, 노드&엣지를 생성해야 한다. 또한, 생성이 가능하면 당연히 삭제도 가능해야 할 것이다.

 

이번 시간에는 그래프를 생성하고 삭제하는 방법을 알아본다.

 

그래프 생성하기(CREATE GRAPH)

본격적으로 그래프를 생성하기에 앞서 GDB는 국내 유일 GDB 기업 비트나인의 AgensGraph를 사용하고, 결과를 보기위한 클라이언트 어플리케이션은 PostgreSQL의 Pgadmin을 사용하도록 한다.

 

아젠스그래프는 단일 DB 내에 여러 그래프들을 저장할 수 있다. 따라서, 그래프를 생성하고 사용할 그래프를 선택하여 path를 지정해야 cypher를 이용한 그래프 질의가 가능하다.

 

그래프를 생성하고 path를 지정하는 쿼리는 다음과 같다.

CREATE GRAPH graph_name;
SET graph_path = graph_name;

CREATE GRAPH는 그래프를 생성하는 명령이며  해당 명령과 함께 생성할 그래프의 이름(graph_name)을 함께 명시하여 사용한다. 또한, graph_path는 현재 다룰 그래프를 의미하는 변수로 다루고자 하는 그래프의 이름을 SET을 사용하여 설정한다.

 

그래프 삭제하기(DROP GRAPH)

그래프를 만들었으니 이제 삭제하는 방법에 대해 알아본다.

 

그래프를 삭제하는 쿼리는 다음과 같다.

DROP GRAPH graph_name CASCADE;

DROP GRAPH는 그래프를 삭제하는 명령이다. 아젠스 그래프는 그래프 생성시 노드와 엣지의 초기 레이블이 생성되므로 뒤에 CASCADE를 반드시 사용해야 한다.

 

여기서 CASCADE를 간단하게 설명하자면 관련된 모든 값을 업데이트하거나 삭제할 수 있게 한다. 이는 추후에 다시 다뤄보도록 하며 다음으로 예시를 살펴보자.

 

예시

이해를 돕기 위해 GDB를 설명했던 포스팅의 예시를 가져와 설명을 하도록 한다.

GDB란?

 

GDB란?

GDB란? Cypher 사용하는 방법을 설명하기에 앞서 GDB에 대해 간단히 알아보도록 하자. GDB는 Graph Database의 약자로 위키피디아에서 "데이터를 표현하고 저장하기 위해 노드, 에지 및 속성이 있는 시맨

jobdahan-tech.tistory.com

예시 그래프

위의 그래프는 sns사용자의 팔로우 관계를 나타내는 그래프이므로 이름을 sns_network라고 정의한다.

CREATE GRAPH sns_network;
SET graph_path = sns_network;

위와 같이 sns_network라는 그래프를 생성하고, path를 지정하는 쿼리를 작성해 실행하면 결과는 다음과 같다.

작성한 쿼리를 선택한 후 1번의 실행 버튼을 누르면 밑에 쿼리가 성공적으로 실행됨을 알려준다. (쿼리를 실행하는 방법으로는 1번 버튼을 누르는 것 외에도 f5버튼을 누르는 방법이 있다.)

 

다음으로 DB를 새로고침하면 sns_network라는 이름의 그래프가 생성된 것을 확인할 수 있다.

지금까지 sns_network라는 그래프를 DB에 만들었다.

 

이제 DROP GRAPH를 이용하여 삭제해주도록 한다.

DROP GRAPH sns_network cascade;

마찬가지로 위와 같이 sns_network그래프를 삭제하는 쿼리를 작성한 후 실행한다.

작성한 쿼리를 선택하여 1번 버튼으로 실행하면 아래의 메세지를 통해 그래프가 삭제 된 것을 알 수 있고, 2번을 통해 DB를 새로고침하면 다음과 같이 sns_network 그래프가 목록에서 사라진 것을 알 수 있다.

이것으로 이번 포스팅에서는 Cypher를 이용하여 GDB에 그래프를 생성하고 삭제하는 방법을 알아보았다.

 

다음 포스팅에서는 레이블을 생성하고 삭제하는 방법에 대해 알아보도록 한다.

 

참고

https://bitnine.net/ko/documentation/ (아젠스그래프 개발자 메뉴얼 가이드)

 

문서 ⋆ Bitnine Global Inc.

문서 ⋆ Bitnine Global Inc.

bitnine.net

 

반응형

+ Recent posts