In The Land Of Graphs...

  • 169 views
Uploaded on

Scottland Ruby Conference 2014

Scottland Ruby Conference 2014

  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
    Be the first to like this
No Downloads

Views

Total Views
169
On Slideshare
0
From Embeds
0
Number of Embeds
1

Actions

Shares
Downloads
3
Comments
0
Likes
0

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. In the land of graphs Fernand Galiana @kitesurfer
  • 2. Agenda • Graph morphology • Persistence mechanisms • Terminology • Modeling • Graph databases and API’s • Integrating with Ruby/Rails • How to win $1,000,000
  • 3. Graph Databases
  • 4. Morphology Dots and lines
  • 5. Undirected graph (~200BC)
  • 6. Directed graph (~14th-16th century)
  • 7. MultiRelational Graph (19th century) followsfollows likes likes
  • 8. Property Graph (present) followsfollows likes likes name: Fred age: 29 name: Jim age: 19
  • 9. Property Graph (cont) followsfollows likes likes name: Fred age: 29 name: James age: 19 weight: 0.9 date: 11/12/13
  • 10. @jimweirich
  • 11. Persistence
  • 12. Any database can model a graph
  • 13. Index Base Traversal DC E A B B,C E E,D CB D E A
  • 14. DC E A B B,C E E,D CB D E A Index Base Traversal
  • 15. DC E A B B,C E E,D CB D E A Index Base Traversal
  • 16. DC E A B B,C E E,D CB D E A Index Base Traversal
  • 17. A graph database is any storage system that can provide index-free adjacency.
  • 18. GraphDB DC E A B
  • 19. GraphDB DC E A B
  • 20. Performance Depth SQL Neo4j Recs 2 0.01 0.01 2.5k 3 30.26 0.16 100k 4 1,543 1.35 600k 5 Toast! 2.1 800k
  • 21. @jimweirich
  • 22. Why use a graph DB? • Recommendations - densifying the graph • Social • Ranking • Merging domains • Data analysis
  • 23. Terminology
  • 24. Terminology 1 2 follows 3 likes loves
  • 25. Terminology 1 2 follows 3 likes loves OUT Vertex IN Vertex
  • 26. Terminology 1 2 follows 3 likes loves vertex 1 OUT edges
  • 27. Terminology 1 2 follows 3 likes loves vertex 2 IN edges
  • 28. Terminology 1 2 follows 3 likes loves vertex 3 BOTH edges
  • 29. @jimweirich
  • 30. Modeling A B
  • 31. Modeling • Vertex • Edge • Properties • Relationships
  • 32. Modeling • Assess the space • Nodes = Entities • Edges = connections + semantic context • NProperties = entity attrs + meta • EProperties = strength + weight
  • 33. @jimweirich
  • 34. The Scene …
  • 35. DSLs • Cypher (Neo4j) • Gremlin (BluePrint) • SPARQL
  • 36. Rexster • Rexster (REST) • RexPro (bin) • Rexster Kibbles
  • 37. Blueprints
  • 38. Gremlin
  • 39. Gremlin[CruD] • g.addVertex(id,[a:10,b:’Hello’]) • g.addEdge(id,v1,v2,’friend’,[a:10]) • g.removeVertex(g.v(id)) • g.removeEdge(g.e(id)) • g.v(id).remove() • …
  • 40. 2 4 5 6 7 1 3 Oscar Rango BatisteGustave Gertrude Stew Olaf friend friend friend friend friend friend friend friend gremlin> g = rexster.getGraph('derailed_graph')
  • 41. 2 4 5 6 7 1 3 Oscar Rango BatisteGustave Gertrude Stew Olaf friend friend friend friend friend friend friend friend gremlin> g.V ==> v[1], v[2], v[3], v[4], v[5], v[6], v[7]
  • 42. gremlin> g.E ==> e[1][1-friend-2], e[2][1-friend-3], etc… 2 4 5 6 7 1 3 Oscar Rango BatisteGustave Gertrude Stew Olaf friend friend friend friend friend friend friend friend
  • 43. 2 4 5 6 7 1 3 Oscar Rango BatisteGustave Gertrude Stew Olaf friend friend friend friend friend friend friend friend gremlin> g.v(1) ==> v[1]
  • 44. 2 4 5 6 7 1 3 Oscar Rango BatisteGustave Gertrude Stew Olaf friend friend friend friend friend friend friend friend gremlin> g.V(‘name’, ‘Gustave’) ==> v[1]
  • 45. 2 4 5 6 7 1 3 Oscar Rango BatisteGustave Gertrude Stew Olaf friend friend friend friend friend friend friend friend gremlin> g.e(1) ==> e[1][1-friend-2]
  • 46. gremlin> g.v(1).outE ==> e[1][1-friend-2], e[2][1-friend-3],e[3][1-friend-4] 2 4 5 6 7 1 3 Oscar Rango BatisteGustave Gertrude Stew Olaf friend friend friend friend friend friend friend friend
  • 47. gremlin> g.v(7).inE ==> e[7][3-friend-7] 2 4 5 6 7 1 3 Oscar Rango BatisteGustave Gertrude Stew Olaf friend friend friend friend friend friend friend friend
  • 48. gremlin> g.v(4).bothE ==> e[3][1-friend-4], e[8][4-friend-6] 2 4 5 6 7 1 3 Oscar Rango BatisteGustave Gertrude Stew Olaf friend friend friend friend friend friend friend friend
  • 49. 2 4 5 6 7 1 3 Oscar Rango BatisteGustave Gertrude Stew Olaf friend friend friend friend friend friend friend friend gremlin> g.v(4).both ==> v[1], v[6]
  • 50. 2 4 5 6 7 1 3 Oscar Rango BatisteGustave Gertrude Stew Olaf friend friend friend friend friend friend friend friend gremlin> g.v(1) ==> v[1]
  • 51. 2 4 5 6 7 1 3 Oscar Rango BatisteGustave Gertrude Stew Olaf friend friend friend friend friend friend friend friend gremlin> g.v(1).out(‘friend’) ==> v[2], v[3], v[4]
  • 52. 2 4 5 6 7 1 3 Oscar Rango BatisteGustave Gertrude Stew Olaf friend friend friend friend friend friend friend friend gremlin> g.v(1).out(‘friend’).out(‘friend’) ==> v[5], v[6], v[6], v[6], v[7]
  • 53. 2 4 5 6 7 1 3 Oscar Rango BatisteGustave Gertrude Stew Olaf friend friend friend friend friend friend friend friend gremlin> g.v(1).out(‘friend’).out(‘friend’).groupCount.cap ==> {v[5]=1,v[6]=3,v[7]=1}
  • 54. DEMO! • Rexster DogHouse • Wewoo
 (coz self promotion is underated!)
  • 55. @jimweirich
  • 56. Conclusion • Mining relationships • Recommendation, data analysis • Scoring, Ranking • Understand problem space • Search engine integration • Combining several problem spaces
  • 57. References • https://github.com/tinkerpop/gremlin • http://gremlindocs.com • http://sql2gremlin.com • github.com/derailed/wewoo • @jimweirich
  • 58. Is a Graph worth a thousand joins? ! ! ! Thank you! @kitesurfer fernand.galiana@gmail.com