title: Architecting a Neo4j-Based Application - stick to vanilla API using plain nodes & relationships or use Spring/GORM?
body: <p>I'm hoping to hear from any of you who have architected and implemented a decent sized Neo4j app (10's millions nodes/rels) - and what your recommendations are particularly w.r.t modelling and the various APIs (vanilla java/groovy Neo4j vs Spring-Data-Neo4j vs Grails GORM/Neo4j).</p>
  
  <p>I'm interested if it actually pays off to add the extra OGM (object-graph-mapping) layer and associated abstractions?</p>
  
  <p>Has anyone's experience been that it is best to stick to 'plain' graph-modelling with nodes+properties, relationships+properties, traversals and (e.g.) Cypher to model and store their data?</p>
  
  <p>My concern is that 'forcing' a particular OGM abstraction onto a graph database will affect future flexibility in adapting/changing the domain model and/or flexibility in querying the data.</p>
  
  <p>We're a Grails shop, and I have experimented with GORM/Neo4J and also with spring-data-neo4j.</p>
  
  <p>The primary purpose for the dataset will be to model and query relationships amongst v.large numbers of people, their aliases, their associates and all sorts of criminal activity and history. There will be more than 50 main domain classes. There must be flexibility in the model (which will need to evolve rapidly in the early phases of the project) and in speed and flexibility of querying.</p>
  
  <p>I have to confess, I'm struggling to find a compelling reason to use a OGM layer when I can use (e.g.) POJOs or POGOs, a little Groovy magic and some simple hand-rolled domain object &lt;-> node/relationship mapping code. As far as I can tell, I think I would be happy just dealing with nodes &amp; traversals &amp; Cypher (aka KISS). But I would be very happy to hear others' experiences and recommendations.</p>
  
  <p>Thanks for your time &amp; thoughts,</p>
  
  <p>TP</p>