Your SlideShare is downloading. ×
  • Like
GR8Conf 2011: Neo4j Plugin
Upcoming SlideShare
Loading in...5

Thanks for flagging this SlideShare!

Oops! An error has occurred.


Now you can save presentations on your phone or tablet

Available for both IPhone and Android

Text the download link to your phone

Standard text messaging rates apply

GR8Conf 2011: Neo4j Plugin



Published in Technology
  • 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


Total Views
On SlideShare
From Embeds
Number of Embeds



Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

    No notes for slide


  • 1. Grails and Neo4jStefan Armbruster gr8confCPH, 2011 May 19th
  • 2. About myself● located in Munich/Germany● freelancer since 10 years● cofounder of Netjay● Java +10 years, Groovy ~5 years, Grails 3+ years● author of some Grails plugins● cofounder of the usergroup in Munich● passionate volunteer firefighter● twitter: darthvader42●
  • 3. Whats wrong with SQL?Whats about the hype of NoSQL?
  • 4. 4 trendsmuch larger data sets:● ● IDC comparison: 2010 to 2007 is 40 : 1data gets more connected●semi-structured data●horizontal scalability – distributed architecture●
  • 5. One size fits all?
  • 6. exploring the nosql-landscapeKey-Value: Bigtable:➢ RIAK * ➢ Hadoop / Hbase *➢ Redis * ➢ SimpleDB➢ Membase ➢ Cassandra **Document:Document Graph:➢ CouchDB * ➢ InfiniteGraph➢ Mongo * ➢ Neo4j * *: GORM compliant implementation, **: Grails support without GORM
  • 7. nosql is not the silver bullet
  • 8. neo4j basic building blocks 1) nodes 2) relationships3) properties on both, nodes and relationship thats it!
  • 9. neo4j
  • 10. querying neo4jsimple way: navigate the relationships●more powerful: use a traverser with callbacks for● ● decide where to end ● decide if node should be part of the result
  • 11. SQL querying vs traversingSQL challenge: SQL statement that retrieves friends up to nth grade. Anyone?Neo4j: using a traverser: Node node = // retrieve the starting poing def myFriendsAndFriends = node.traverse( BREADTH_FIRST, { it.depth()<3 } as StopEvaluator, { true } as RetrunableEvaluator, DynamicRelationshipType.withName(friend), Direction.OUTGOING ).allNodes
  • 12. query performancesome benchmark data: – each Person has 50 friends in avg Database # persons query time Relational 1.000 2000 ms Neo4j 1.000 2 ms Neo4j 1.000.000 2 ms
  • 13. accessing the databaseChoosing an implementation of GraphDatabase: ● EmbeddedGraphDatabase: just local to JVM ● RestGraphDatabase ( ● HighAvailableGraphDatabase: uses Zookeeper
  • 14. neo4j - Licensing3 editions:community: GPL or $advanced: AGPL or $enterprise: AGPL or $
  • 15. history of nosql & neo4j for Grailsend 2009: first version of neo4j pluginduring 2010: GORM for nosql – inconsequential -> spring-data-mappingend 2010: spring-data-graph – aspectj based injection of JPA like methods – focussed at Roo an POWAs – "not the right approach for Grails" (IMHO)May 2011: Neo4j for Grails using spring-data- mapping
  • 16. GORM: spring-data-mappingprovides abstraction layer●TCK●various implementations:● ● hibernate, jpa ● gemfire, redis, riak ● mongo, jcr ● neo4j <- the new child on the block
  • 17. dependencies
  • 18. interfaces/abstract base classes in GORM● Datastore: ● create sessions ● manage connection to low-level storage● MappingContext: ● holds metainformation about mapping domain classes to the underlying datastore (type conversion, list of EntityPersisters,...)● EntityPersister: ● does the dirty work: interact with low level datastore● Session: ● similar HibernateSession● Query: ● knows how to query the datastore by criteria (criterion, projections,...)
  • 19. mapping domain model to nodespace reference node domain class subreference subreference node domain class instance instance domain instance properties property association
  • 20. praying to the demo god....
  • 21. currently working in neo4j pluginpassing >90% of GORM TCK (hurray!)●accessing embedded, REST and [HA datasources]●property type conversion●access to native API●<DomainClass>.traverseStatic, <instance>.traverse●
  • 22. currently not working in neo4j pluginnasty bug: some trouble if a domain class● references itself -> StackOverflowExceptionTransactions●Optimistic Locking●Query performance not as good as could be●Indexing●
  • 23. roadmap● Write docs & publish● Handle relationship to self (Neo4j 1.4?)● Support for arbitrary attributes● Support for indexing (and its usage in criteria queries)● Embed some controller/servlet to visually navigate the nodespace (SVG?)● Support for migrations?● ... your suggestions?
  • 24. Q&A
  • 25. Referencesgeneral overview of nosql: – grails plugin: – source: – issues: running grails w/ neo4j: http://www.fanorakel.demy blog:,twitter: darthvader42