SlideShare a Scribd company logo
What’s New in Apache TinkerPop?
Open Source Graph Computing Framework
http://tinkerpop.incubator.apache.org/
Stephen Mallette - @spmallette
© 2015. All Rights Reserved.
© 2015. All Rights Reserved.
By Andrea Mann from London, United Kingdom (Flickr Uploaded by Hohum) [CC BY 2.0
(http://creativecommons.org/licenses/by/2.0)], via Wikimedia Commons
© 2015. All Rights Reserved.
© 2015. All Rights Reserved.
Georgius Agricola, De re metallica 1556
© 2015. All Rights Reserved.
“Woman at spinning wheel with man carding” Smithfield Decretals (British Library, Royal 10 E. IV, fol. 147v), c. 1340“Carding, Spinning and Weaving” by Giovanni
Boccaccio from De claris mulieribus 15th Century
© 2015. All Rights Reserved.
London, British Library, Royal 18 E.iii (15th century) [Public domain], via Wikimedia Commons
© 2015. All Rights Reserved.
[Public domain], via Wikimedia Commons
© 2015. All Rights Reserved.
By Unknown. Photo credit: Yale University Art Gallery. In the Public Domain.
[Public domain], via Wikimedia Commons
[Public domain], via Wikimedia Commons
© 2015. All Rights Reserved.
By Dogcow (Own work) [CC BY-SA 3.0 (http://creativecommons.org/licenses/by-sa/3.0) or GFDL
(http://www.gnu.org/copyleft/fdl.html)], via Wikimedia Commons
© 2015. All Rights Reserved.
By Adam Schuster (Flickr: Proto IBM) [CC BY 2.0
(http://creativecommons.org/licenses/by/2.0)], via Wikimedia Commons
By Arnold Reinhold [CC BY-SA 2.5 (http://creativecommons.org/licenses/by-sa/2.5)], via
Wikimedia Commons
© 2015. All Rights Reserved.
© 2015. All Rights Reserved.
label: person
name: Stephen
label: book
title: Connections
label: person
name: James
label: bought label: wrote
Graph Data Structure
© 2015. All Rights Reserved.
TinkerPop 2.0
TinkerPop 3.0
The TinkerPop Stack
© 2015. All Rights Reserved.
The TinkerPop Stack
© 2015. All Rights Reserved.
Gremlin in TinkerPop3
is NOT “just ”
It is advised that not use expressionsƛ
supports BOTH imperative and declarative querying
© 2015. All Rights Reserved.
$ bin/gremlin.sh
,,,/
(o o)
-----oOOo-(3)-oOOo-----
plugin activated: tinkerpop.server
plugin activated: tinkerpop.utilities
plugin activated: tinkerpop.tinkergraph
gremlin>
© 2015. All Rights Reserved.
$ bin/gremlin.sh
,,,/
(o o)
-----oOOo-(3)-oOOo-----
plugin activated: tinkerpop.server
plugin activated: tinkerpop.utilities
plugin activated: tinkerpop.tinkergraph
gremlin> graph = GraphFactory.open("graph.properties")
==>tinkergraph[vertices:0 edges:0]
gremlin>
© 2015. All Rights Reserved.
$ bin/gremlin.sh
,,,/
(o o)
-----oOOo-(3)-oOOo-----
plugin activated: tinkerpop.server
plugin activated: tinkerpop.utilities
plugin activated: tinkerpop.tinkergraph
gremlin> graph = GraphFactory.open("graph.properties")
==>tinkergraph[vertices:0 edges:0]
gremlin> graph.io(gryo()).readGraph('data.kryo')
==>null
gremlin> graph
==>tinkergraph[vertices:1933 edges:4125]
gremlin>
discussion
wrote
hasResponse
person response
participatesIn hasRoot
© 2015. All Rights Reserved.
$ bin/gremlin.sh
,,,/
(o o)
-----oOOo-(3)-oOOo-----
plugin activated: tinkerpop.server
plugin activated: tinkerpop.utilities
plugin activated: tinkerpop.tinkergraph
gremlin> graph = GraphFactory.open("graph.properties")
==>tinkergraph[vertices:0 edges:0]
gremlin> graph.io(gryo()).readGraph('data.kryo')
==>null
gremlin> graph
==>tinkergraph[vertices:1933 edges:4125]
gremlin> g = graph.traversal()
==>graphtraversalsource[tinkergraph[vertices:1933 edges:4125], standard]
gremlin>
© 2015. All Rights Reserved.
gremlin> g.V(4608)
==>v[4608]
4608
person
g.V(4608)
“Find the vertex with id 4608”
© 2015. All Rights Reserved.
gremlin> g.V(4608).values('userName')
==>Renlit
4608
person
g.V(4608)
Renlit
userName
.values('userName')
“Get the value of the ‘userName’ property on vertex 4608”
© 2015. All Rights Reserved.
gremlin> g.V(4608).out('wrote')
==>v[354560]
==>v[640768]
...
==>v[466432]
4608 wrote
person response
g.V(4608) .out('wrote')
“Find the responses posted by ‘Renlit’”
© 2015. All Rights Reserved.
gremlin> g.V(4608).out('wrote').count()
==>67
4608 wrote
person response
.out('wrote')
“Find the number of responses posted by ‘Renlit’”
g.V(4608) .count()
67
© 2015. All Rights Reserved.
gremlin> t = g.V(4608).out('wrote').count();null
==>null
gremlin> t.strategies.toList()
==>ConjunctionStrategy
==>IncidentToAdjacentStrategy
==>AdjacentToIncidentStrategy
==>IdentityRemovalStrategy
==>DedupBijectionStrategy
==>MatchPredicateStrategy
==>RangeByIsCountStrategy
==>TinkerGraphStepStrategy
==>ProfileStrategy
==>EngineDependentStrategy
==>ComputerVerificationStrategy
==>StandardVerificationStrategy
© 2015. All Rights Reserved.
t.strategies.toList()
Strategy
Application
Original Query g.V(4608).out('wrote').count()
© 2015. All Rights Reserved.
AdjacentToIncidentStrategy
Post-Strategies g.V(4608).outE('wrote').count()
ConjunctionStrategy
IncidentToAdjacentStrategy
IdentityRemovalStrategy
DedupBijectionStrategy
MatchPredicateStrategy
RangeByIsCountStrategy
TinkerGraphStepStrategy
ProfileStrategy
EngineDependentStrategy
ComputerVerificationStrategy
StandardVerificationStrategy
gremlin> g.V(4608).as('a').out('wrote').out('hasResponse').in('wrote')
.where(neq('a')).groupCount().next()
==>v[5376]=4
==>v[2304]=2
==>v[5888]=7
...
==>v[10496]=1
4608 wrote
person response
hasResponse
hasResponse
hasResponse
...
response
wrote
wrote
wrote
...
person person
4608
g.V(4608)
.as('a')
.out('wrote') .out('hasResponse') .in('wrote') .where(neq('a')) .groupCount()
“Get a distribution over the authors who replied to ‘Renlit’”
© 2015. All Rights Reserved.
gremlin> g.V(4608).out('wrote').values('responseLevel').groupCount()
==>[1:11, 2:19, 3:22, 4:9, 5:3, 6:3]
gremlin>
4608 wrote
person response
g.V(4608) .out('wrote')
...
responseLevel
.values('responseLevel').groupCount()
“Get a distribution over the ‘responseLevel’ value for posts by ‘Renlit’”
© 2015. All Rights Reserved.
gremlin> g.V().has('type','response').values('responseLevel').groupCount()
==>[1:358, 2:796, 3:445, 4:150, 5:57, 6:13, 7:4, 8:1]
gremlin>
response
g.V() .has('type','response')
...
responseLevel
.values('responseLevel') .groupCount()
type response
“Get a distribution over the ‘responseLevel’ for all posts in the graph”
gremlin> g.V(4608).out('wrote').values('responseLevel').groupCount()
==>[1:11, 2:19, 3:22, 4:9, 5:3, 6:3]
gremlin> g.V().has('type','response').values('responseLevel').groupCount()
==>[1:358, 2:796, 3:445, 4:150, 5:57, 6:13, 7:4, 8:1]
gremlin>
g.V(4608).out('wrote')
.values('responseLevel')
.groupCount()
g.V().has('type','response')
.values('responseLevel')
.groupCount()
© 2015. All Rights Reserved.
gremlin> :install org.apache.tinkerpop hadoop-gremlin 3.0.0-incubating
==>Loaded: [org.apache.tinkerpop, hadoop-gremlin, 3.0.0-incubating] - restart the console
to use [tinkerpop.hadoop]
gremlin> :exit
...
$ bin/gremlin.sh
,,,/
(o o)
-----oOOo-(3)-oOOo-----
plugin activated: tinkerpop.server
plugin activated: tinkerpop.utilities
plugin activated: tinkerpop.tinkergraph
gremlin> :plugin use tinkerpop.hadoop
==>tinkerpop.hadoop activated
gremlin> hdfs.copyFromLocal('data.kryo', 'data.kryo')
==>null
gremlin> hdfs.ls()
==>rw-r--r-- smallette supergroup 5782840 data.kryo
gremlin>
© 2015. All Rights Reserved.
gremlin> graph = GraphFactory.open('conf/hadoop/data-gryo.properties')
==>hadoopgraph[gryoinputformat->gryooutputformat]
gremlin> g = graph.traversal(computer(SparkGraphComputer))
==>graphtraversalsource[hadoopgraph[gryoinputformat-
>gryooutputformat],sparkgraphcomputer]
© 2015. All Rights Reserved.
gremlin> graph = GraphFactory.open('conf/hadoop/data-gryo.properties')
==>hadoopgraph[gryoinputformat->gryooutputformat]
gremlin> g = graph.traversal(computer(SparkGraphComputer))
==>graphtraversalsource[hadoopgraph[gryoinputformat-
>gryooutputformat],sparkgraphcomputer]
gremlin> g.V(4608).out('wrote').values('responseLevel').groupCount()
==>[1:11, 2:19, 3:22, 4:9, 5:3, 6:3]
gremlin> g.V().has('type','response').values('responseLevel').groupCount()
==>[1:358, 2:796, 3:445, 4:150, 5:57, 6:13, 7:4, 8:1]
© 2015. All Rights Reserved.
Any Graph System
Neo4j
Titan
Sqlg
BlueMix
Hadoop
Giraph
Spark
OrientDB
...
gremlin> :plugin use tinkerpop.gephi
==>tinkerpop.gephi activated
gremlin> :remote connect tinkerpop.gephi
==>Connection to Gephi - http://localhost:8080/workspace0 with stepDelay:1000,
startRGBColor:[0.0, 1.0, 0.5], colorToFade:g, colorFadeRate:0.7,
startSize:20.0,sizeDecrementRate:0.33
© 2015. All Rights Reserved.
gremlin> :plugin use tinkerpop.gephi
==>tinkerpop.gephi activated
gremlin> :remote connect tinkerpop.gephi
==>Connection to Gephi - http://localhost:8080/workspace0 with stepDelay:1000,
startRGBColor:[0.0, 1.0, 0.5], colorToFade:g, colorFadeRate:0.7,
startSize:20.0,sizeDecrementRate:0.33
gremlin> :> graph
==>tinkergraph[vertices:1933 edges:4125]
© 2015. All Rights Reserved.
gremlin> :> graph
==>tinkergraph[vertices:1933 edges:4125]
© 2015. All Rights Reserved.
gremlin> g.V(10240).values('userName')
==>Naya
gremlin> g.V(5888).values('userName')
==>Loret
© 2015. All Rights Reserved.
gremlin> subGraph = g.V(10240,5888).repeat(__.outE().subgraph('subGraph').inV())
.times(10)
.cap('subGraph').next()
==>tinkergraph[vertices:1152 edges:1343]
gremlin> :> subGraph
© 2015. All Rights Reserved.
Naya
Loret
gremlin> :remote config visualTraversal subGraph svg
==>Connection to Gephi - http://localhost:8080/workspace0 with stepDelay:1000,
startRGBColor:[0.0, 1.0, 0.5], colorToFade:g, colorFadeRate:0.7,
startSize:20.0,sizeDecrementRate:0.33
gremlin> svg
==>graphtraversalsource[tinkergraph[vertices:1152 edges:1343], standard]
gremlin> svg.strategies.toList()
==>ConjunctionStrategy
==>IncidentToAdjacentStrategy
==>AdjacentToIncidentStrategy
==>IdentityRemovalStrategy
==>FilterRankingStrategy
==>MatchPredicateStrategy
==>RangeByIsCountStrategy
==>TinkerGraphStepStrategy
==>EngineDependentStrategy
==>GephiTraversalVisualizationStrategy
==>ProfileStrategy
==>ComputerVerificationStrategy
© 2015. All Rights Reserved.
gremlin> :> svg.V(10240).as('x').out('wrote').out('hasResponse').in('wrote')
.where(neq('x')).groupCount()
==>[v[5888]:4]
© 2015. All Rights Reserved.
gremlin> :> svg.V(10240).as('x').out('wrote').out('hasResponse').in('wrote')
.where(neq('x')).groupCount()
==>[v[5888]:4]
© 2015. All Rights Reserved.
gremlin> :> svg.V(10240).as('x').out('wrote').out('hasResponse').in('wrote')
.where(neq('x')).groupCount()
==>[v[5888]:4]
© 2015. All Rights Reserved.
gremlin> :> svg.V(10240).as('x').out('wrote').out('hasResponse').in('wrote')
.where(neq('x')).groupCount()
==>[v[5888]:4]
© 2015. All Rights Reserved.
gremlin> :> svg.V(10240).as('x').out('wrote').out('hasResponse').in('wrote')
.where(neq('x')).groupCount()
==>[v[5888]:4]
© 2015. All Rights Reserved.
gremlin> :> svg.V(10240).as('x').out('wrote').out('hasResponse').in('wrote')
.where(neq('x')).groupCount()
==>[v[5888]:4]
© 2015. All Rights Reserved.
Takeaways
If you have connected data, use a Graph DB
If you use a Graph DB, consider
If you use , get started with
Gremlin Console
© 2015. All Rights Reserved.
Acknowledgements
Ketrina Yim
@KetrinaYim
Artist behind Gremlin and his friends
Joe Lee
http://jml3designz.com/
Graphic designer providing support on this presentation
Apache TinkerPop
http://tinkerpop.incubator.apache.org/
The TinkerPop Community
© 2015. All Rights Reserved.

More Related Content

What's hot (20)

A tour of Python
A tour of PythonA tour of Python
A tour of Python
Aleksandar Veselinovic
 
Atomically { Delete Your Actors }
Atomically { Delete Your Actors }Atomically { Delete Your Actors }
Atomically { Delete Your Actors }
John De Goes
 
Groovy Api Tutorial
Groovy Api  TutorialGroovy Api  Tutorial
Groovy Api Tutorial
guligala
 
TCO in Python via bytecode manipulation.
TCO in Python via bytecode manipulation.TCO in Python via bytecode manipulation.
TCO in Python via bytecode manipulation.
lnikolaeva
 
Functional Pe(a)rls - the Purely Functional Datastructures edition
Functional Pe(a)rls - the Purely Functional Datastructures editionFunctional Pe(a)rls - the Purely Functional Datastructures edition
Functional Pe(a)rls - the Purely Functional Datastructures edition
osfameron
 
Functional pe(a)rls: Huey's zipper
Functional pe(a)rls: Huey's zipperFunctional pe(a)rls: Huey's zipper
Functional pe(a)rls: Huey's zipper
osfameron
 
Diving into byte code optimization in python
Diving into byte code optimization in python Diving into byte code optimization in python
Diving into byte code optimization in python
Chetan Giridhar
 
Go ahead, make my day
Go ahead, make my dayGo ahead, make my day
Go ahead, make my day
Tor Ivry
 
From Java to Kotlin beyond alt+shift+cmd+k - Kotlin Community Conf Milan
From Java to Kotlin beyond alt+shift+cmd+k - Kotlin Community Conf MilanFrom Java to Kotlin beyond alt+shift+cmd+k - Kotlin Community Conf Milan
From Java to Kotlin beyond alt+shift+cmd+k - Kotlin Community Conf Milan
Fabio Collini
 
Haskell in the Real World
Haskell in the Real WorldHaskell in the Real World
Haskell in the Real World
osfameron
 
Python 101 language features and functional programming
Python 101 language features and functional programmingPython 101 language features and functional programming
Python 101 language features and functional programming
Lukasz Dynowski
 
Collectors in the Wild
Collectors in the WildCollectors in the Wild
Collectors in the Wild
José Paumard
 
Exploring slides
Exploring slidesExploring slides
Exploring slides
akaptur
 
Byterun, a Python bytecode interpreter - Allison Kaptur at NYCPython
Byterun, a Python bytecode interpreter - Allison Kaptur at NYCPythonByterun, a Python bytecode interpreter - Allison Kaptur at NYCPython
Byterun, a Python bytecode interpreter - Allison Kaptur at NYCPython
akaptur
 
A, B, C. 1, 2, 3. Iterables you and me - Willian Martins (ebay)
A, B, C. 1, 2, 3. Iterables you and me - Willian Martins (ebay)A, B, C. 1, 2, 3. Iterables you and me - Willian Martins (ebay)
A, B, C. 1, 2, 3. Iterables you and me - Willian Martins (ebay)
Shift Conference
 
Poor Man's Functional Programming
Poor Man's Functional ProgrammingPoor Man's Functional Programming
Poor Man's Functional Programming
Dmitry Buzdin
 
Allison Kaptur: Bytes in the Machine: Inside the CPython interpreter, PyGotha...
Allison Kaptur: Bytes in the Machine: Inside the CPython interpreter, PyGotha...Allison Kaptur: Bytes in the Machine: Inside the CPython interpreter, PyGotha...
Allison Kaptur: Bytes in the Machine: Inside the CPython interpreter, PyGotha...
akaptur
 
多治見IT勉強会 Groovy Grails
多治見IT勉強会 Groovy Grails多治見IT勉強会 Groovy Grails
多治見IT勉強会 Groovy Grails
Tsuyoshi Yamamoto
 
imager package in R and examples..
imager package in R and examples..imager package in R and examples..
imager package in R and examples..
Dr. Volkan OBAN
 
GPars For Beginners
GPars For BeginnersGPars For Beginners
GPars For Beginners
Matt Passell
 
Atomically { Delete Your Actors }
Atomically { Delete Your Actors }Atomically { Delete Your Actors }
Atomically { Delete Your Actors }
John De Goes
 
Groovy Api Tutorial
Groovy Api  TutorialGroovy Api  Tutorial
Groovy Api Tutorial
guligala
 
TCO in Python via bytecode manipulation.
TCO in Python via bytecode manipulation.TCO in Python via bytecode manipulation.
TCO in Python via bytecode manipulation.
lnikolaeva
 
Functional Pe(a)rls - the Purely Functional Datastructures edition
Functional Pe(a)rls - the Purely Functional Datastructures editionFunctional Pe(a)rls - the Purely Functional Datastructures edition
Functional Pe(a)rls - the Purely Functional Datastructures edition
osfameron
 
Functional pe(a)rls: Huey's zipper
Functional pe(a)rls: Huey's zipperFunctional pe(a)rls: Huey's zipper
Functional pe(a)rls: Huey's zipper
osfameron
 
Diving into byte code optimization in python
Diving into byte code optimization in python Diving into byte code optimization in python
Diving into byte code optimization in python
Chetan Giridhar
 
Go ahead, make my day
Go ahead, make my dayGo ahead, make my day
Go ahead, make my day
Tor Ivry
 
From Java to Kotlin beyond alt+shift+cmd+k - Kotlin Community Conf Milan
From Java to Kotlin beyond alt+shift+cmd+k - Kotlin Community Conf MilanFrom Java to Kotlin beyond alt+shift+cmd+k - Kotlin Community Conf Milan
From Java to Kotlin beyond alt+shift+cmd+k - Kotlin Community Conf Milan
Fabio Collini
 
Haskell in the Real World
Haskell in the Real WorldHaskell in the Real World
Haskell in the Real World
osfameron
 
Python 101 language features and functional programming
Python 101 language features and functional programmingPython 101 language features and functional programming
Python 101 language features and functional programming
Lukasz Dynowski
 
Collectors in the Wild
Collectors in the WildCollectors in the Wild
Collectors in the Wild
José Paumard
 
Exploring slides
Exploring slidesExploring slides
Exploring slides
akaptur
 
Byterun, a Python bytecode interpreter - Allison Kaptur at NYCPython
Byterun, a Python bytecode interpreter - Allison Kaptur at NYCPythonByterun, a Python bytecode interpreter - Allison Kaptur at NYCPython
Byterun, a Python bytecode interpreter - Allison Kaptur at NYCPython
akaptur
 
A, B, C. 1, 2, 3. Iterables you and me - Willian Martins (ebay)
A, B, C. 1, 2, 3. Iterables you and me - Willian Martins (ebay)A, B, C. 1, 2, 3. Iterables you and me - Willian Martins (ebay)
A, B, C. 1, 2, 3. Iterables you and me - Willian Martins (ebay)
Shift Conference
 
Poor Man's Functional Programming
Poor Man's Functional ProgrammingPoor Man's Functional Programming
Poor Man's Functional Programming
Dmitry Buzdin
 
Allison Kaptur: Bytes in the Machine: Inside the CPython interpreter, PyGotha...
Allison Kaptur: Bytes in the Machine: Inside the CPython interpreter, PyGotha...Allison Kaptur: Bytes in the Machine: Inside the CPython interpreter, PyGotha...
Allison Kaptur: Bytes in the Machine: Inside the CPython interpreter, PyGotha...
akaptur
 
多治見IT勉強会 Groovy Grails
多治見IT勉強会 Groovy Grails多治見IT勉強会 Groovy Grails
多治見IT勉強会 Groovy Grails
Tsuyoshi Yamamoto
 
imager package in R and examples..
imager package in R and examples..imager package in R and examples..
imager package in R and examples..
Dr. Volkan OBAN
 
GPars For Beginners
GPars For BeginnersGPars For Beginners
GPars For Beginners
Matt Passell
 

Viewers also liked (20)

ACM DBPL Keynote: The Graph Traversal Machine and Language
ACM DBPL Keynote: The Graph Traversal Machine and LanguageACM DBPL Keynote: The Graph Traversal Machine and Language
ACM DBPL Keynote: The Graph Traversal Machine and Language
Marko Rodriguez
 
The Gremlin Graph Traversal Language
The Gremlin Graph Traversal LanguageThe Gremlin Graph Traversal Language
The Gremlin Graph Traversal Language
Marko Rodriguez
 
Gremlin's Graph Traversal Machinery
Gremlin's Graph Traversal MachineryGremlin's Graph Traversal Machinery
Gremlin's Graph Traversal Machinery
Marko Rodriguez
 
Quantum Processes in Graph Computing
Quantum Processes in Graph ComputingQuantum Processes in Graph Computing
Quantum Processes in Graph Computing
Marko Rodriguez
 
Titan: The Rise of Big Graph Data
Titan: The Rise of Big Graph DataTitan: The Rise of Big Graph Data
Titan: The Rise of Big Graph Data
Marko Rodriguez
 
Titan: Big Graph Data with Cassandra
Titan: Big Graph Data with CassandraTitan: Big Graph Data with Cassandra
Titan: Big Graph Data with Cassandra
Matthias Broecheler
 
The Path Forward
The Path ForwardThe Path Forward
The Path Forward
Marko Rodriguez
 
F8 tech talk_pinterest_v4
F8 tech talk_pinterest_v4F8 tech talk_pinterest_v4
F8 tech talk_pinterest_v4
malorie_pinterest
 
Seda an architecture for well-conditioned scalable internet services
Seda   an architecture for well-conditioned scalable internet servicesSeda   an architecture for well-conditioned scalable internet services
Seda an architecture for well-conditioned scalable internet services
bdemchak
 
Facebook's TAO & Unicorn data storage and search platforms
Facebook's TAO & Unicorn data storage and search platformsFacebook's TAO & Unicorn data storage and search platforms
Facebook's TAO & Unicorn data storage and search platforms
Nitish Upreti
 
Data Driven Growth
Data Driven GrowthData Driven Growth
Data Driven Growth
Discover Pinterest
 
IDEs y Frameworks mas utilizados
IDEs y Frameworks mas utilizadosIDEs y Frameworks mas utilizados
IDEs y Frameworks mas utilizados
George Navarro Gomez
 
Presto: Distributed Machine Learning and Graph Processing with Sparse Matrices
Presto: Distributed Machine Learning and Graph Processing with Sparse MatricesPresto: Distributed Machine Learning and Graph Processing with Sparse Matrices
Presto: Distributed Machine Learning and Graph Processing with Sparse Matrices
Qian Lin
 
Real World Tales of Repair (Alexander Dejanovski, The Last Pickle) | Cassandr...
Real World Tales of Repair (Alexander Dejanovski, The Last Pickle) | Cassandr...Real World Tales of Repair (Alexander Dejanovski, The Last Pickle) | Cassandr...
Real World Tales of Repair (Alexander Dejanovski, The Last Pickle) | Cassandr...
DataStax
 
Configurando o Geany para Python - 03/2012
Configurando o Geany para Python - 03/2012Configurando o Geany para Python - 03/2012
Configurando o Geany para Python - 03/2012
Marco Mendes
 
Configurando o geany_para_python
Configurando o geany_para_pythonConfigurando o geany_para_python
Configurando o geany_para_python
Marco Mendes
 
Introduction to cassandra 2014
Introduction to cassandra 2014Introduction to cassandra 2014
Introduction to cassandra 2014
Patrick McFadin
 
Epiphany: Connecting Millions of Events to Thirty Billion Data Points in Real...
Epiphany: Connecting Millions of Events to Thirty Billion Data Points in Real...Epiphany: Connecting Millions of Events to Thirty Billion Data Points in Real...
Epiphany: Connecting Millions of Events to Thirty Billion Data Points in Real...
DataWorks Summit
 
Deletes Without Tombstones or TTLs (Eric Stevens, ProtectWise) | Cassandra Su...
Deletes Without Tombstones or TTLs (Eric Stevens, ProtectWise) | Cassandra Su...Deletes Without Tombstones or TTLs (Eric Stevens, ProtectWise) | Cassandra Su...
Deletes Without Tombstones or TTLs (Eric Stevens, ProtectWise) | Cassandra Su...
DataStax
 
Cassandra Virtual Node talk
Cassandra Virtual Node talkCassandra Virtual Node talk
Cassandra Virtual Node talk
Patrick McFadin
 
ACM DBPL Keynote: The Graph Traversal Machine and Language
ACM DBPL Keynote: The Graph Traversal Machine and LanguageACM DBPL Keynote: The Graph Traversal Machine and Language
ACM DBPL Keynote: The Graph Traversal Machine and Language
Marko Rodriguez
 
The Gremlin Graph Traversal Language
The Gremlin Graph Traversal LanguageThe Gremlin Graph Traversal Language
The Gremlin Graph Traversal Language
Marko Rodriguez
 
Gremlin's Graph Traversal Machinery
Gremlin's Graph Traversal MachineryGremlin's Graph Traversal Machinery
Gremlin's Graph Traversal Machinery
Marko Rodriguez
 
Quantum Processes in Graph Computing
Quantum Processes in Graph ComputingQuantum Processes in Graph Computing
Quantum Processes in Graph Computing
Marko Rodriguez
 
Titan: The Rise of Big Graph Data
Titan: The Rise of Big Graph DataTitan: The Rise of Big Graph Data
Titan: The Rise of Big Graph Data
Marko Rodriguez
 
Titan: Big Graph Data with Cassandra
Titan: Big Graph Data with CassandraTitan: Big Graph Data with Cassandra
Titan: Big Graph Data with Cassandra
Matthias Broecheler
 
Seda an architecture for well-conditioned scalable internet services
Seda   an architecture for well-conditioned scalable internet servicesSeda   an architecture for well-conditioned scalable internet services
Seda an architecture for well-conditioned scalable internet services
bdemchak
 
Facebook's TAO & Unicorn data storage and search platforms
Facebook's TAO & Unicorn data storage and search platformsFacebook's TAO & Unicorn data storage and search platforms
Facebook's TAO & Unicorn data storage and search platforms
Nitish Upreti
 
Presto: Distributed Machine Learning and Graph Processing with Sparse Matrices
Presto: Distributed Machine Learning and Graph Processing with Sparse MatricesPresto: Distributed Machine Learning and Graph Processing with Sparse Matrices
Presto: Distributed Machine Learning and Graph Processing with Sparse Matrices
Qian Lin
 
Real World Tales of Repair (Alexander Dejanovski, The Last Pickle) | Cassandr...
Real World Tales of Repair (Alexander Dejanovski, The Last Pickle) | Cassandr...Real World Tales of Repair (Alexander Dejanovski, The Last Pickle) | Cassandr...
Real World Tales of Repair (Alexander Dejanovski, The Last Pickle) | Cassandr...
DataStax
 
Configurando o Geany para Python - 03/2012
Configurando o Geany para Python - 03/2012Configurando o Geany para Python - 03/2012
Configurando o Geany para Python - 03/2012
Marco Mendes
 
Configurando o geany_para_python
Configurando o geany_para_pythonConfigurando o geany_para_python
Configurando o geany_para_python
Marco Mendes
 
Introduction to cassandra 2014
Introduction to cassandra 2014Introduction to cassandra 2014
Introduction to cassandra 2014
Patrick McFadin
 
Epiphany: Connecting Millions of Events to Thirty Billion Data Points in Real...
Epiphany: Connecting Millions of Events to Thirty Billion Data Points in Real...Epiphany: Connecting Millions of Events to Thirty Billion Data Points in Real...
Epiphany: Connecting Millions of Events to Thirty Billion Data Points in Real...
DataWorks Summit
 
Deletes Without Tombstones or TTLs (Eric Stevens, ProtectWise) | Cassandra Su...
Deletes Without Tombstones or TTLs (Eric Stevens, ProtectWise) | Cassandra Su...Deletes Without Tombstones or TTLs (Eric Stevens, ProtectWise) | Cassandra Su...
Deletes Without Tombstones or TTLs (Eric Stevens, ProtectWise) | Cassandra Su...
DataStax
 
Cassandra Virtual Node talk
Cassandra Virtual Node talkCassandra Virtual Node talk
Cassandra Virtual Node talk
Patrick McFadin
 
Ad

Similar to Cassandra Summit - What's New In Apache TinkerPop? (20)

DataStax: What's New in Apache TinkerPop - the Graph Computing Framework
DataStax: What's New in Apache TinkerPop - the Graph Computing FrameworkDataStax: What's New in Apache TinkerPop - the Graph Computing Framework
DataStax: What's New in Apache TinkerPop - the Graph Computing Framework
DataStax Academy
 
TinkerPop: a story of graphs, DBs, and graph DBs
TinkerPop: a story of graphs, DBs, and graph DBsTinkerPop: a story of graphs, DBs, and graph DBs
TinkerPop: a story of graphs, DBs, and graph DBs
Joshua Shinavier
 
TinkerPop 2020
TinkerPop 2020TinkerPop 2020
TinkerPop 2020
Joshua Shinavier
 
A walk in graph databases v1.0
A walk in graph databases v1.0A walk in graph databases v1.0
A walk in graph databases v1.0
Pierre De Wilde
 
An Introduction to Tinkerpop
An Introduction to TinkerpopAn Introduction to Tinkerpop
An Introduction to Tinkerpop
Takahiro Inoue
 
Design and Implementation of the Security Graph Language
Design and Implementation of the Security Graph LanguageDesign and Implementation of the Security Graph Language
Design and Implementation of the Security Graph Language
Asankhaya Sharma
 
The Path-o-Logical Gremlin
The Path-o-Logical GremlinThe Path-o-Logical Gremlin
The Path-o-Logical Gremlin
Marko Rodriguez
 
Gremlin
Gremlin Gremlin
Gremlin
University of New South Wales
 
A gremlin in my graph confoo 2014
A gremlin in my graph confoo 2014A gremlin in my graph confoo 2014
A gremlin in my graph confoo 2014
Damien Seguy
 
10b. Graph Databases Lab
10b. Graph Databases Lab10b. Graph Databases Lab
10b. Graph Databases Lab
Fabio Fumarola
 
Processing large-scale graphs with Google(TM) Pregel by MICHAEL HACKSTEIN at...
 Processing large-scale graphs with Google(TM) Pregel by MICHAEL HACKSTEIN at... Processing large-scale graphs with Google(TM) Pregel by MICHAEL HACKSTEIN at...
Processing large-scale graphs with Google(TM) Pregel by MICHAEL HACKSTEIN at...
Big Data Spain
 
From zero to gremlin hero - Part I
From zero to gremlin hero - Part IFrom zero to gremlin hero - Part I
From zero to gremlin hero - Part I
GraphRM
 
Data Con LA 2018 - Graph Computing: How the Gremlin Stole Christmas by Justin...
Data Con LA 2018 - Graph Computing: How the Gremlin Stole Christmas by Justin...Data Con LA 2018 - Graph Computing: How the Gremlin Stole Christmas by Justin...
Data Con LA 2018 - Graph Computing: How the Gremlin Stole Christmas by Justin...
Data Con LA
 
Memoirs of a Graph Addict: Despair to Redemption
Memoirs of a Graph Addict: Despair to RedemptionMemoirs of a Graph Addict: Despair to Redemption
Memoirs of a Graph Addict: Despair to Redemption
Marko Rodriguez
 
Big Graph Data with Titan DB
Big Graph Data with Titan DBBig Graph Data with Titan DB
Big Graph Data with Titan DB
Faculty of Technical Sciences, University of Novi Sad
 
Processing large-scale graphs with Google(TM) Pregel
Processing large-scale graphs with Google(TM) PregelProcessing large-scale graphs with Google(TM) Pregel
Processing large-scale graphs with Google(TM) Pregel
ArangoDB Database
 
Frank Celler – Processing large-scale graphs with Google(TM) Pregel - NoSQL m...
Frank Celler – Processing large-scale graphs with Google(TM) Pregel - NoSQL m...Frank Celler – Processing large-scale graphs with Google(TM) Pregel - NoSQL m...
Frank Celler – Processing large-scale graphs with Google(TM) Pregel - NoSQL m...
NoSQLmatters
 
1st UIM-GDB - Connections to the Real World
1st UIM-GDB - Connections to the Real World1st UIM-GDB - Connections to the Real World
1st UIM-GDB - Connections to the Real World
Achim Friedland
 
Graph databases: Tinkerpop and Titan DB
Graph databases: Tinkerpop and Titan DBGraph databases: Tinkerpop and Titan DB
Graph databases: Tinkerpop and Titan DB
Mohamed Taher Alrefaie
 
The Gremlin in the Graph
The Gremlin in the GraphThe Gremlin in the Graph
The Gremlin in the Graph
Marko Rodriguez
 
DataStax: What's New in Apache TinkerPop - the Graph Computing Framework
DataStax: What's New in Apache TinkerPop - the Graph Computing FrameworkDataStax: What's New in Apache TinkerPop - the Graph Computing Framework
DataStax: What's New in Apache TinkerPop - the Graph Computing Framework
DataStax Academy
 
TinkerPop: a story of graphs, DBs, and graph DBs
TinkerPop: a story of graphs, DBs, and graph DBsTinkerPop: a story of graphs, DBs, and graph DBs
TinkerPop: a story of graphs, DBs, and graph DBs
Joshua Shinavier
 
A walk in graph databases v1.0
A walk in graph databases v1.0A walk in graph databases v1.0
A walk in graph databases v1.0
Pierre De Wilde
 
An Introduction to Tinkerpop
An Introduction to TinkerpopAn Introduction to Tinkerpop
An Introduction to Tinkerpop
Takahiro Inoue
 
Design and Implementation of the Security Graph Language
Design and Implementation of the Security Graph LanguageDesign and Implementation of the Security Graph Language
Design and Implementation of the Security Graph Language
Asankhaya Sharma
 
The Path-o-Logical Gremlin
The Path-o-Logical GremlinThe Path-o-Logical Gremlin
The Path-o-Logical Gremlin
Marko Rodriguez
 
A gremlin in my graph confoo 2014
A gremlin in my graph confoo 2014A gremlin in my graph confoo 2014
A gremlin in my graph confoo 2014
Damien Seguy
 
10b. Graph Databases Lab
10b. Graph Databases Lab10b. Graph Databases Lab
10b. Graph Databases Lab
Fabio Fumarola
 
Processing large-scale graphs with Google(TM) Pregel by MICHAEL HACKSTEIN at...
 Processing large-scale graphs with Google(TM) Pregel by MICHAEL HACKSTEIN at... Processing large-scale graphs with Google(TM) Pregel by MICHAEL HACKSTEIN at...
Processing large-scale graphs with Google(TM) Pregel by MICHAEL HACKSTEIN at...
Big Data Spain
 
From zero to gremlin hero - Part I
From zero to gremlin hero - Part IFrom zero to gremlin hero - Part I
From zero to gremlin hero - Part I
GraphRM
 
Data Con LA 2018 - Graph Computing: How the Gremlin Stole Christmas by Justin...
Data Con LA 2018 - Graph Computing: How the Gremlin Stole Christmas by Justin...Data Con LA 2018 - Graph Computing: How the Gremlin Stole Christmas by Justin...
Data Con LA 2018 - Graph Computing: How the Gremlin Stole Christmas by Justin...
Data Con LA
 
Memoirs of a Graph Addict: Despair to Redemption
Memoirs of a Graph Addict: Despair to RedemptionMemoirs of a Graph Addict: Despair to Redemption
Memoirs of a Graph Addict: Despair to Redemption
Marko Rodriguez
 
Processing large-scale graphs with Google(TM) Pregel
Processing large-scale graphs with Google(TM) PregelProcessing large-scale graphs with Google(TM) Pregel
Processing large-scale graphs with Google(TM) Pregel
ArangoDB Database
 
Frank Celler – Processing large-scale graphs with Google(TM) Pregel - NoSQL m...
Frank Celler – Processing large-scale graphs with Google(TM) Pregel - NoSQL m...Frank Celler – Processing large-scale graphs with Google(TM) Pregel - NoSQL m...
Frank Celler – Processing large-scale graphs with Google(TM) Pregel - NoSQL m...
NoSQLmatters
 
1st UIM-GDB - Connections to the Real World
1st UIM-GDB - Connections to the Real World1st UIM-GDB - Connections to the Real World
1st UIM-GDB - Connections to the Real World
Achim Friedland
 
Graph databases: Tinkerpop and Titan DB
Graph databases: Tinkerpop and Titan DBGraph databases: Tinkerpop and Titan DB
Graph databases: Tinkerpop and Titan DB
Mohamed Taher Alrefaie
 
The Gremlin in the Graph
The Gremlin in the GraphThe Gremlin in the Graph
The Gremlin in the Graph
Marko Rodriguez
 
Ad

Cassandra Summit - What's New In Apache TinkerPop?

Editor's Notes

  • #4: Recognize him? James Burke is a science historian. In 1978, he developed and presented a television documentary called Connections. He’s written several books and has developed several documentary sequels. In his work, he presents an alternative view of history that drops the conventional linear and isolated account of history we’re used to. He instead demonstrates how seemingly unrelated events, chance meetings among unlikely fellows, footnotes in the works of geniuses intermingled with the ongoing chaos of human existence as it pertained to war, famine, sickness, etc. linked together to form the innovations and inventions we take for granted today. There was a particular chapter in his book where he used this view of history to explain the origins of modern day programming.
  • #5: “Renaissance Gremlin” - Ketrina Yim
  • #6: The story begins with the waterwheel an invention that came about around 2000 years ago. It also demonstrates the early desire of humans to “automate”. It’s usage expanded rapidly in the 12th century helping to usher in a Medieval Industrial Revolution. It is shown here in use crushing ore, but reached a wide variety of industries to include tanning mills, saw mills, etc.
  • #7: The textile industry might have benefited the most from this innovation where fulling mills helped increase linen production. This was especially true when coupled with the european debut of the horizontal loom and the spinning wheel. By the 14th century, this produced a linen boom in Europe. As there was so much linen available, there was also lots of discarded linen, which is a very useful raw material in the production of high quality paper (which incidentally also made use of the same technology of the fulling mill).
  • #8: There was paper everywhere but the Black Death saw to it that much of the literate community were not around to write on it. As a result, there was a massive demand for scribes. They were expensive and slow and created a demand for “automated writing”. The demand for “automated writing” was answered by the Johannes Gutenberg in the 1400s and his invention of the printing press with movable type. The printing press spread across Europe very quickly and it eventually held its strongest foothold in Venice, Italy.
  • #9: In all of Venice, the busiest printer was Aldus Manutius who took a different approach to printing in that he focused on printing small, inexpensive, pocket-style books. He was also quite interested in printing translated versions of the Greek Classics and as fortune would have it, many of his workers were Greek refugees that came to Italy after the Fall of Constantinople to the Turks. As a result of this work, The Renaissance has been seeded with Greek philosophy and science.
  • #10: With this renewed interest interest in Greek science came interest in the pneumatic and hydraulic machinations of Hero of Alexanderia. This led to moving toys, complex clocks, watergardens, self-playing organs, a mechanical duck that could “digest” food, and other interesting baubles. This interest in automata helped to solve a particularly vexing problem in the French silk industry where costly errors were occurring in the very manual process of getting patterns properly woven.
  • #11: It was the son of an organ maker, Basile Bouchon, who came up with the initial solution in 1725. He encoded the patterns on to paper with holes that the machine would interpret in order to establish the appropriate weaving pattern. The idea didn’t immediately catch on and this innovation was improved upon several times by different individuals until ultimately in 1801 it was Joseph Marie Jacquard who ended up acquiring most of the credit for the work for what we know today as the Jacquard loom.
  • #12: The concept of telling machines what to do via “paper with holes” spread to use in engineering fields and was used in tabulating the 1890 US census by Herman Hollerith and then later to program computers. As the input and output devices for computers evolved so did the programming languages giving us LISP, COBOL, C, Java and eventually the Gremlin programming language.
  • #13: The point of this history lesson was to show how adding connections among historical moments present a new way to look at facts yielding a fresh analysis. By looking at data in a different way it sometimes presents new opportunities for understanding. So to that end, what if this concept of connections within history was made more generic? Rather than just connecting historical points, what if the connections applied to something as general as an “entity”? In this way any data, would fit this model yielding the opportunity to see how any one entity related to any other in the set. What if developers looked at their data in this way and treated the connections in their data as high value? What kinds of interesting things would be uncovered? Assuming one went that far in placing high value on connections, then one would want their database to treat those connections as first-class citizens. A database that does that is a graph database.
  • #14: A graph has vertices and edges. A vertex is a domain object or entity and an edge is the connection or relationship between two vertices. A vertex and edge can have a label and arbitrary set of attributes/key-value pairs. This structure provides for a flexible and real-world way to represent data.
  • #15: The TinkerPop Stack provides a foundation for developing applications over property graphs. TP2 separated the different components of TinkerPop into different projects. In TP3 there is only one project but the essence of each of the original TP2 projects is still present.
  • #16: The TinkerPop Stack provides a graph abstraction layer over different graph databases/processors. The Gremlin query language operates over that for interacting with the graph data. Gremlin Server provides a way to remotely execute those traversals or to centralize their functionality as a service.
  • #18: How does one get started with TinkerPop? The Gremlin Console, of course! Note that TP3 has a plugin system that makes it possible to extend the Console. The Gremlin Console is an invaluable tool as it allows for instant feedback while coding. Use it to load data, administer a graph, perform ad-hoc analysis, or work tough tough bits of a complex traversal.
  • #19: GraphFactory demonstrates TinkerPop as a graph database abstraction layer. Another “getting started” note: use TinkerGraph!
  • #20: Data is a subset of data taken from a collaborative study between Pearson Global Higher Education and Columbia University. Together they studied how social interactions and knowledge construction unfold in online courses. Baker-Stein, Marni; York, Sean; and Dashew, Brian (2014) "Visualizing Knowledge Networks in Online Courses," Internet Learning: Vol. 3: Iss. 2, Article 8. Available at: http://digitalcommons.apus.edu/internetlearning/vol3/iss2/8
  • #21: The TraversalSource provides context to a Gremlin. This context defines the GraphComputer to utilize when executing the traversal and TraversalStrategy implementations to be applied.
  • #27: AdjacentToIncidentStrategy is an example of an optimization strategy but there are many other types of strategies and use cases for them. Decorative strategies provide features at the application level (e.g. ReadOnlyStrategy). Implementers of the core APIs for graph databases may use strategies to showcase the underlying capabilities of their systems by writing strategies to take advantage of indices or other meta-data they have about their graph to improve performance.
  • #31: TinkerPop 3 was built from the ground up with the idea that it would provide support for OLTP and OLAP. OLTP or local traversals are ones that start with a one vertex of a small subset of vertices and traverse away from there. OLAP traversals need to touch the entire graph to execute. In recent years, distributed processing frameworks like Hadoop and Spark have come along and their features can be applied to these OLAP type queries.
  • #32: Initialize the Hadoop Plugin and make the data available.
  • #33: Get a HadoopGraph instance then specify that it should use the SparkGraphComputer.
  • #34: So, what do those two queries look like when you execute them with Spark? They are identical. Gremlin is not only an abstraction layer over graph databases but also over graph processing frameworks so just as the same Gremlin script will run on Neo4j as it will for Titan, the same Gremlin will also run over Spark or Giraph.
  • #35: Everyone likes to visualize their graph data when they first get started. TinkerPop provides visualization support through integration with Gephi - a graph visualization application.
  • #36: The use of :submit (shorthanded by :>) will submit the “graph” to the currently active “remote” in the console. In this case, the current remote is Gephi, so the graph instance will be streamed there.
  • #37: ……….and you get a hairball!
  • #38: …..but there’s two interesting bits, perhaps….
  • #39: ...if these two interesting bits are subgraphed out, then it’s easier to understand without all the additional noise
  • #40: It is also possible to visualize the execution of a Traversal.