What can an RDBMS do that Neo4j (and graph databases) cant? What can an RDBMS do that Neo4j (and graph databases) cant? database database

What can an RDBMS do that Neo4j (and graph databases) cant?


This is an extremely broad topic covering everything from modeling and implementation to IT and support. It's impossible to really answer all those questions here, especially without details on your situation. However, you seem to be exploring options and avenues. So, I'll just pass on some general food for thought as someone that's implemented a number of systems.

Everybody seems to think their new database paradigm is a replacement for relational databases. So, take those claims with a grain of salt.

I like to think in terms of 3 fundamental models: Relational, Document, and Graphing. Depending on your problem space one or even more of these is the right answer. I would not do financial transactions in anything but relational (SQL Based). If you are building a CMS, then a Document DB is the way to go. If my application is modeling networks (roads, people, connections, networks etc.) I use Neo4J.

As far as production quality, there are solid options in each category. Relational has a bunch. For document databases I'd go MongoDB or a higher level JCR system like Apache Jackrabbit. For graphing, I only have experience with Neo4j and it is rock solid for me.

Whatever you do, don't buy into the hype that "We have the one technology that solves all your problems." It's not there and it narrows your thinking.


I 'm convinced Neo4j is a good replacement for relational databases by now.

  • It is ACID compliant
  • Though the community version lacks some features like hot backups, the enterprise edition has
  • You can get support for it
  • At first sight (and in the new releases where you don't need a START clause) its query language CYPHER can do almost anything SQL can

but

  • it's harder to find a CYPHER developer than a SQL one
  • and it does not have an equivalent optimizer: it matters more than with SQL how you write the query

Though it supports replication and Neo explicitly markets it as a big data product, I can't confirm it is scalable enough and I did not study security aspects.

In recent releases (younger that the question above), one can define indexes on labels, which work like indexes on tables in a relational DB, allowing for O(log(n)) lookups.

(fyi: Neo4j has no tables, but each node(~=row) can have different labels, comparable to gmail labels. This is more flexible: you don't have to chose whether you put cars and bicycles in one for vehicles table or not: a bicycle would have both a :vehicle and a :bicycle label.)

To answer the original question: Neo4j does hardly support for schema enforcement. Neo advices implementing automated consistency tests on your database, which you run on your acceptance test instance as part of your release cycle.


Using an enterprise db such as oracle will give you many, many features which may or may not be part of neo. These include:

  • ACID transactions
  • High availability / backups / standby
  • ability to use sql to get data in the most efficient way using a cost based optimizer - the db determines the best way to retrieve the data based on your latest statistics
  • Scalability, partitioning
  • support
  • security

If you are going to implement most of the functionality of your application in code by yourself and don't require the structure and advanced features offered by an rdbms or if your data structures are better suited to a graph based db then by all means trial neo. There is a reason that most corporate apps use a one of the traditional rdbms servers but this may not always be the case in the future