

Graphing a Lesson-Learned Database for NASA Using Neo4j, RStudio, and Linkurious - jvilledieu
http://neo4j.com/blog/nasa-lesson-learned-database-using-neo4j-linkurious/

======
grandalf
I have really enjoyed using neo4j. In my opinion the highlights are:

\- The Cypher query language is extremely expressive. I ended up being able to
represent lots of business logic succinctly using it.

\- 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.

\- So many things that are hard to discover (using other kinds of databases)
or require a separate ETL, mapreduce, etc., are straightforward cypher
queries.

\- 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.

\- Even things like security/acl metadata is naturally expressed via the
graph, so whole layers of a typical app can be abstracted quite nicely.

~~~
rudolf0
What are some advantages of Neo4j compared to the more recent OrientDB and
ArangoDB? I know Neo4j is a pure graph DB and the other 2 claim to be "multi-
paradigm", but those other 2 also claim to implement most graph functionality
anyone would want, on top of claims that they are both more performant than
Neo4j.

~~~
iamtherhino
A lot of it comes down to robustness. Neo4j has the advantage of simplicity
and maturity when compared with multi-model dbs. Multi-models, as of now, are
feature rich and reliability poor. Instead Neo4j has fewer features but just
tries to do those things really really well.

It's been in mission critical prod. environments now for nearly a decade. I'm
certain that in the future DSE, Orient, Arango, or someone like them will be
big contenders in the space. However, for the time being, I wouldn't trust
anything critical to them.

------
killface
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).

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.

I'd highly recommend learning neo4j, if for nothing but the paradigm shift it
forces you to learn.

------
nicolewhite
If you liked this, check out my RNeo4j[1] package that was used in this
analysis.

[1]
[https://github.com/nicolewhite/RNeo4j](https://github.com/nicolewhite/RNeo4j)

