neo4 jv2 english

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

Upload: thiago-oliveira

Post on 14-Jan-2015

1.022 views

Category:

Technology


0 download

DESCRIPTION

Presentation about Neo4J API.

TRANSCRIPT

Page 1: Neo4 jv2 english

Neo4jNOSQL , Graph Databases and Neo4j

Thiago Oliveira

http://about.me/thiagooliveira@tjsoliveira

Page 2: Neo4 jv2 english

Agenda

• NOSQL

• Graph Databases

• Neo4j

Page 3: Neo4 jv2 english

NOSQL Overview

• NoSQL is NOT “Never SQL”

• NoSQL is NOT “No To SQL”

• NoSQL is simply

“Not Only SQL”

Page 4: Neo4 jv2 english

Graph Database

• Inspired by Graph Theory;

• Data model: Nodes, relationships, properties onboth;

• Relational Databases have a very heavy languageto represent a graph in the Database. NOSQLmakes it more easy!

• Neo4j

Page 5: Neo4 jv2 english

Neo4j

Page 6: Neo4 jv2 english

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 );

Page 7: Neo4 jv2 english

Creating a Node

Transaction tx = db.beginTx();

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

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

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

tx.commit();

Page 8: Neo4 jv2 english

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,

}

Page 9: Neo4 jv2 english

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” );

}

Page 10: Neo4 jv2 english

Main Characteristics

• Scales Up

– Serveral billions of nodes/relationships/propertieson single JVM;

• Robust

– 6+ years in 24/7 production

Page 11: Neo4 jv2 english

Conclusions

• Why NoSQL and Neo4j?– Massive data stores;

– Scalability;

– Some services simpler to implement than usingRelational Databases;

• Why NOT NoSQL and Neo4j?– Relational Databases are mature;

– Data consistency, transactions

– “Don’t scale until you need it”

Page 12: Neo4 jv2 english

Questions?

Page 13: Neo4 jv2 english

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