그래도 언어는 써봐야 맛이기 때문에 실습환경을 구축해서 써봤습니다.
db 가 있어야 해서 casandra 기반으로 gremlin 을 사용할 수 있는 실습 환경입니다.
1. wsl 설치
wsl --install
2. docker desktop 설치
3. 이미지 pull
#wsl 에서
docker pull datastax/dse-server:6.9.21-ubi
4. 볼륨 생성
docker volume create dse-cassandra-data
5. 카산드라 실행전 권한 정리
docker run --rm \
--entrypoint /bin/bash \
-u root \
-e DS_LICENSE=accept \
-v dse-cassandra-data:/var/lib/cassandra \
datastax/dse-server:6.9.21-ubi \
-lc '
mkdir -p /var/lib/cassandra/commitlog \
/var/lib/cassandra/data \
/var/lib/cassandra/hints \
/var/lib/cassandra/saved_caches \
/var/lib/cassandra/metadata \
/var/lib/cassandra/cdc_raw
chmod -R 777 /var/lib/cassandra
ls -ld /var/lib/cassandra /var/lib/cassandra/commitlog
'
6. 컨테이너 실행
docker run -d \
--name dse-graph \
--memory 6g \
-e DS_LICENSE=accept \
-e LANG=C.UTF-8 \
-e LC_ALL=C.UTF-8 \
-e JVM_EXTRA_OPTS="-Xms1g -Xmx1g" \
-p 9042:9042 \
-p 8182:8182 \
-v dse-cassandra-data:/var/lib/cassandra \
datastax/dse-server:6.9.21-ubi -g
7. 정상 확인
docker logs -f dse-graph
#UN으로 표기시 정상
docker exec -it dse-graph nodetool status
8. Gremlin 콘솔 접속
docker exec -it \
-u root \
-e HOME=/root \
dse-graph dse gremlin-console -u cassandra -p Cassandra
이제 그렘린을 써볼 준비가 되었습니다. 아래는 예제 그래프 생성 및 조회 명령어 입니다.
# 기본 그래프 생성
system.graph("simple_c360").create()
# Vertex 생성 ( RDB 에서 기본 정보 저장 테이블과 매칭 )
schema.vertexLabel("Customer").
ifNotExists().
partitionBy("customer_id", Text).
property("name", Text).
create();
schema.vertexLabel("Account").
ifNotExists().
partitionBy("acct_id", Text).
create();
schema.vertexLabel("Loan").
ifNotExists().
partitionBy("loan_id", Text).
create();
schema.vertexLabel("CreditCard").
ifNotExists().
partitionBy("cc_num", Text).
create();
# Edge 생성 ( RDB 에서는 관계 정의용 테이블 )
schema.edgeLabel("owes").
ifNotExists().
from("Customer").
to("Loan").
create();
schema.edgeLabel("uses").
ifNotExists().
from("Customer").
to("CreditCard").
create();
schema.edgeLabel("owns").
ifNotExists().
from("Customer").
to("Account").
property("role", Text).
create();
# 데이터 넣기
michael = g.addV("Customer").
property("customer_id", "customer_0").
property("name", "Michael").
next();
acct_14 = g.addV("Account").
property("acct_id", "acct_14").
next();
loan_32 = g.addV("Loan").
property("loan_id", "loan_32").
next();
cc_17 = g.addV("CreditCard").
property("cc_num", "cc_17").
next();
g.addE("owns").
from(michael).
to(acct_14).
property("role", "primary").
next();
g.addE("owes").
from(michael).
to(loan_32).
next();
g.addE("uses").
from(michael).
to(cc_17).
next();
maria = g.addV("Customer").
property("customer_id", "customer_1").
property("name", "Maria").
next();
g.addE("owns").
from(maria).
to(acct_14).
property("role", "limited").
next();
# 조회 예제 customer_0 가 쓰는 카드번호
dev.V().has("Customer", "customer_id", "customer_0").
out("uses").
values("cc_num")