맨위로가기

그렘린 (질의어)

"오늘의AI위키"는 AI 기술로 일관성 있고 체계적인 최신 지식을 제공하는 혁신 플랫폼입니다.
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.

1. 개요

그렘린(Gremlin)은 그래프 데이터베이스를 순회하기 위한 질의어이다. 2009년 "팅커팝(TinkerPop)"이라는 이름으로 시작되어 아파치 소프트웨어 재단의 최상위 프로젝트로 승격되었다. 아파치2-라이선스를 따르며, 그래프 데이터베이스(OLTP) 및 그래프 프로세서(OLAP) 등 다양한 벤더에서 사용할 수 있다. 그렘린은 Gremlin-Groovy, Gremlin-Scala, Gremlin-Clojure, Gremlin-Java8 등 다양한 방언으로 표현 가능하며, 그래프 탐색 머신을 통해 실행된다.

더 읽어볼만한 페이지

  • 아파치 소프트웨어 재단 - 아파치 커먼즈
    아파치 커먼즈는 아파치 재단에서 자바 관련 공통 컴포넌트 개발을 위해 시작된 프로젝트로, Proper, Sandbox, Dormant 세 가지 분류로 나뉘어 재사용 가능한 자바 컴포넌트 개발, 실험적인 프로젝트, 활동 중단된 컴포넌트 보관 등의 역할을 한다.
  • 아파치 소프트웨어 재단 - 아파치 MXNet
    아파치 MXNet은 확장 가능한 딥 러닝 프레임워크로서, CNN 및 LSTM과 같은 다양한 모델을 지원하며 명령형 및 기호적 프로그래밍, 여러 언어, 저사양 장치 배포, 클라우드 환경 지원을 통해 유연성과 폭넓은 활용성을 제공한다.
  • 클러스터 컴퓨팅 - 슈퍼컴퓨터
    슈퍼컴퓨터는 일반 컴퓨터보다 훨씬 높은 성능을 가진 컴퓨터로, 복잡한 계산과 시뮬레이션을 수행하며, 프로세서, 메모리, 스토리지, 네트워크 등으로 구성되어 병렬 처리를 통해 높은 성능을 구현하고, 군사, 기상 예측, 과학 기술 분야, 인공지능 등 다양한 분야에서 활용되고 있다.
  • 클러스터 컴퓨팅 - 컴퓨터 클러스터
    컴퓨터 클러스터는 여러 대의 상용 컴퓨터를 고속 네트워크로 연결하여 고성능 컴퓨팅 시스템을 구축하는 방식으로, 슈퍼컴퓨터를 포함한 다양한 분야에서 높은 가용성과 확장성을 제공하며, 클러스터 미들웨어를 통해 시스템 관리, 부하 분산, 통신 방식, 데이터 공유 등을 지원하고 노드 장애 관리를 위한 펜싱 기술을 활용한다.
  • 스칼라로 작성된 자유 소프트웨어 - 스칼라 (프로그래밍 언어)
    스칼라는 마틴 오더스키가 설계한 객체 지향 및 함수형 프로그래밍 언어이며, 자바 플랫폼에서 실행되고 자바 코드와 상호 운용이 가능하며, 아파치 스파크 등 다양한 곳에서 활용된다.
  • 스칼라로 작성된 자유 소프트웨어 - 아파치 스파크
    아파치 스파크는 대규모 데이터 처리를 위한 오픈 소스 분산 처리 시스템으로, 빠른 속도와 다양한 API 지원을 통해 빅데이터 분석, 머신 러닝, 스트리밍 처리 등 여러 분야에서 활용되며 아파치 소프트웨어 재단의 핵심 프로젝트 중 하나이다.
그렘린 (질의어) - [IT 관련 정보]에 관한 문서
개요
이름Gremlin (그래믈린)
유형질의어
설계자Marko A. Rodriguez
개발자아파치 소프트웨어 재단의 아파치 팅커팝
최초 출시2009년
최신 버전3.7.0
최신 버전 출시일2023년 7월 31일
작성 언어자바
플랫폼크로스 플랫폼 (멀티 플랫폼)
라이선스아파치 라이선스 2.0
웹사이트공식 웹사이트
언어적 특징
방언Gremlin-Java8, Gremlin-Groovy, Gremlin-Python, Gremlin-Scala, Gremlin-Clojure, Gremlin-PHP, Gremlin-JavaScript, Gremlin-Typeset
영향 받은 언어정규 표현식, XPath, Ripple, SPARQL, SQL, Java/JVM

2. 역사

