Neo4j
                 NOSQL , Graph Databases and Neo4j
                           Thiago Oliveira
http://about.me/thiagooliveira
@tjsoliveira
Agenda


• NOSQL
• Graph Databases
• Neo4j
NOSQL Overview

• NoSQL is NOT “Never SQL”
• NoSQL is NOT “No To SQL”

• NoSQL is simply

         “Not Only SQL”
Graph Database
• Inspired by Graph Theory;

• Data model: Nodes, relationships, properties on
  both;

• Relational Databases have a very heavy language
  to represent a graph in the Database. NOSQL
  makes it more easy!

• Neo4j
Neo4j
Creating a Node
//Create Thomas “Neo” Anderson
Node mrAnderson = db.createNode();
mrAnderson.setProperty( “name”, “Thomas Anderson” );
mrAnderson.setProperty( “age”, 29 );

//Create Morpheus
Node morpheus = db.createNode();
morpheus.setProperty( “name”, “Morpheus” );
morpheus.setProperty( “rank”, “Captain” );
morpheus.setProperty( “occupation”, “Total bad ass” );


//Create a relationship between Neo and Morpheus
mrAnderson.createRelationship( morpheus, RelTypes.KNOWS );
Creating a Node
Transaction tx = db.beginTx();

//Create Thomas “Neo” Anderson
Node mrAnderson = db.createNode();
mrAnderson.setProperty( “name”, “Thomas Anderson” );
mrAnderson.setProperty( “age”, 29 );

//Create Morpheus
Node morpheus = db.createNode();
morpheus.setProperty( “name”, “Morpheus” );
morpheus.setProperty( “rank”, “Captain” );
morpheus.setProperty( “occupation”, “Total bad ass” );

//Create a relationship between Neo and Morpheus
mrAnderson.createRelationship( morpheus, RelTypes.KNOWS );

tx.commit();
Defining Relationships
//Creating a interface! (Low Coupling)
public interface RelationshipType {
    public String getName();;
}
//Creating my Relationship
public class MyRelationship implements RelationshipType {
    private final string name;
    MyRelationship(String name){ this.name = name; }
    public String getName(){ return this.name; }
}
//Or simply:
public enum MyRelationship implements RelationshipType {
    KNOWS, WORKS_FOR,
}
Travesing a Node space
//Creating a interface! (Low Coupling)
Traverser friendsTraverser = mrAnderson.traverse (
   Traverser.Order..BREADTH_FIRST,
   StopEvaluator.END_OF_GRAPH,
   RelTypes.KNOWS,
   Direction.OUTGOING );
//Traverse the node space and print out the result
System.out.println( “Mr Anderson Friends:” );
for ( Node friend: friendsTraverser ) {
     friend.getProperty( “name” );
}
Main Characteristics

• Scales Up
  – Serveral billions of nodes/relationships/properties
    on single JVM;


• Robust
  – 6+ years in 24/7 production
Conclusions
• Why NoSQL and Neo4j?
  – Massive data stores;
  – Scalability;
  – Some services simpler to implement than using
    Relational Databases;

• Why NOT NoSQL and Neo4j?
  – Relational Databases are mature;
  – Data consistency, transactions
  – “Don’t scale until you need it”
Questions?
References
• http://www.slideshare.net/harrikauhanen/nosql-
  3376398 - NoSql Databases – Harri Kauhanen
  (2010-03-09)

• http://www.slideshare.net/emileifrem/nosql-
  east-a-nosql-overview-and-the-benefits-of-graph-
  databases - Neo4j – Emil Eifrem (2009)

• http://wiki.neo4j.org

Neo4 jv2 english

  • 1.
    Neo4j NOSQL , Graph Databases and Neo4j Thiago Oliveira http://about.me/thiagooliveira @tjsoliveira
  • 2.
    Agenda • NOSQL • GraphDatabases • Neo4j
  • 3.
    NOSQL Overview • NoSQLis NOT “Never SQL” • NoSQL is NOT “No To SQL” • NoSQL is simply “Not Only SQL”
  • 4.
    Graph Database • Inspiredby Graph Theory; • Data model: Nodes, relationships, properties on both; • Relational Databases have a very heavy language to represent a graph in the Database. NOSQL makes it more easy! • Neo4j
  • 5.
  • 6.
    Creating a Node //CreateThomas “Neo” Anderson Node mrAnderson = db.createNode(); mrAnderson.setProperty( “name”, “Thomas Anderson” ); mrAnderson.setProperty( “age”, 29 ); //Create Morpheus Node morpheus = db.createNode(); morpheus.setProperty( “name”, “Morpheus” ); morpheus.setProperty( “rank”, “Captain” ); morpheus.setProperty( “occupation”, “Total bad ass” ); //Create a relationship between Neo and Morpheus mrAnderson.createRelationship( morpheus, RelTypes.KNOWS );
  • 7.
    Creating a Node Transactiontx = db.beginTx(); //Create Thomas “Neo” Anderson Node mrAnderson = db.createNode(); mrAnderson.setProperty( “name”, “Thomas Anderson” ); mrAnderson.setProperty( “age”, 29 ); //Create Morpheus Node morpheus = db.createNode(); morpheus.setProperty( “name”, “Morpheus” ); morpheus.setProperty( “rank”, “Captain” ); morpheus.setProperty( “occupation”, “Total bad ass” ); //Create a relationship between Neo and Morpheus mrAnderson.createRelationship( morpheus, RelTypes.KNOWS ); tx.commit();
  • 8.
    Defining Relationships //Creating ainterface! (Low Coupling) public interface RelationshipType { public String getName();; } //Creating my Relationship public class MyRelationship implements RelationshipType { private final string name; MyRelationship(String name){ this.name = name; } public String getName(){ return this.name; } } //Or simply: public enum MyRelationship implements RelationshipType { KNOWS, WORKS_FOR, }
  • 9.
    Travesing a Nodespace //Creating a interface! (Low Coupling) Traverser friendsTraverser = mrAnderson.traverse ( Traverser.Order..BREADTH_FIRST, StopEvaluator.END_OF_GRAPH, RelTypes.KNOWS, Direction.OUTGOING ); //Traverse the node space and print out the result System.out.println( “Mr Anderson Friends:” ); for ( Node friend: friendsTraverser ) { friend.getProperty( “name” ); }
  • 10.
    Main Characteristics • ScalesUp – Serveral billions of nodes/relationships/properties on single JVM; • Robust – 6+ years in 24/7 production
  • 11.
    Conclusions • Why NoSQLand Neo4j? – Massive data stores; – Scalability; – Some services simpler to implement than using Relational Databases; • Why NOT NoSQL and Neo4j? – Relational Databases are mature; – Data consistency, transactions – “Don’t scale until you need it”
  • 12.
  • 13.
    References • http://www.slideshare.net/harrikauhanen/nosql- 3376398 - NoSql Databases – Harri Kauhanen (2010-03-09) • http://www.slideshare.net/emileifrem/nosql- east-a-nosql-overview-and-the-benefits-of-graph- databases - Neo4j – Emil Eifrem (2009) • http://wiki.neo4j.org