그레믈린 (쿼리 언어)

Gremlin (query language)
그레믈린
Gremlin (programming language).png
설계자마코 A.로드리게스
개발자Apache Software Foundation의 Apache TinkerPop
첫 등장2009; 13년(2009)
안정적 해제
그레믈린 3.4.10[1]
OS크로스 플랫폼(멀티 플랫폼)
면허증.아파치 라이선스 2.0
웹사이트공식 사이트
방언
Gremlin-Java8, Gremlin-Groovy, Gremlin-Python, Gremlin-Scala, Gremlin-Clojure, Gremlin-Groovy.PHP, Gremlin-JavaScript, Gremlin--유형 집합
영향을 받은
정규식, XPath, 리플, SPARQL, SQL, Java/JVM

Gremlin은 Apache Software Foundation의 Apache TinkerPop이 개발한 그래프 통과 언어 및 가상 머신이다.Gremlin은 OLTP 기반 그래프 데이터베이스는 물론 OLAP 기반 그래프 프로세서에서 모두 작동한다.Gremlin의 오토마타기능 언어 기반은 Gremlin이 자연적으로 지원할 수 있게 한다: 명령적선언적 쿼리, 호스트 언어 애그노스티시즘, 사용자 정의 도메인별 언어, 확장 가능한 컴파일러/최적화기, 단일 및 다중 시스템 실행 모델, 튜링 완전성을 통한 하이브리드 깊이와 폭 우선 평가.[2]null

설명적으로 Apache TinkerPop과 Gremlin은 관계형 데이터베이스에 대한 JDBC와 SQL의 내용을 그래프로 나타낸 것이다.마찬가지로 Gremlin Traversal Machine은 Java 가상 머신이 범용 컴퓨팅에 대해 그래프로 컴퓨팅을 표시하는 것이다.[3]null

역사

  • 2009-10-30 프로젝트 탄생 즉시 "TinkerPop"으로 명명
  • 2009-12-25 v0.1은 첫 번째 릴리스임
  • 2011-05-21 v1.0 릴리스
  • 2012-05-24 v2.0 릴리스
  • 2015-01-16 팅커팝이 아파치 인큐베이터 프로젝트가 됨
  • 2015-07-09 v3.0.0-추적 릴리즈
  • 2016-05-23 Apache TinkerPop이 최상위 프로젝트임
  • 2016-07-18 v3.1.3 및 v3.2.1은 Apache TinkerPop으로 처음 출시되는 버전이다.
  • 2017-12-17 v3.3.1 출시
  • 2018-05-08 v3.3.3 릴리스
  • 2019-08-05 v3.4.3이 출시
  • 2020-02-20 v3.4.6 릴리스

공급업체 통합

그레믈린은 아파치2 라이선스가 부여된 그래프 트래버설 언어로, 그래프 시스템 벤더가 사용할 수 있다.일반적으로 두 가지 유형의 그래프 시스템 벤더가 있다: OLTP 그래프 데이터베이스와 OLAP 그래프 프로세서.아래 표에는 Gremlin을 지원하는 그래프 벤더가 요약되어 있다.null

노점상 그래프 시스템
네오4지 그래프 데이터베이스
오리엔트DB 그래프 데이터베이스
DataStax Enterprise(5.0+) 그래프 데이터베이스
하둡(Giraph) 그래프 프로세서
하둡(스파크) 그래프 프로세서
인피니트그래프 그래프 데이터베이스
재너스그래프 그래프 데이터베이스
코스모스 DB 그래프 데이터베이스
아마존 해왕성 그래프 데이터베이스

통과 예제

Gremlin-Groovy 환경에서 Gremlin 쿼리 및 응답의 다음 예는 MovieLens 데이터 집합의 그래프 표현과 관련이 있다.[4]이 데이터 집합에는 동영상을 평가하는 사용자가 포함된다.사용자들은 각각 하나의 직업을 가지고 있고, 각각의 영화들은 하나 이상의 그것과 관련된 카테고리를 가지고 있다.MovieLens 그래프 스키마는 아래에 자세히 설명되어 있다.null