날짜내용
2009년 10월 30일프로젝트 시작, "팅커팝(TinkerPop)"으로 명명[1]
2009년 12월 25일v0.1 최초 릴리스[1]
2011년 5월 21일v1.0 출시[1]
2012년 5월 24일v2.0 출시[1]
2015년 1월 16일팅커팝, 아파치 인큐베이터 프로젝트로 선정[1]
2015년 7월 9일v3.0.0-incubating 출시[1]
2016년 5월 23일아파치 팅커팝, 최상위 프로젝트로 승격[1]
2016년 7월 18일v3.1.3 및 v3.2.1, 아파치 팅커팝으로 첫 출시[1]
2017년 12월 17일v3.3.1 출시[1]
2018년 5월 8일v3.3.3 출시[1]
2019년 8월 5일v3.4.3 출시[1]
2020년 2월 20일v3.4.6 출시[1]


3. 벤더 연동

아파치2 라이선스를 따르는 그래프 순회 언어인 그렘린은 다양한 그래프 시스템 벤더에서 사용 가능하다. 그렘린은 OLTP 그래프 데이터베이스와 OLAP 그래프 프로세서에서 모두 지원된다.

3. 1. 지원 벤더

아파치2 라이선스의 그래프 순회 언어인 그렘린은 그래프 시스템 벤더들이 사용할 수 있다. 일반적으로 두 종류의 그래프 시스템 벤더가 있는데, OLTP 그래프 데이터베이스 및 OLAP 그래프 프로세서이다. 다음 표는 그렘린을 지원하는 그래프 벤더를 요약한 것이다.

벤더그래프 시스템
Neo4j그래프 데이터베이스
OrientDB그래프 데이터베이스
DataStax Enterprise (5.0+)그래프 데이터베이스
Hadoop (Giraph)그래프 프로세서
Hadoop (Spark)그래프 프로세서
InfiniteGraph그래프 데이터베이스
JanusGraph그래프 데이터베이스
Cosmos DB그래프 데이터베이스
Amazon Neptune그래프 데이터베이스
Ontotext 그래프DBTriplestore
ArcadeDB그래프 데이터베이스


4. 그렘린 순회 예시

그렘린은 Gremlin-Groovy영어, Gremlin-Scala영어, Gremlin-Clojure영어, Gremlin-Java8영어 등 다양한 방언으로 사용 가능하다. 다음 예시는 https://web.archive.org/web/20180207123351/https://grouplens.org/datasets/movielens/ MovieLens 데이터셋을 기반으로 한다.[9] 이 데이터셋에는 영화를 평가하는 사용자들이 포함되어 있으며, 사용자는 각자 하나의 직업을 가지고 각 영화는 그와 연계된 하나 이상의 분류가 있다.

4. 1. MovieLens 그래프 스키마

MovieLens 데이터셋은 영화를 평가하는 사용자들이 있으며, 사용자는 각자 하나의 직업을 가지고 각 영화는 그와 연계된 하나 이상의 분류가 있다.[9] MovieLens 그래프 스키마는 다음과 같다.

```cypher

user--rated[stars:0-5]-->movie

user--occupation-->occupation

movie--category-->category

4. 2. 단순 순회

그렘린-그루비 환경에서 다음의 그렘린 쿼리 및 응답 예시는 [https://web.archive.org/web/20180207123351/https://grouplens.org/datasets/movielens/ MovieLens] 데이터셋의 그래프 표현에 상대적이다.[9] 데이터셋에는 영화를 평가하는 사용자들이 포함되어 있다. 사용자는 각자 하나의 직업이 있으며 각 영화는 그와 연계된 하나 이상의 분류가 있다. MovieLens 그래프 스키마는 다음과 같다.

```text

user--rated[stars:0-5]-->movie

user--occupation-->occupation

movie--category-->category

```

그래프의 각 꼭짓점의 경우 레이블을 제외시키고 개개의 레이블을 묶고 계수하면 다음과 같다.

```text

gremlin> g.V().label().groupCount()

==>[occupation:21, movie:3883, category:18, user:6040]

```

만들어진지 가장 오래된 영화의 연도는 다음과 같다.

```text

gremlin> g.V().hasLabel('movie').values('year').min()

==>1919

```

다이 하드의 평균 평점은 다음과 같다.

```text

gremlin> g.V().has('movie','name','Die Hard').inE('rated').values('stars').mean()

==>4.121848739495798

4. 3. 프로젝션 순회

Projection Traversal영어의 예시는 다음과 같다.

첫 번째는 각 카테고리에 대해 해당 카테고리의 이름과 영화 수를 나타내는 표이다.

