Grails and Neo4j
Upcoming SlideShare
Loading in...5

Grails and Neo4j



Talk given at 2011 regarding integrating Neo4j as a full GORM compliant Datastore for Grails applications.

Talk given at 2011 regarding integrating Neo4j as a full GORM compliant Datastore for Grails applications.



Total Views
Views on SlideShare
Embed Views



3 Embeds 13 9 3 1



Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
Post Comment
Edit your comment

Grails and Neo4j Grails and Neo4j Presentation Transcript

  • Grails and Neo4jStefan Armbruster gr8confCPH, 2011 May 19th
  • 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●
  • Whats wrong with SQL?Whats about the hype of NoSQL?
  • 4 trendsmuch larger data sets:● ● IDC comparison: 2010 to 2007 is 40 : 1data gets more connected●semi-structured data●horizontal scalability – distributed architecture●
  • One size fits all?
  • 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
  • nosql is not the silver bullet
  • neo4j basic building blocks 1) nodes 2) relationships3) properties on both, nodes and relationship thats it!
  • neo4j
  • 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
  • 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
  • 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
  • accessing the databaseChoosing an implementation of GraphDatabase: ● EmbeddedGraphDatabase: just local to JVM ● RestGraphDatabase ( ● HighAvailableGraphDatabase: uses Zookeeper
  • neo4j - Licensing3 editions:community: GPL or $advanced: AGPL or $enterprise: AGPL or $
  • 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
  • GORM: spring-data-mappingprovides abstraction layer●TCK●various implementations:● ● hibernate, jpa ● gemfire, redis, riak ● mongo, jcr ● neo4j <- the new child on the block
  • dependencies
  • 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,...)
  • mapping domain model to nodespace reference node domain class subreference subreference node domain class instance instance domain instance properties property association
  • praying to the demo god....
  • 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●
  • 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●
  • 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?
  • Q&A
  • Referencesgeneral overview of nosql: – grails plugin: – source: – issues: running grails w/ neo4j: http://www.fanorakel.demy blog:,twitter: darthvader42