사용자--정격의[별들:0-5]-->영화 사용자--직업-->직업 영화--범주-->범주 

단순횡단

그래프의 각 꼭지점에 대해 레이블을 내보낸 다음 각 개별 레이블을 그룹화하고 카운트하십시오.

그레믈린> g.V().라벨을 붙이다().그룹카운트() ==>[직업:21, 영화:3883, 범주:18, 사용자:6040] 

가장 오래된 영화는 몇 년도에 만들어졌는가?

그레믈린> g.V().hasLabel('movie').가치('년').() ==>1919 

다이하드의 평균 등급은?

그레믈린> g.V().가지다('movie','이름','다이하드').INE('등급').가치('stars').심술궂다() ==>4.121848739495798 

투영 통과

각 카테고리에 대해, 그것의 이름과 그것이 나타내는 영화 수에 대한 지도를 내보낸다.

그레믈린> g.V().hasLabel('category').로서('a','b').            선발하다('a','b').              에 의해('이름').              에 의해(INE('category').수를 세다()) ==>[a:애니메이션, b:105] ==>[a:아이들.'s, b:251] ==>[a:코미디, b:1200] ==>[a:모험, b:283] ==>[a:공상, b:68] ==>[a:로맨스, b:471] ==>[a:드라마, b:1603] ==>[a:액션, b:503] ==>[a:범죄, b:211] ==>[a:스릴러, b:492] ==>[a:, 호러, b:343] ==>[a:공상과학-, b:276] ==>[a:다큐멘터리, b:127] ==>[a:, 전쟁, b:143] ==>[a:뮤지컬, b:114] ==>[a:미스터리, b:106] ==>[a:필름-누아르 주, b:44] ==>[a:서양, b:68] 

각 영화가 최소 11개 이상의 시청률을 기록할 경우, 영화 이름과 평균 시청률을 나타내는 지도를 내보낸다.평균 등급에 따라 지도를 감소 순서대로 정렬한다.처음 10개의 맵(즉, 상위 10개)을 내보낸다.

그레믈린> g.V().hasLabel('movie').로서('a','b').            어디에(INE('등급').수를 세다().이다(GT(10))).            선발하다('a','b').              에 의해('이름').              에 의해(INE('등급').가치('stars').심술궂다()).            주문().에 의해(선발하다('b'),해독하다).            한도를 정하다(10) ==>[a:산주로, b:4.608695652173913] ==>[a:일곱 사무라이 ( 웅장한 일곱), b:4.560509554140127] ==>[a:쇼생크 속죄, , b:4.554557700942973] ==>[a:대부, , b:4.524966261808367] ==>[a:가까운. 면도하다, A, b:4.52054794520548] ==>[a:평상시 의심., , b:4.517106001121705] ==>[a:쉰들러's 리스트, b:4.510416666666667] ==>[a:틀리다 바지, , b:4.507936507936508] ==>[a:일몰 블브드. (a.k.a. 일몰 대로), b:4.491489361702127] ==>[a:레이더스   로스트 방주, b:4.47772] 

선언 패턴 일치 트래버설

Gremlin은 SPARQL과 유사한 선언적 그래프 패턴 일치를 지원한다.예를 들어, 아래의 쿼리는 그레믈린의 매치()스텝을 사용한다.null

30대 프로그래머들이 좋아하는 80대 액션 영화는?그룹명별로 영화수를 세고, 그룹수도를 값별로 감소순으로 정렬한다.지도를 상단 10에 클리핑하고 지도 항목을 내보낸다.

그레믈린> g.V().            짝을 맞추다(              __.로서('a').hasLabel('movie'),              __.로서('a').밖으로('category').가지다('이름','액션'),              __.로서('a').가지다('년',사이에(1980,1990)),              __.로서('a').INE('등급').로서('b'),              __.로서('b').가지다('stars',5),              __.로서('b').아웃브이브().로서('c'),              __.로서('c').밖으로('occupation').가지다('이름','programmer'),              __.로서('c').가지다('나이',사이에(30,40))).            선발하다('a').그룹카운트().에 의해('이름').            주문(국부적).에 의해(valueDecr).            한도를 정하다(국부적,10) ==>레이더스   로스트 방주=26 ==> 전쟁 에피소드 V -  엠파이어 스트라이크 뒤로=26 ==>터미네이터, =23 ==> 전쟁 에피소드 VI - 반품   제다이=22 ==>프린세스 신부, =19 ==>외계인=18 ==>보트,  (다스 부츠)=11 ==>인디애나 주 존스 그리고  지난 십자군=11 ==> 트렉  분노  =10 ==>심연, =9 

OLAP 통과

암묵적 5성 그래프에서 가장 중심이 되는 영화는?

그레믈린> g = 도표를 찍다.횡단의(컴퓨터(스파크그래프컴퓨터)) ==>그래프트래버소스[하둡그래프[gryoinputformat->gryooutputformat], 스파크그래프 컴퓨터] 그레믈린> g.V().되풀이하여 말하다(outE('등급').가지다('stars', 5).인브이().                  그룹카운트('m').에 의해('이름').                  INE('등급').가지다('stars', 5).아웃브이브()).                시대(4).모자를 씌우다('m') ==> 전쟁 에피소드 IV - A 새로 만들기 희망   35405394353105332 ==>미국인의 미녀   31943228282020585 ==>레이더스   로스트 방주 31224779793238499 ==> 전쟁 에피소드 V -  엠파이어 스트라이크 뒤로  30434677119726223 ==>대부,  30258518523013057 ==>쇼생크 속죄,  28297717387901031 ==>쉰들러's 리스트 27539336654199309 ==>침묵   ,  26736276376806173 ==>파고  26531050311325270 ==>매트릭스,   26395118239203191 

그레믈린 그래프 통과기

그레믈린은 명령어 집합과 실행 엔진으로 구성된 가상 머신이다.그레믈린과 자바 사이에 비유가 그려진다.null

자바 에코시스템 그레믈린 생태계
아파치 그루비 프로그래밍 언어 그레믈린그로비
스칼라 프로그래밍 언어 그레믈린스칼라
클루주어 프로그래밍 언어 그레믈린클로주레
... ...
자바 프로그래밍 언어 그레믈린자바8
자바 명령 집합 그레믈린 스텝 라이브러리
Java 가상 시스템 그레믈린 트래버설 머신

Gremlin 단계(인스트레이션 세트

다음 횡단은 그레믈린-자바8 방언의 그레믈린 횡설수설이다.null

g.V().로서("a").밖으로("knows").로서("b").   선발하다("a","b").     에 의해("이름").     에 의해("나이") 

그레믈린 언어(즉, 그래프 통과를 표현하는 유창한 스타일)는 함수 구성함수 내포를 지원하는 모든 호스트 언어로 나타낼 수 있다.이 간단한 요건 때문에 그레믈린-그루비, 그레믈린-스칼라, 그레믈린-클로주르 등 다양한 그레믈린 사투리가 존재한다.위의 Gremlin-Java8 트래버설은 궁극적으로 트래버설이라는 단계적 시퀀스로 정리된다.위에 있는 통과에 대한 문자열 표현은 아래에 제공된다.null

[그래프스텝([],꼭지점)@[a], 꼭지점 스텝(아웃,[알고 있다],꼭지점)@[b], SelectStep([a, b],[가치를 매기다(이름을 붙이다), 가치를 매기다(나이를 먹다)])] 

단계는 Gremlin 그래프 통과 기계의 기본 요소들이다.그것들은 기계가 궁극적으로 실행하는 매개변수화된 지시사항이다.Gremlin 명령 집합은 대략 30 단계다.이러한 단계는 범용 컴퓨팅과 그래프 통과 쿼리의 공통 모티브를 표현하기 위해 일반적으로 필요한 것을 제공하기에 충분하다.null

Gremlin이 언어, 명령 집합, 가상 머신임을 감안할 때, Gremlin 트래버설 머신(Scala가 JVM에 컴파일하는 방식과 유사함)에 컴파일하는 또 다른 트래버설 언어를 설계하는 것이 가능하다.예를 들어, 인기 있는 SPARQL 그래프 패턴 일치 언어를 컴파일하여 Gremlin 기계에서 실행할 수 있다.다음 SPARQL 쿼리

선택 ?a ?b ?c 어디에 {   ?a a 사람 .   ?a 이외의:알고 있다 ?b .   ?a 이외의:창조했다 ?c .   ?b 이외의:창조했다 ?c .   ?b 이외의:나이를 먹다 ? d .     필터(?d < 30) } 

에 편찬할 것이다.

[그래프스텝([],꼭지점), 매치스텝(AND,[[매치스타트스텝(a), 레이블스텝, 이스스텝(eq(사람)), 매치엔드스텝], [매치스타트스텝(a), 꼭지점 스텝(아웃,[알고 있다],꼭지점), 매치엔드스텝(b)], [매치스타트스텝(a), 꼭지점 스텝(아웃,[창조했다],꼭지점), 매치엔드스텝(c)], [매치스타트스텝(b), 꼭지점 스텝(아웃,[창조했다],꼭지점), 매치엔드스텝(c)], [매치스타트스텝(b), 속성단계([나이를 먹다],가치를 매기다), 매치엔드스텝(d)], [매치스타트스텝(d), 이스스텝(GT(30)), 매치엔드스텝]]), SelectStep([a, b, c])]. 

Gremlin-Java8에서 위의 SPARQL 쿼리는 아래와 같이 표현되고 동일한 Gremlin 단계 시퀀스(즉, 통과)로 컴파일된다.null

g.V().짝을 맞추다(   로서("a").라벨을 붙이다().이다("사람"),   로서("a").밖으로("knows").로서("b"),   로서("a").밖으로("created").로서("c"),   로서("b").밖으로("created").로서("c"),   로서("b").가치("나이").로서("d"),   로서("d").이다(GT(30))).     선발하다("a","b","c") 

Gremlin 시스템(가상 시스템)

Gremlin graph traversal machine은 단일 머신에서 또는 다중 머신 컴퓨팅 클러스터를 통해 실행할 수 있다.Gremlin은 실행 거부주의를 통해 OLTP(Graph Database)와 OLAP(Graph Processor)를 모두 실행할 수 있다.null

참고 항목

참조

  1. ^ "Gremlin 3.4.10". Retrieved January 18, 2021.
  2. ^ Rodriguez, Marko A. (2015). "The Gremlin graph traversal machine and language (invited talk)". The Gremlin Graph Traversal Machine and Language. pp. 1–10. arXiv:1508.03843. doi:10.1145/2815072.2815073. ISBN 9781450339025. S2CID 10533031.
  3. ^ "The Benefits of the Gremlin Graph Traversal Machine". 2015-09-14. Retrieved September 17, 2015.
  4. ^ "The Gremlin Graph Traversal Language". 2015-08-19. Retrieved August 22, 2015.

외부 링크

  1. Apache TinkerPop 홈페이지
  2. sql2gremlin.com (TinkerPop2)
  3. 로드리게스, 2015년 10월 ACM 데이터베이스 프로그래밍 언어 컨퍼런스의 "그렘린 그래프 트래버설 기계와 언어," Procedures of ACM Database Programming Language Conference, 2015년 10월.