카테고리영화 수
Animation105
Children's251
Comedy1200
Adventure283
Fantasy68
Romance471
Drama1603
Action503
Crime211
Thriller492
Horror343
Sci-Fi276
Documentary127
War143
Musical114
Mystery106
Film-Noir44
Western68



두 번째는 11개 이상의 평점을 받은 각 영화에 대해 영화 이름과 평균 평점을 나타내는 표이다. 평균 평점의 내림차순으로 정렬되어 있으며, 상위 10개 영화만 출력되었다.

영화 이름평균 평점
산주로4.608
7인의 사무라이4.560
쇼생크 탈출4.554
대부4.524
똑바로 살아라4.520
유주얼 서스펙트4.517
쉰들러 리스트4.510
월레스와 그로밋: 전자바지 소동4.507
선셋 대로4.491
레이더스4.477


4. 4. 선언적 패턴 매칭 순회

Gremlin은 SPARQL과 유사한 선언적 그래프 패턴 매칭을 지원한다. 예를 들어, 다음 쿼리는 Gremlin의 `match()` 단계를 사용한다.[4]

30대 프로그래머들이 좋아하는 80년대 액션 영화는 무엇일까? 영화 이름을 기준으로 그룹화하여 개수를 세고, 그룹 개수 맵을 값의 내림차순으로 정렬한다. 맵을 상위 10개로 제한하고 맵 항목을 출력한다.영어[4]

```groovy

gremlin> g.V().

match(

__.as('a').hasLabel('movie'),

__.as('a').out('category').has('name','Action'),

__.as('a').has('year',between(1980,1990)),

__.as('a').inE('rated').as('b'),

__.as('b').has('stars',5),

__.as('b').outV().as('c'),

__.as('c').out('occupation').has('name','programmer'),

__.as('c').has('age',between(30,40))).

select('a').groupCount().by('name').

order(local).by(valueDecr).

limit(local,10)

==>Raiders of the Lost Ark=26

==>Star Wars Episode V - The Empire Strikes Back=26

==>Terminator, The=23

==>Star Wars Episode VI - Return of the Jedi=22

==>Princess Bride, The=19

==>Aliens=18

==>Boat, The (Das Boot)=11

==>Indiana Jones and the Last Crusade=11

==>Star Trek The Wrath of Khan=10

==>Abyss, The=9

4. 5. OLAP 순회

Online analytical processing|온라인 분석 처리영어(OLAP) 순회는 그래프 데이터베이스에서 복잡한 그래프 순회를 정의하고 실행하는 데 사용된다.

다음은 암묵적인 5성 그래프에서 가장 중심적인 영화를 묻는 예시다.[1]

: ''"암묵적인 5성 그래프에서 가장 중심적인 영화는 무엇입니까?"''[1]

위 질의는 그렘린 콘솔을 사용하여 실행할 수 있다. 먼저, 그래프 순회 소스를 정의한다.[1]

```groovy

gremlin> g = graph.traversal(computer(SparkGraphComputer))

==>graphtraversalsource[hadoopgraph[gryoinputformat->gryooutputformat], sparkgraphcomputer]

```

그런 다음, `repeat()` 단계를 사용하여 5성 등급을 가진 영화를 반복적으로 찾고, `groupCount()` 단계로 각 영화의 이름을 기준으로 평가 횟수를 집계한다. 마지막으로 `times(4)`를 통해 이 과정을 4번 반복하여 결과를 얻는다.[1]

```groovy

gremlin> g.V().repeat(outE('rated').has('stars', 5).inV().

groupCount('m').by('name').

inE('rated').has('stars', 5).outV()).

times(4).cap('m')

==>스타워즈 에피소드 4 - 새로운 희망 35405394353105332

==>아메리칸 뷰티 31943228282020585

==>레이더스 31224779793238499

==>스타워즈 에피소드 5 - 제국의 역습 30434677119726223

==>대부 30258518523013057

==>쇼생크 탈출 28297717387901031

==>쉰들러 리스트 27539336654199309

==>양들의 침묵 26736276376806173

==>파고 26531050311325270

==>매트릭스 26395118239203191

