no sql
play

No SQL? Image credit: http://browsertoolkit.com/fault-tolerance.png - PowerPoint PPT Presentation

No SQL? Image credit: http://browsertoolkit.com/fault-tolerance.png No SQL? Image credit: http://browsertoolkit.com/fault-tolerance.png No SQL? Image credit: http://browsertoolkit.com/fault-tolerance.png Neo4j the benefits of graph databases


  1. No SQL? Image credit: http://browsertoolkit.com/fault-tolerance.png

  2. No SQL? Image credit: http://browsertoolkit.com/fault-tolerance.png

  3. No SQL? Image credit: http://browsertoolkit.com/fault-tolerance.png

  4. Neo4j the benefits of graph databases + a NOSQL overview QCon London 2010 #neo4j Emil Eifrem @emileifrem emil@neotechnology.com CEO, Neo Technology

  5. What's the plan? Why now? – Four trends NOSQL overview Graph databases && Neo4j A production example of Neo4j Conclusions

  6. Trend 1: data set size 40 2007 Source: IDC 2007

  7. 988 Trend 1: data set size 40 2010 2007 Source: IDC 2007

  8. Trend 2: connectedness Giant Global Information connectivity Graph (GGG) Ontologies RDF Folksonomies Tagging User- Wikis generated content Blogs RSS Hypertext Text web 1.0 web 2.0 “web 3.0” documents 1990 2000 2010 2020

  9. Trend 3: semi-structure Individualization of content! In the salary lists of the 1970s, all elements had exactly one job In the salary lists of the 2000s, we need 5 job columns! Or 8? Or 15? Trend accelerated by the decentralization of content generation that is the hallmark of the age of participation (“web 2.0”)

  10. Aside: RDBMS performance Relational database Salary List Performance Majority of Webapps Social network Semantic } Trading custom Data complexity

  11. Trend 4: architecture 1990s: Database as integration hub

  12. Trend 4: architecture 2000s: (Slowly towards...) Decoupled services with own backend

  13. Why NOSQL 2009? Trend 1: Size. Trend 2: Connectivity. Trend 3: Semi-structure. Trend 4: Architecture.

  14. NOSQL overview

  15. First off: the name NoSQL is NOT “Never SQL” NoSQL is NOT “No To SQL”

  16. NOSQL is simply N ot O nly SQL !

  17. Four (emerging) NOSQL categories Key-value stores Based on Amazon's Dynamo paper Data model: (global) collection of K-V pairs Example: Dynomite, Voldemort, Tokyo* BigTable clones Based on Google's BigTable paper Data model: big table, column families Example: HBase, Hypertable, Cassandra

  18. Four (emerging) NOSQL categories Document databases Inspired by Lotus Notes Data model: collections of K-V collections Example: CouchDB, MongoDB Graph databases Inspired by Euler & graph theory Data model: nodes, rels, K-V on both Example: AllegroGraph, Sones, Neo4j

  19. NOSQL data models Data size Key-value stores Bigtable clones Document databases Graph databases Data complexity

  20. NOSQL data models Data size Key-value stores Bigtable clones Document databases Graph databases (This is still billions of nodes & relationships) 90% of use cases Data complexity

  21. Graph DBs & Neo4j intro

  22. The Graph DB model: representation Core abstractions: name = “Emil” age = 29 Nodes sex = “yes” Relationships between nodes 1 2 1 2 Properties on both type = KNOWS 3 3 time = 4 years type = car vendor = “SAAB” model = “95 Aero”

  23. Example: The Matrix name = “The Architect” name = “Morpheus” rank = “Captain” 42 42 occupation = “Total badass” name = “Thomas Anderson” age = 29 disclosure = public KNOWS KNOWS CODED_BY 1 K 1 7 7 3 3 N O W S 13 13 S K W name = “Cypher” N O O W last name = “Reagan” S N K name = “Agent Smith” version = 1.0b disclosure = secret age = 3 days language = C++ age = 6 months 2 2 name = “Trinity”

  24. Code (1): Building a node space GraphDatabaseService graphDb = ... // Get factory // Create Thomas 'Neo' Anderson Node mrAnderson = graphDb.createNode(); mrAnderson.setProperty( "name", "Thomas Anderson" ); mrAnderson.setProperty( "age", 29 ); // Create Morpheus Node morpheus = graphDb.createNode(); morpheus.setProperty( "name", "Morpheus" ); morpheus.setProperty( "rank", "Captain" ); morpheus.setProperty( "occupation", "Total bad ass" ); // Create a relationship representing that they know each other mrAnderson.createRelationshipTo( morpheus, RelTypes. KNOWS ); // ...create Trinity, Cypher, Agent Smith, Architect similarly

  25. Code (1): Building a node space GraphDatabaseService graphDb = ... // Get factory Transaction tx = neo.beginTx(); // Create Thomas 'Neo' Anderson Node mrAnderson = graphDb.createNode(); mrAnderson.setProperty( "name", "Thomas Anderson" ); mrAnderson.setProperty( "age", 29 ); // Create Morpheus Node morpheus = graphDb.createNode(); morpheus.setProperty( "name", "Morpheus" ); morpheus.setProperty( "rank", "Captain" ); morpheus.setProperty( "occupation", "Total bad ass" ); // Create a relationship representing that they know each other mrAnderson.createRelationshipTo( morpheus, RelTypes. KNOWS ); // ...create Trinity, Cypher, Agent Smith, Architect similarly tx.commit();

  26. Code (1b): Defining RelationshipTypes // In package org.neo4j.graphdb public interface RelationshipType { String name() ; } // In package org.yourdomain.yourapp // Example on how to roll dynamic RelationshipTypes class MyDynamicRelType implements RelationshipType { private final String name ; MyDynamicRelType ( String name ){ this. name = name ; } public String name() { return this .name; } } // Example on how to kick it, static-RelationshipType-like enum MyStaticRelTypes implements RelationshipType { KNOWS, WORKS_FOR, }

  27. Whiteboard friendly owns Björn Björn Big Car build drives DayCare

  28. The Graph DB model: traversal Traverser framework for name = “Emil” high-performance traversing age = 31 sex = “yes” across the node space 1 2 1 2 type = KNOWS 3 3 time = 4 years type = car vendor = “SAAB” model = “95 Aero”

  29. Example: Mr Anderson’s friends name = “The Architect” name = “Morpheus” rank = “Captain” 42 42 occupation = “Total badass” name = “Thomas Anderson” age = 29 disclosure = public KNOWS KNOWS CODED_BY 1 K 1 7 7 3 3 N O W S 13 13 S K W name = “Cypher” N O O W last name = “Reagan” S N K name = “Agent Smith” version = 1.0b disclosure = secret age = 3 days language = C++ age = 6 months 2 2 name = “Trinity”

  30. Code (2): Traversing a node space // Instantiate a traverser that returns Mr Anderson's friends Traverser friendsTraverser = mrAnderson.traverse( Traverser.Order.BREADTH_FIRST, StopEvaluator.END_OF_GRAPH, ReturnableEvaluator.ALL_BUT_START_NODE, RelTypes.KNOWS, Direction.OUTGOING ); // Traverse the node space and print out the result System.out.println( "Mr Anderson's friends:" ); for ( Node friend : friendsTraverser ) { System.out.printf( "At depth %d => %s%n", friendsTraverser.currentPosition().getDepth(), friend.getProperty( "name" ) ); }

  31. name = “The Architect” name = “Morpheus” rank = “Captain” 42 42 occupation = “Total badass” name = “Thomas Anderson” age = 29 disclosure = public KNOWS KNOWS CODED_BY K 1 1 7 3 7 3 N O W S 13 13 S K W name = “Cypher” N O O W last name = “Reagan” S N K name = “Agent Smith” version = 1.0b disclosure = secret age = 3 days language = C++ age = 6 months 2 2 $ bin/start-neo-example name = “Trinity” Mr Anderson's friends: At depth 1 => Morpheus friendsTraverser = mrAnderson.traverse( At depth 1 => Trinity Traverser.Order. BREADTH_FIRST , At depth 2 => Cypher StopEvaluator. END_OF_GRAPH , ReturnableEvaluator. ALL_BUT_START_NODE , At depth 3 => Agent Smith RelTypes. KNOWS , $ Direction. OUTGOING );

  32. Example: Friends in love? name = “The Architect” name = “Morpheus” rank = “Captain” 42 42 occupation = “Total badass” name = “Thomas Anderson” age = 29 disclosure = public KNOWS KNOWS CODED_BY 1 1 7 3 K 7 3 N O W S 13 13 S K W name = “Cypher” N O O W last name = “Reagan” S N K name = “Agent Smith” version = 1.0b L disclosure = secret O V language = C++ age = 6 months E S 2 2 name = “Trinity”

  33. Code (3a): Custom traverser // Create a traverser that returns all “friends in love” Traverser loveTraverser = mrAnderson.traverse( Traverser.Order.BREADTH_FIRST, StopEvaluator.END_OF_GRAPH, new ReturnableEvaluator() { public boolean isReturnableNode( TraversalPosition pos ) { return pos.currentNode().hasRelationship( RelTypes.LOVES, Direction.OUTGOING ); } }, RelTypes.KNOWS, Direction.OUTGOING );

  34. Code (3a): Custom traverser // Traverse the node space and print out the result System.out.println( "Who’s a lover?" ); for ( Node person : loveTraverser ) { System.out.printf( "At depth %d => %s%n", loveTraverser.currentPosition().getDepth(), person.getProperty( "name" ) ); }

Download Presentation
Download Policy: The content available on the website is offered to you 'AS IS' for your personal information and use only. It cannot be commercialized, licensed, or distributed on other websites without prior consent from the author. To download a presentation, simply click this link. If you encounter any difficulties during the download process, it's possible that the publisher has removed the file from their server.

Recommend


More recommend