Graph db: time for serious stuff @ codemotion 23/03/2012
- 12. Graph -> GraphDB
A GraphDB is a database that use the
graph as its primary data structure
11
- 14. Recommendations
lives in
John type shows
Mr
Fun Cinema B
Bean loca
tion
lik
Rome
es
shows Cinema A location
type
Thriller Se7en
s ho
ws
location Milan
Cinema C
14
- 15. Recommendations
lives in
John
x x x
Fun
type Mr
Bean
shows
Cinema B
loca
tion
lik
✓
Rome
es
type
shows
✓
Cinema A location ✓
✓ shows
x x
✓
Thriller Se7en
location Milan
Cinema C
22
- 27. Given your dataset, organize some clusters
Are there some nodes which cannot belong to a cluster?
They probably have some properties different from the average
- 28. Given your dataset, organize some clusters
Are there some nodes which cannot belong to a cluster?
They probably have some properties different from the average
ACHTUNG!
TERRORISTEN!
- 30. Representing a Graph in:
http://www.slideshare.net/slidarko/problemsolving-using-graph-traversals-searching-
scoring-ranking-and-recommendation#
✓ Relational Database
(mysql, oracle)
✓ Document Oriented DB
(mongodb, couchdb)
✓ XML Database
(MarkLogic, eXist-db)
37
- 32. GraphDB
A graph database is any storage
system that provides index-free
adjacency.
http://www.slideshare.net/slidarko/problemsolving-using-graph-traversals-searching-scoring-ranking-and-recommendation
- 33. Step by step example
Given a list of people, find their homepages
40
- 34. Tree-based DB WAY
David Funaro
put in the Search Engine
2
find 3
1
http://davidfunaro.com
41
- 35. Tree-based DB WAY
David Funaro
The cost to find Search Engine friend HP
put in the a single
2
grows as the friends HP tables grows
find 3
1
http://davidfunaro.com
41
- 36. GraphDB WAY
1 get the embedded
information(index)
www.odino.org
it’s like that the GraphDB has an additional information
(the ancor <a>)
42
- 37. GraphDB WAY
The Anchor work as a local index to
reach the document = index-free
adjacency
<a href=”http://odino.org”>
Alessandro Nadalin
</a>
43
- 40. Local cost
Thus, as the graph grows in size,
the cost of a local step remain the same
46
- 41. any database can implicity represent a
graph
BUT
only a graph database make the graph
structure explicit
47
- 42. Benchmark
Deph RDBMS Graph
1 100ms 30ms
• 1 Million Vertex
• 4 Million Edge
2 1000ms 500ms
• Scale Free Tolopogy
3 10000ms 3000ms
• MySql VS Neo4J
4 100000m 50000ms
s • Both Hash and BTree
5 N/A 100000m
s
48
http://markorodriguez.com/2011/02/18/mysql-vs-neo4j-on-a-large-scale-graph-traversal/
- 43. How ?
PREFIX geospecies: <http://rdf.geospecies.org/ont/
geospecies#>
PREFIX lycopodiophyta: <http://lod.geospecies.org/phyla/Pc2>
PREFIX door_county: <http://sws.geonames.org/5250768/>
PREFIX dcterms: <http://purl.org/dc/terms/>
SELECT DISTINCT ?family_name ?canonicalName ?commonName ?
identifier ?wikipedia_url
WHERE {
?x geospecies:hasFamilyName ?family_name;
geospecies:hasCanonicalName ?canonicalName;
geospecies:hasCommonName ?commonName;
dcterms:identifier ?identifier;
geospecies:inPhylum lycopodiophyta:;
geospecies:isUSDA_ExpectedIn door_county:.
OPTIONAL { ?x geospecies:hasCommonName ?commonName;
geospecies:hasWikipediaArticle ?wikipedia_url}
}
ORDER BY ?family_name ?canonicalName
49
- 45. NoSPARQL
http://blog.acaro.org/entry/somebody-is-going-to-hate-me-nosparql
- 46. community that is building and feeding the GraphDB ecosystem
NoSPARQL
ThinkerPop
Stack
Databases
- 47. data model and their
implementation
Blueprints is a collection of interfaces, implementations,
ouplementations, and test suites for the property graph data
model. Blueprints is analogous to the JDBC, but for graph
databases.
https://github.com/tinkerpop/blueprints/wiki/
- 48. a data flow Framework using Process Graph
provide a collection of "pipes" that are
connected togheter to from processing
pipelines
- 49. a graph-based programming language.
a Turing-Complete graph-base programming language
that compiles Gremlin syntax down to Pipes
- 50. a REST-full graph shell.
Allow blueprints graph to be exposed
through a RESTful API (HTTP)
- 53. Glossary
RID
<10:05>
Cluster Position
CLASS
59
- 57. class Vehicle
class Car
class Bike
SELECT FROM Vehicle WHERE owner = 1:1
- 58. class Vehicle
class Car
class Bike
can return records of class Bike or Car
- 67. { "schema": {
"name": "Address"
},
"result": [{
"@type": "d", "@rid": "#13:0", "@version": 6, "@class": "Address",
"type": "Residence",
"street": "Piazza Navona, 1",
"city": "#14:0",
"nick": "Luca2"
}, {
...
...
- 83. •Inheritance
•Traversal
•SQL-like syntax
•ACID
OrientDB •Speak JSON
•Double protocol
•on-record Select
•ThinkerPop Compliant
- 84. Language Bindings
http://code.google.com/p/orient/wiki/ProgrammingLanguageBindings 99
- 86. Orient = PHP Library to work with OrientDB
https://github.com/congow/Orient
101
- 89. use CongowOrient;
use CongowOrientFoundationBinding;
$driver = new OrientHttpClientCurl();
$orient = new Binding($driver, '127.0.0.1', '2480', 'admin', 'admin', 'demo');
$response = $orient->query("SELECT FROM Address");
$output = json_decode($response->getBody());
foreach ($output->result as $address)
{
var_dump($address->street);
}
- 95. use CongowOrientQuery;
$query = new Query();
$query->from(array('users'))->where('username = ?', "admin");
echo $query->getRaw();
// SELECT FROM users WHERE username = "admin"
- 96. $query->select(array('name', 'username', 'email'), false)
->from(array('12:0', '12:1'), false)
->where('any() traverse ( any() like "%danger%" )')
->orWhere("1 = ?", 1)
->andWhere("links = ?", 1)
->limit(20)
->orderBy('username')
->orderBy('name', true, true)
->range("12:0", "12:1");
SELECT name, username, email
FROM [12:0, 12:1]
WHERE any() traverse ( any() like "%danger%" )
OR 1 = "1" AND links = "1"
ORDER BY name, username
LIMIT 20
RANGE 12:0 12:1
- 100. { "schema": {
"name": "Speaker"
},
"result": [{
"@type": "d", "@rid": "#1:0", "@version": 6, "@class": "Speaker",
"name": "David Coallier"
}, {
...
...
- 101. { "schema": {
"name": "Speaker"
},
"result": [{
"@type": "d", "@rid": "#1:0", "@version": 6, "@class": "Speaker",
"name": "David Coallier"
}, {
...
...
$david = $mapper->hydrate(json_decode($speaker));
- 102. { "schema": {
"name": "Speaker"
},
"result": [{
"@type": "d", "@rid": "#1:0", "@version": 6, "@class": "Speaker",
"name": "Martin Fowler"
}, {
...
...
$david instanceOf PolandPHPConEntitySpeaker
- 107. $criteria = array(
'Name' => 'Martin',
'last_name' => 'Fowler'
);
$lornaJ = $repo->findOneBy($criteria);
- 110. That’s all, folks!
David Funaro Alessandro Nadalin
@ingdavidino @_odino_
http://davidfunaro.com http://odino.org
136
- 111. Credits
http://www.flickr.com/photos/sayamindu/5677281218/sizes/l/in/photostream/
http://farm1.static.flickr.com/182/471383865_79d04aec36_o.png
http://farm1.static.flickr.com/134/318947873_12028f1b66_b.jpg
http://www.flickr.com/photos/atomdocs/3275758118/sizes/o/in/photostream/
http://www.flickr.com/photos/pattipics/5229478393/sizes/o/in/photostream/
http://www.flickr.com/photos/kongharald/366597251/sizes/o/in/photostream/
http://www.everaldo.com/
http://www.flickr.com/photos/tusnelda/6140792529/sizes/l/in/photostream/
http://www.flickr.com/photos/mondi/5368644355/sizes/l/in/photostream/
http://www.flickr.com/photos/jayneandd/4191106566/sizes/l/in/photostream/
http://www.flickr.com/photos/jooon/2093253534/sizes/l/in/photostream/
http://www.flickr.com/photos/bluedharma/89186151/sizes/o/in/photostream/
http://www.flickr.com/photos/exfordy/2747089295/sizes/l/in/photostream/
http://www.flickr.com/photos/nostri-imago/3137422976/sizes/o/in/photostream/
http://www.flickr.com/photos/fionasjournal/379587818/sizes/z/in/photostream/
http://www.flickr.com/photos/nperlapro/1297392267/
http://www.flickr.com/photos/fastphive/28428808/sizes/m/in/photostream/
http://www.flickr.com/photos/rnugraha/2003147365/sizes/o/in/photostream/
http://www.flickr.com/photos/zigazou76/4412946911/sizes/l/in/photostream/
http://www.flickr.com/photos/greatnet/4667555436/sizes/l/in/photostream/
http://www.flickr.com/photos/mnsc/2768391365/sizes/l/in/photostream/
http://www.flickr.com/photos/christmaswithak/4675962453/sizes/l/in/photostream/
http://www.amazon.com/Trainspotting-Irvine-Welsh/dp/0393314804
http://www.flickr.com/photos/franconadalin59/5778176872/sizes/l/in/photostream/
http://farm6.static.flickr.com/5176/5474445627_875d621689_b.jpg
http://farm3.static.flickr.com/2243/2189435082_a16d3c89ae_b.jpg
http://farm3.static.flickr.com/2647/3816311930_ac52cff491_o.jpg
http://i130.photobucket.com/albums/p266/feike1977/PES6-4-3-3defencesettings.jpg
http://images.usatoday.com/life/_photos/2006/11/30/numb3rs-topper.jpg
http://www.flickr.com/photos/jakecaptive/3205277810/sizes/l/in/photostream/