```

결과에서 가장 많이 평가된 영화는 스타워즈 에피소드 4 - 새로운 희망이다.[1]

5. 그렘린 그래프 순회 머신

그렘린은 가상 머신이며, 명령어 집합과 실행 엔진으로 구성된다.

5. 1. 자바 생태계와의 유사성

그렘린은 가상 머신이며, 명령어 집합과 실행 엔진으로 구성된다. 그렘린은 자바와 다음과 같은 유사성이 있다.

자바 생태계그렘린 생태계
아파치 Groovy 프로그래밍 언어Gremlin-Groovy
Scala 프로그래밍 언어Gremlin-Scala
Clojure 프로그래밍 언어Gremlin-Clojure
......
자바 프로그래밍 언어Gremlin-Java8
자바 명령어 집합Gremlin step library
자바 가상 머신Gremlin traversal machine


5. 2. Gremlin steps (instruction set)

Gremlin 언어(그래프 탐색을 표현하는 플루언트 스타일)는 함수 합성 및 함수 중첩을 지원하는 모든 호스트 언어로 표현될 수 있다. 이러한 간단한 요구 사항으로 인해 Gremlin-Groovy, Gremlin-Scala, Gremlin-Clojure 등 다양한 Gremlin 방언이 존재한다.

"단계"는 Gremlin 그래프 탐색 머신의 기본 요소이다. 이는 머신이 궁극적으로 실행하는 매개변수화된 명령어이다. Gremlin 명령어 집합은 약 30개의 단계로 구성된다. 이 단계들은 일반적인 컴퓨팅을 제공하기에 충분하며, 일반적으로 모든 그래프 탐색 쿼리의 일반적인 모티프를 표현하는 데 필요한 것이다.

Gremlin은 언어, 명령어 집합 및 가상 머신이므로 Scala가 JVM으로 컴파일되는 방식과 유사하게 Gremlin 탐색 머신으로 컴파일되는 다른 탐색 언어를 설계하는 것이 가능하다. 예를 들어, 인기 있는 SPARQL 그래프 패턴 일치 언어는 Gremlin 머신에서 실행되도록 컴파일될 수 있다.

5. 3. Gremlin Machine (virtual machine)

그렘린 그래프 탐색 머신은 단일 머신 또는 다중 머신 컴퓨팅 클러스터에서 실행될 수 있다. 실행 독립성을 통해 그렘린은 그래프 데이터베이스 (OLTP)와 그래프 프로세서 (OLAP) 모두에서 실행될 수 있다.

5. 4. SPARQL과의 관계

Gremlin은 SPARQL과 같은 다른 탐색 언어를 컴파일하여 실행할 수 있다. 즉, SPARQL 쿼리를 Gremlin 단계 시퀀스로 변환하여 Gremlin 머신에서 실행 가능하다.
SPARQL 쿼리 예시:```sparql

SELECT ?a ?b ?c

WHERE {

?a a Person .

?a ex:knows ?b .

?a ex:created ?c .

?b ex:created ?c .

?b ex:age ? d .

FILTER(?d < 30)

}

```
위 SPARQL 쿼리의 Gremlin 단계 시퀀스 컴파일 결과:```java

[GraphStep([],vertex), MatchStep(AND,MatchStartStep(a), LabelStep, IsStep(eq(Person)), MatchEndStep], [MatchStartStep(a), VertexStep(OUT,[knows],vertex), MatchEndStep(b)], [MatchStartStep(a), VertexStep(OUT,[created],vertex), MatchEndStep(c)], [MatchStartStep(b), VertexStep(OUT,[created],vertex), MatchEndStep(c)], [MatchStartStep(b), PropertiesStep([age],value), MatchEndStep(d)], [MatchStartStep(d), IsStep(gt(30)), MatchEndStep), SelectStep([a, b, c])].

```
Gremlin-Java8에서 위 SPARQL 쿼리 표현:```java

g.V().match(

as("a").label().is("person"),

as("a").out("knows").as("b"),

as("a").out("created").as("c"),

as("b").out("created").as("c"),

as("b").values("age").as("d"),

as("d").is(gt(30))).

select("a","b","c")

참조

[1] 웹사이트 Apache TinkerPop - Downloads https://tinkerpop.ap[...] 2023-10-27
[2] 서적 The Gremlin Graph Traversal Machine and Language
[3] 웹사이트 The Benefits of the Gremlin Graph Traversal Machine http://www.datastax.[...] 2015-09-14
[4] 웹사이트 The Gremlin Graph Traversal Language http://www.slideshar[...] 2015-08-19
[5] 웹사이트 Apache TinkerPop: Downloads https://tinkerpop.ap[...] 2023-05-19
[6] 웹사이트 Gremlin:グラフを扱う言語 https://www.infoq.co[...] InfoQ 2010-01-19
[7] 웹인용 Gremlin 3.4.10 https://tinkerpop.ap[...] 2021-01-18
[8] 서적 The Gremlin Graph Traversal Machine and Language
[9] 웹인용 The Gremlin Graph Traversal Language http://www.slideshar[...] 2015-08-22



본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.

문의하기 : help@durumis.com