neo4 jv2 english
DESCRIPTION
Presentation about Neo4J API.TRANSCRIPT
Neo4jNOSQL , 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 onboth;
• Relational Databases have a very heavy languageto represent a graph in the Database. NOSQLmakes 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” 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();
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/propertieson single JVM;
• Robust
– 6+ years in 24/7 production
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”
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