I have really enjoyed using neo4j. In my opinion the highlights are:<p>- The Cypher query language is extremely expressive. I ended up being able to represent lots of business logic succinctly using it.<p>- Domain modeling is natural and very natural. For me the key was writing a script to drop/recreate my development db from some basic fixtures to allow me to experiment with a few approaches before settling on one.<p>- So many things that are hard to discover (using other kinds of databases) or require a separate ETL, mapreduce, etc., are straightforward cypher queries.<p>- There is no need for an ORM or doing ugly manual joins in code. I am simply doing some basic data/input validation and then shipping the validated structure to a cypher query.<p>- Even things like security/acl metadata is naturally expressed via the graph, so whole layers of a typical app can be abstracted quite nicely.
I've done quite a lot of work in Neo4j, and have been quite impressed with it. With my last project (which was in the 1.9.x days), we had about 2b nodes and 4b edges, with lots of properties. It was basically being used as a social graph cache (for friend-of-friend style queries).<p>It was remarkably simple to set up, a bit harder to tune, but we ended up getting something like 5000 req/sec at <= 10ms per query sustained for several hours.<p>I'd highly recommend learning neo4j, if for nothing but the paradigm shift it forces you to learn.
If you liked this, check out my RNeo4j[1] package that was used in this analysis.<p>[1] <a href="https://github.com/nicolewhite/RNeo4j" rel="nofollow">https://github.com/nicolewhite/RNeo4j</a>