Gremlin (dotazovací jazyk) - Gremlin (query language)
![]() | |
Navrhl | Marko A. Rodriguez |
---|---|
Vývojář | Apache TinkerPop z Softwarová nadace Apache |
Poprvé se objevil | 2009 |
Stabilní uvolnění | Gremlin 3.3.3[1] |
OS | Cross-platform (více platforem) |
Licence | Licence Apache 2.0 |
webová stránka | Oficiální stránka |
Dialekty | |
Gremlin-Java8, Gremlin-Groovy, Gremlin-Python, Gremlin-Scala, Gremlin-Clojure, Gremlin-PHP, Gremlin-JavaScript, Gremlin-TypeSet | |
Ovlivněno | |
Regulární výraz, XPath, Zvlnění, SPARQL, SQL, Jáva /JVM |
Skřítek je přechod grafu jazyk a virtuální stroj vyvinutý společností Apache TinkerPop z Softwarová nadace Apache. Gremlin pracuje pro oba OLTP databáze založené na grafech a také OLAP procesory založené na grafech. Gremlin automaty a funkční jazyk Gremlin přirozeně podporuje rozkazovací způsob a deklarativní dotazování, agnosticismus v hostitelském jazyce, definované uživatelem jazyky specifické pro doménu, rozšiřitelný kompilátor / optimalizátor, modely provedení jednoho a více strojů, hybridní vyhodnocení hloubky a šířky, stejně jako Turingova úplnost.[2]
Jako vysvětlující analogii platí Apache TinkerPop a Gremlin databáze grafů co JDBC a SQL jsou relační databáze. Gremlinův traversální stroj je podobně jako grafický výpočet Virtuální stroj Java je univerzální výpočetní technika.[3]
Dějiny
- 30. 10. 2009 se zrodil projekt s okamžitým názvem „TinkerPop“
- 2009-12-25 v0.1 je první vydání
- Vydáno 21. 05. 2011 v1.0
- Vydáno 2012-05-24 v2.0
- 2015-01-16 TinkerPop se stává projektem Apache Incubator
- Vydáno 09.07.2015 v3.0.0-inkubace
- 2016-05-23 Apache TinkerPop se stává projektem nejvyšší úrovně
- 2016-07-18 v3.1.3 a v3.2.1 jsou první vydání jako Apache TinkerPop
- Vydáno 2017-12-17 v3.3.1
- Vydáno 08.05.2018 v3.3.3
- Vydáno 2019-08-05 v3.4.3
- Vydáno 2020-02-20 v3.4.6
Integrace dodavatele
Gremlin je Licencováno Apache2 jazyk pro procházení grafů, který mohou používat prodejci grafových systémů. Typicky existují dva typy dodavatelů grafových systémů: OLTP databáze grafů a procesory grafů OLAP. Níže uvedená tabulka uvádí ty dodavatele grafů, kteří Gremlina podporují.
Prodejce | Grafový systém |
---|---|
Neo4j | grafová databáze |
OrientDB | grafová databáze |
DataStax Enterprise (5.0+) | grafová databáze |
Hadoop (Giraph ) | grafický procesor |
Hadoop (Jiskra ) | grafický procesor |
InfiniteGraph | grafová databáze |
JanusGraph | grafová databáze |
Kosmos DB | grafová databáze |
Amazonský Neptun | grafová databáze |
Traversální příklady
Následující příklady Gremlinových dotazů a odpovědí v prostředí Gremlin-Groovy jsou relativní k grafickému znázornění MovieLens datová sada.[4] Datová sada zahrnuje uživatele, kteří hodnotí filmy. Každý z uživatelů má jedno povolání a ke každému filmu je přidružena jedna nebo více kategorií. Schéma grafu MovieLens je podrobně uvedeno níže.
uživatel--hodnocené[hvězdy:0-5]-->filmuživatel--obsazení-->obsazenífilm--kategorie-->kategorie
Jednoduché procházení
Pro každý vrchol v grafu vydejte jeho štítek, poté seskupte a spočítejte každý odlišný štítek.
skřítek> G.PROTI().označení().groupCount()==>[obsazení:21, film:3883, kategorie:18, uživatel:6040]
Jaký rok byl natočen nejstarší film?
skřítek> G.PROTI().hasLabel('film').hodnoty('rok').min()==>1919
Jaké je průměrné hodnocení Die Hard?
skřítek> G.PROTI().má('film','název','Těžce zemřít').inE('hodnocené').hodnoty('hvězdy').znamenat()==>4.121848739495798
Projekční traverzy
Pro každou kategorii vydejte mapu s jejím názvem a počtem filmů, které představuje.
skřítek> G.PROTI().hasLabel('kategorie').tak jako('A','b'). vybrat('A','b'). podle('název'). podle(inE('kategorie').počet())==>[A:Animace, b:105]==>[A:Děti's, b:251]==>[A:Komedie, b:1200]==>[A:Dobrodružství, b:283]==>[A:Fantazie, b:68]==>[A:Romantika, b:471]==>[A:Drama, b:1603]==>[A:Akce, b:503]==>[A:Zločin, b:211]==>[A:Thriller, b:492]==>[A:Hrůza, b:343]==>[A:Sci-Fi, b:276]==>[A:Dokumentární, b:127]==>[A:Válka, b:143]==>[A:Hudební, b:114]==>[A:Tajemství, b:106]==>[A:Film-Noir, b:44]==>[A:Západní, b:68]
U každého filmu s alespoň 11 hodnoceními vydejte mapu s jeho názvem a průměrným hodnocením. Seřaďte mapy v sestupném pořadí podle průměrného hodnocení. Vysílejte prvních 10 map (tj. 10 nejlepších).
skřítek> G.PROTI().hasLabel('film').tak jako('A','b'). kde(inE('hodnocené').počet().je(gt(10))). vybrat('A','b'). podle('název'). podle(inE('hodnocené').hodnoty('hvězdy').znamenat()). objednat().podle(vybrat('b'),dekr). omezit(10)==>[A:Sanjuro, b:4.608695652173913]==>[A:Sedm Samuraj (The Velkolepý Sedm), b:4.560509554140127]==>[A:Shawshank Vykoupení, The, b:4.554557700942973]==>[A:Kmotr, The, b:4.524966261808367]==>[A:Zavřít Oholit se, A, b:4.52054794520548]==>[A:Obvyklý Podezřelí, The, b:4.517106001121705]==>[A:Schindler's Seznam, b:4.510416666666667]==>[A:Špatně Kalhoty, The, b:4.507936507936508]==>[A:Západ slunce Blvd. (A.k.A. Západ slunce Bulvár), b:4.491489361702127]==>[A:Dobyvatelé z the Ztracený Archa, b:4.47772]
Deklarativní přechody odpovídající vzorům
Gremlin podporuje podobné deklarativní vzory grafů SPARQL. Například následující dotaz používá Gremlinův zápas()-krok.
Jaké akční filmy z 80. let mají rádi programátoři třiceti? Skupinové počítání filmů podle jejich názvu a třídění mapy počtu skupin v sestupném pořadí podle hodnoty. Připněte mapu na 10 nejlepších a vydejte položky mapy.
skřítek> G.PROTI(). zápas( __.tak jako('A').hasLabel('film'), __.tak jako('A').ven('kategorie').má('název','Akce'), __.tak jako('A').má('rok',mezi(1980,1990)), __.tak jako('A').inE('hodnocené').tak jako('b'), __.tak jako('b').má('hvězdy',5), __.tak jako('b').outV().tak jako('C'), __.tak jako('C').ven('obsazení').má('název','programátor'), __.tak jako('C').má('stáří',mezi(30,40))). vybrat('A').groupCount().podle('název'). objednat(místní).podle(hodnotaDekr). omezit(místní,10)==>Dobyvatelé z the Ztracený Archa=26==>Hvězda Války Epizoda PROTI - The Říše Stávky Zadní=26==>Terminátor, The=23==>Hvězda Války Epizoda VI - Vrátit se z the Jedi=22==>Princezna Nevěsta, The=19==>Mimozemšťané=18==>Loď, The (Das Boot)=11==>Indiana Jones a the Poslední Křížová výprava=11==>Hvězda Trek The Hněv z Chán=10==>Propast, The=9
OLAP traverz
Které filmy jsou v ústředí nejvíce implicitní 5hvězdičkový graf?
skřítek> G = graf.traverz(počítač(SparkGraphComputer))==>zdroj grafu[hadofotograf[gryoinputformat->gryooutputformat], zapalovací počítač]skřítek> G.PROTI().opakovat(ven('hodnocené').má('hvězdy', 5).inV(). groupCount('m').podle('název'). inE('hodnocené').má('hvězdy', 5).outV()). krát(4).víčko('m')==>Hvězda Války Epizoda IV - A Nový Naděje 35405394353105332==>americký Krása 31943228282020585==>Dobyvatelé z the Ztracený Archa 31224779793238499==>Hvězda Války Epizoda PROTI - The Říše Stávky Zadní 30434677119726223==>Kmotr, The 30258518523013057==>Shawshank Vykoupení, The 28297717387901031==>Schindler's Seznam 27539336654199309==>Umlčet z the Jehňata, The 26736276376806173==>Fargo 26531050311325270==>Matice, The 26395118239203191
Gremlinův stroj pro procházení grafů
Gremlin je virtuální stroj složený z instrukční sada stejně jako spouštěcí modul. Mezi Gremlinem a Jáva.
Java ekosystém | Gremlinův ekosystém |
---|---|
Programovací jazyk Apache Groovy | Gremlin-Groovy |
Programovací jazyk Scala | Gremlin-Scala |
Clojure programovací jazyk | Gremlin-Clojure |
... | ... |
Programovací jazyk Java | Gremlin-Java8 |
Sada instrukcí Java | Gremlinova knihovna kroků |
Virtuální stroj Java | Gremlin traversal machine |
Gremlin kroky (instrukční sada)
Následující traverz je Gremlinův traverz v dialektu Gremlin-Java8.
G.PROTI().tak jako("A").ven("ví").tak jako(„b“). vybrat("A",„b“). podle("název"). podle("stáří")
Gremlinský jazyk (tj plynulý styl vyjádření grafu traversal) mohou být zastoupeny v jakémkoli hostitelském jazyce, který podporuje složení funkce a vnoření funkcí. Kvůli tomuto jednoduchému požadavku existují různé gremlinské dialekty včetně Gremlin-Groovy, Gremlin-Scala, Gremlin-Clojure atd. Výše uvedený přechod Gremlin-Java8 je nakonec sestaven do postupné sekvence zvané a traverz. Řetězcová reprezentace výše uvedeného průchodu uvedená níže.
[GraphStep([],vrchol)@[A], VertexStep(VEN,[ví],vrchol)@[b], Vyberte krok([A, b],[hodnota(název), hodnota(stáří)])]
The kroky jsou primitivum stroje pro procházení grafů Gremlin. Jsou to parametrizované pokyny, které stroj nakonec provede. Gremlin instrukční sada je přibližně 30 kroků. Tyto kroky jsou dostatečné k zajištění výpočtu pro obecné účely a toho, co se obvykle vyžaduje k vyjádření běžných motivů jakéhokoli dotazu pro procházení grafem.
Vzhledem k tomu, že Gremlin je jazyk, sada instrukcí a virtuální stroj, je možné navrhnout další traversální jazyk, který se kompiluje s Gremlinovým traversal strojem (analogicky k tomu, jak Scala kompiluje s JVM ). Například populární SPARQL jazyk shody grafových vzorů lze zkompilovat a provést na stroji Gremlin. Následující dotaz SPARQL
VYBRAT ?A ? b ?CKDE { ?A A Osoba . ?A např:ví ? b . ?A např:vytvořeno ?C . ? b např:vytvořeno ?C . ? b např:stáří ? d . FILTR(? d < 30)}
by sestavil
[GraphStep([],vrchol), MatchStep(A,[[MatchStartKrok(A), LabelStep, IsStep(ekv(Osoba)), MatchEndStep], [MatchStartKrok(A), VertexStep(VEN,[ví],vrchol), MatchEndStep(b)], [MatchStartKrok(A), VertexStep(VEN,[vytvořeno],vrchol), MatchEndStep(C)], [MatchStartKrok(b), VertexStep(VEN,[vytvořeno],vrchol), MatchEndStep(C)], [MatchStartKrok(b), Vlastnosti([stáří],hodnota), MatchEndStep(d)], [MatchStartKrok(d), IsStep(gt(30)), MatchEndStep]]), Vyberte krok([A, b, C])].
V Gremlin-Java8 by výše uvedený dotaz SPARQL byl znázorněn jako níže a byl by zkompilován do stejné sekvence kroků Gremlin (tj. Traversal).
G.PROTI().zápas( tak jako("A").označení().je("osoba"), tak jako("A").ven("ví").tak jako(„b“), tak jako("A").ven(„vytvořeno“).tak jako("C"), tak jako(„b“).ven(„vytvořeno“).tak jako("C"), tak jako(„b“).hodnoty("stáří").tak jako("d"), tak jako("d").je(gt(30))). vybrat("A",„b“,"C")
Gremlin Machine (virtuální stroj)
Gremlinův stroj pro procházení grafů lze provádět na jednom počítači nebo ve výpočetním klastru pro více počítačů. Agnosticismus popravy umožňuje Gremlinovi přejet obojí databáze grafů (OLTP) a procesory grafů (OLAP).
Viz také
- Cypher Query Language, další dotazovací jazyk na datech grafů
- SPARQL, další dotazovací jazyk na datech grafů
Reference
- ^ „Gremlin 3.3.3“. Citováno 8. května 2018.
- ^ Rodriguez, Marko A. (2015). Msgstr "Gremlinův traversální stroj a jazyk (pozvaná řeč)". Gremlin Graph Traversal Machine a jazyk. s. 1–10. arXiv:1508.03843. doi:10.1145/2815072.2815073. ISBN 9781450339025.
- ^ „Výhody stroje Gremlin Graph Traversal Machine“. 2015-09-14. Citováno 17. září 2015.
- ^ „Gremlinský jazyk pro procházení grafů“. 2015-08-19. Citováno 22. srpna 2015.
externí odkazy
- Domovská stránka Apache TinkerPop
- sql2gremlin.com (TinkerPop2)
- Rodriguez, M.A., "Gremlin Graph Traversal Machine a jazyk „Sborník konference ACM Database Programming Languages Conference, říjen 2015.