SlideShare une entreprise Scribd logo
1  sur  47
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.

Contenu connexe

Tendances

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 Tutorialguligala
 
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 editionosfameron
 
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 zipperosfameron
 
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 dayTor 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 MilanFabio Collini
 
Haskell in the Real World
Haskell in the Real WorldHaskell in the Real World
Haskell in the Real Worldosfameron
 
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 programmingLukasz Dynowski
 
Collectors in the Wild
Collectors in the WildCollectors in the Wild
Collectors in the WildJosé Paumard
 
Exploring slides
Exploring slidesExploring slides
Exploring slidesakaptur
 
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 NYCPythonakaptur
 
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 ProgrammingDmitry 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 GrailsTsuyoshi 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 BeginnersMatt Passell
 

Tendances (20)

A tour of Python
A tour of PythonA tour of Python
A tour of Python
 
Atomically { Delete Your Actors }
Atomically { Delete Your Actors }Atomically { Delete Your Actors }
Atomically { Delete Your Actors }
 
Groovy Api Tutorial
Groovy Api  TutorialGroovy Api  Tutorial
Groovy Api Tutorial
 
TCO in Python via bytecode manipulation.
TCO in Python via bytecode manipulation.TCO in Python via bytecode manipulation.
TCO in Python via bytecode manipulation.
 
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
 
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
 
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
 
Go ahead, make my day
Go ahead, make my dayGo ahead, make my day
Go ahead, make my day
 
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
 
Haskell in the Real World
Haskell in the Real WorldHaskell in the Real World
Haskell in the Real World
 
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
 
Collectors in the Wild
Collectors in the WildCollectors in the Wild
Collectors in the Wild
 
Exploring slides
Exploring slidesExploring slides
Exploring slides
 
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
 
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)
 
Poor Man's Functional Programming
Poor Man's Functional ProgrammingPoor Man's Functional Programming
Poor Man's Functional Programming
 
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...
 
多治見IT勉強会 Groovy Grails
多治見IT勉強会 Groovy Grails多治見IT勉強会 Groovy Grails
多治見IT勉強会 Groovy Grails
 
imager package in R and examples..
imager package in R and examples..imager package in R and examples..
imager package in R and examples..
 
GPars For Beginners
GPars For BeginnersGPars For Beginners
GPars For Beginners
 

En vedette

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 LanguageMarko Rodriguez
 
The Gremlin Graph Traversal Language
The Gremlin Graph Traversal LanguageThe Gremlin Graph Traversal Language
The Gremlin Graph Traversal LanguageMarko Rodriguez
 
Gremlin's Graph Traversal Machinery
Gremlin's Graph Traversal MachineryGremlin's Graph Traversal Machinery
Gremlin's Graph Traversal MachineryMarko Rodriguez
 
Quantum Processes in Graph Computing
Quantum Processes in Graph ComputingQuantum Processes in Graph Computing
Quantum Processes in Graph ComputingMarko 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 DataMarko Rodriguez
 
Titan: Big Graph Data with Cassandra
Titan: Big Graph Data with CassandraTitan: Big Graph Data with Cassandra
Titan: Big Graph Data with CassandraMatthias 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 servicesbdemchak
 
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 platformsNitish 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 MatricesQian 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/2012Marco Mendes
 
Configurando o geany_para_python
Configurando o geany_para_pythonConfigurando o geany_para_python
Configurando o geany_para_pythonMarco Mendes
 
Introduction to cassandra 2014
Introduction to cassandra 2014Introduction to cassandra 2014
Introduction to cassandra 2014Patrick 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 talkPatrick McFadin
 

