Grails and Neo4j
Upcoming SlideShare
Loading in...5
×
 

Grails and Neo4j

on

  • 5,073 views

Talk given at http://eu.gr8conf.org 2011 regarding integrating Neo4j as a full GORM compliant Datastore for Grails applications.

Talk given at http://eu.gr8conf.org 2011 regarding integrating Neo4j as a full GORM compliant Datastore for Grails applications.

Statistics

Views

Total Views
5,073
Views on SlideShare
5,060
Embed Views
13

Actions

Likes
3
Downloads
55
Comments
0

3 Embeds 13

http://paper.li 9
http://a0.twimg.com 3
http://twitter.com 1

Accessibility

Categories

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.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
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● http://blog.armbruster-it.de
  • 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 (https://github.com/jexp/neo4j-java-rest-binding) ● 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: – http://www.nosql-databases.org/http://www.neo4j.orgneo4j grails plugin: – source: https://github.com/sarmbruster/spring-data-mapping – issues: http://jira.grails.org/browse/GPNEO4Jhttps://github.com/jexp/neo4j-java-rest-bindingsite running grails w/ neo4j: http://www.fanorakel.demy blog: http://blog.armbruster-it.de,twitter: darthvader42