En vedette (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
 
The Gremlin Graph Traversal Language
The Gremlin Graph Traversal LanguageThe Gremlin Graph Traversal Language
The Gremlin Graph Traversal Language
 
Gremlin's Graph Traversal Machinery
Gremlin's Graph Traversal MachineryGremlin's Graph Traversal Machinery
Gremlin's Graph Traversal Machinery
 
Quantum Processes in Graph Computing
Quantum Processes in Graph ComputingQuantum Processes in Graph Computing
Quantum Processes in Graph Computing
 
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
 
Titan: Big Graph Data with Cassandra
Titan: Big Graph Data with CassandraTitan: Big Graph Data with Cassandra
Titan: Big Graph Data with Cassandra
 
The Path Forward
The Path ForwardThe Path Forward
The Path Forward
 
F8 tech talk_pinterest_v4
F8 tech talk_pinterest_v4F8 tech talk_pinterest_v4
F8 tech talk_pinterest_v4
 
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
 
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
 
Data Driven Growth
Data Driven GrowthData Driven Growth
Data Driven Growth
 
IDEs y Frameworks mas utilizados
IDEs y Frameworks mas utilizadosIDEs y Frameworks mas utilizados
IDEs y Frameworks mas utilizados
 
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
 
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...
 
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
 
Configurando o geany_para_python
Configurando o geany_para_pythonConfigurando o geany_para_python
Configurando o geany_para_python
 
Introduction to cassandra 2014
Introduction to cassandra 2014Introduction to cassandra 2014
Introduction to cassandra 2014
 
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...
 
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...
 
Cassandra Virtual Node talk
Cassandra Virtual Node talkCassandra Virtual Node talk
Cassandra Virtual Node talk
 

Similaire à Cassandra Summit - What's New In Apache TinkerPop?

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 FrameworkDataStax Academy
 
Swift: Apple's New Programming Language for iOS and OS X
Swift: Apple's New Programming Language for iOS and OS XSwift: Apple's New Programming Language for iOS and OS X
Swift: Apple's New Programming Language for iOS and OS XSasha Goldshtein
 
Utilizing kotlin flows in an android application
Utilizing kotlin flows in an android applicationUtilizing kotlin flows in an android application
Utilizing kotlin flows in an android applicationSeven Peaks Speaks
 
Mining the social web ch1
Mining the social web ch1Mining the social web ch1
Mining the social web ch1HyeonSeok Choi
 
Greyhound - Powerful Pure Functional Kafka Library
Greyhound - Powerful Pure Functional Kafka LibraryGreyhound - Powerful Pure Functional Kafka Library
Greyhound - Powerful Pure Functional Kafka LibraryNatan Silnitsky
 
Perl 6 For Mere Mortals
Perl 6 For Mere MortalsPerl 6 For Mere Mortals
Perl 6 For Mere MortalsCurtis Poe
 
InspiringCon15: Bringing TYPO3 Legacy Applications into the Flow
InspiringCon15: Bringing TYPO3 Legacy Applications into the FlowInspiringCon15: Bringing TYPO3 Legacy Applications into the Flow
InspiringCon15: Bringing TYPO3 Legacy Applications into the Flowmhelmich
 
Practical REPL-driven Development with Clojure
Practical REPL-driven Development with ClojurePractical REPL-driven Development with Clojure
Practical REPL-driven Development with ClojureKent Ohashi
 
The Ring programming language version 1.9 book - Part 56 of 210
The Ring programming language version 1.9 book - Part 56 of 210The Ring programming language version 1.9 book - Part 56 of 210
The Ring programming language version 1.9 book - Part 56 of 210Mahmoud Samir Fayed
 
The Ring programming language version 1.8 book - Part 90 of 202
The Ring programming language version 1.8 book - Part 90 of 202The Ring programming language version 1.8 book - Part 90 of 202
The Ring programming language version 1.8 book - Part 90 of 202Mahmoud Samir Fayed
 
Building resilient services in go
Building resilient services in goBuilding resilient services in go
Building resilient services in goJaehue Jang
 
Mastering Kotlin Standard Library
Mastering Kotlin Standard LibraryMastering Kotlin Standard Library
Mastering Kotlin Standard LibraryNelson Glauber Leal
 
Analysing Github events with Neo4j
Analysing Github events with Neo4jAnalysing Github events with Neo4j
Analysing Github events with Neo4jChristophe Willemsen
 
The Ring programming language version 1.5.3 book - Part 10 of 184
The Ring programming language version 1.5.3 book - Part 10 of 184The Ring programming language version 1.5.3 book - Part 10 of 184
The Ring programming language version 1.5.3 book - Part 10 of 184Mahmoud Samir Fayed
 
Small pieces loosely joined
Small pieces loosely joinedSmall pieces loosely joined
Small pieces loosely joinedennui2342
 
Data visualization by Kenneth Odoh
Data visualization by Kenneth OdohData visualization by Kenneth Odoh
Data visualization by Kenneth Odohpyconfi
 
Functional Reactive Programming on Android
Functional Reactive Programming on AndroidFunctional Reactive Programming on Android
Functional Reactive Programming on AndroidSam Lee
 
Brand New JavaScript - ECMAScript 2015
Brand New JavaScript - ECMAScript 2015Brand New JavaScript - ECMAScript 2015
Brand New JavaScript - ECMAScript 2015Gil Fink
 

Similaire à 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
 
Swift: Apple's New Programming Language for iOS and OS X
Swift: Apple's New Programming Language for iOS and OS XSwift: Apple's New Programming Language for iOS and OS X
Swift: Apple's New Programming Language for iOS and OS X
 
Utilizing kotlin flows in an android application
Utilizing kotlin flows in an android applicationUtilizing kotlin flows in an android application
Utilizing kotlin flows in an android application
 
Mining the social web ch1
Mining the social web ch1Mining the social web ch1
Mining the social web ch1
 
Greyhound - Powerful Pure Functional Kafka Library
Greyhound - Powerful Pure Functional Kafka LibraryGreyhound - Powerful Pure Functional Kafka Library
Greyhound - Powerful Pure Functional Kafka Library
 
Rack Middleware
Rack MiddlewareRack Middleware
Rack Middleware
 
Perl 6 For Mere Mortals
Perl 6 For Mere MortalsPerl 6 For Mere Mortals
Perl 6 For Mere Mortals
 
InspiringCon15: Bringing TYPO3 Legacy Applications into the Flow
InspiringCon15: Bringing TYPO3 Legacy Applications into the FlowInspiringCon15: Bringing TYPO3 Legacy Applications into the Flow
InspiringCon15: Bringing TYPO3 Legacy Applications into the Flow
 
RxJava Applied
RxJava AppliedRxJava Applied
RxJava Applied
 
Practical REPL-driven Development with Clojure
Practical REPL-driven Development with ClojurePractical REPL-driven Development with Clojure
Practical REPL-driven Development with Clojure
 
The Ring programming language version 1.9 book - Part 56 of 210
The Ring programming language version 1.9 book - Part 56 of 210The Ring programming language version 1.9 book - Part 56 of 210
The Ring programming language version 1.9 book - Part 56 of 210
 
The Ring programming language version 1.8 book - Part 90 of 202
The Ring programming language version 1.8 book - Part 90 of 202The Ring programming language version 1.8 book - Part 90 of 202
The Ring programming language version 1.8 book - Part 90 of 202
 
Building resilient services in go
Building resilient services in goBuilding resilient services in go
Building resilient services in go
 
Mastering Kotlin Standard Library
Mastering Kotlin Standard LibraryMastering Kotlin Standard Library
Mastering Kotlin Standard Library
 
Analysing Github events with Neo4j
Analysing Github events with Neo4jAnalysing Github events with Neo4j
Analysing Github events with Neo4j
 
The Ring programming language version 1.5.3 book - Part 10 of 184
The Ring programming language version 1.5.3 book - Part 10 of 184The Ring programming language version 1.5.3 book - Part 10 of 184
The Ring programming language version 1.5.3 book - Part 10 of 184
 
Small pieces loosely joined
Small pieces loosely joinedSmall pieces loosely joined
Small pieces loosely joined
 
Data visualization by Kenneth Odoh
Data visualization by Kenneth OdohData visualization by Kenneth Odoh
Data visualization by Kenneth Odoh
 
Functional Reactive Programming on Android
Functional Reactive Programming on AndroidFunctional Reactive Programming on Android
Functional Reactive Programming on Android
 
Brand New JavaScript - ECMAScript 2015
Brand New JavaScript - ECMAScript 2015Brand New JavaScript - ECMAScript 2015
Brand New JavaScript - ECMAScript 2015
 

Cassandra Summit - What's New In Apache TinkerPop?

Notes de l'éditeur

  1. 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.
  2. “Renaissance Gremlin” - Ketrina Yim
  3. 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.
  4. 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).
  5. 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.
  6. 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.
  7. 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.
  8. 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.
  9. 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.
  10. 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.
  11. 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.
  12. 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.
  13. 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.
  14. 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.
  15. GraphFactory demonstrates TinkerPop as a graph database abstraction layer. Another “getting started” note: use TinkerGraph!
  16. 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
  17. The TraversalSource provides context to a Gremlin. This context defines the GraphComputer to utilize when executing the traversal and TraversalStrategy implementations to be applied.
  18. 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.
  19. 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.
  20. Initialize the Hadoop Plugin and make the data available.
  21. Get a HadoopGraph instance then specify that it should use the SparkGraphComputer.
  22. 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.
  23. Everyone likes to visualize their graph data when they first get started. TinkerPop provides visualization support through integration with Gephi - a graph visualization application.
  24. 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.
  25. ……….and you get a hairball!
  26. …..but there’s two interesting bits, perhaps….
  27. ...if these two interesting bits are subgraphed out, then it’s easier to understand without all the additional noise
  28. It is also possible to visualize the execution of a Traversal.