OrientDB vs Neo4j

Want to learn more about OrientDB? Send us an info request using the form below and get the link to watch our OrientDB vs Neo4j webinar video.

OrientDB and Neo4j* are both Native Graph databases according to Neo4j's definition. OrientDB evolved the basic Graph Database model by creating the Multi-Model concept: a more flexible way to represent complex domains based on the graph model, but enriched with documents and objects, as well as key-values, geo-spatial, reactive and full-text data. All these models are managed by OrientDB's core (this is different from other DBMS's that add layers for additional models, resulting in decreased performance). OrientDB can be used as a pure Graph Database (as a drop in replacement for Neo4j if you used the TinkerPop standard) or as a Multi-Model, avoiding using multiple DBMS products in the same application (Polyglot Persistence). This page will outline only the most important differences.


According to an independent benchmark by Tokyo Institute of Technology and IBM Research **, OrientDB is 10X faster than Neo4j on Graph operations among all the workloads. Numbers are the throughput as operations per second. Higher is better.

Workload A – Update heavy:

A mix of 50/50 read/update workload. Read operations query a vertex V and reads all its attributes. Update operation changes the last login time.

Workload B - Read mostly:

The following graph represents a mix of 95/5 read/update workload. Those operations are similar to Workload A.

Workload D – Read latest:

Inserts new vertices to the graph. The inserts are made in such a way that the power-law relations of the original graph are preserved.

Workload E – Short ranges:

Reads all the neighboring vertices and their Vertex attributes. For example, loading the closest friend to a person in a social graph.

Try out our new Neo4j to OrientDB Importer!

Easily import your Neo4j Database to OrientDB in minutes.

“Simply, if you are open source, then Neo4j is open source; if you are closed source, then Neo4j is commercial… The choice of license is a choice in what you will do with Neo4j. If you incorporate Neo4j in a closed, proprietary project, then you require a commercial license. Importantly, it does not matter whether or how you will profit from using Neo4j” – Fair Trade Software Licensing – A Guide To Licensing Options For Neo4j.

Price and Licensing

Many make the mistake of assuming that Neo4j Community is free because it’s open-source. In the 2014 Gartner report, Neo4j’s referenced customers identified Neo’s pricing model as an issue.

It takes a lot of effort to fully understand the Neo4j pricing and licensing model. They have two product versions with a very different feature set. Neo4j Community Edition, which lacks clustering (fault tolerance), advanced caching and other important production features is GPL. Enterprise edition is available under AGPL or a paid subscription license.

In our experience, we’ve found enterprise users aren’t receptive to (A)GPL. There are too many gray areas interpreting a derivative work and they aren’t willing to risk polluting their closed-source code with an AGPL license.

With OrientDB Community, we opted for the completely permissive Apache 2 Open Source license. Free for any purpose, even commercial! We also didn’t disable the features allowing horizontal scale and fault tolerance. Cluster, shard and replicate to your heart’s content. Let your project expand globally without the fear of license restrictions. With an (A)GPL DBMS, you can embed it only if your project is open-source as well; otherwise, you need a Commercial license from Neo4j.

When it comes to pricing, we take a step forward. Not only is OrientDB Enterprise a fraction of the cost compared to Neo4J. We also utilize your resources in a more effective way. Neo4j allows only one database per server. OrientDB can host several databases per instance. We make our pricing easy and transparent. Discounts are deep for large deployments and we gladly work with OEMs on distribution friendly licenses. Browse the pricing of our Production Support and Training services. We have nothing to hide.

Operational DBMS

Most NoSQL solutions, like Neo4j, are used just as “cache” to speed up certain use cases, while the master database remains a Relational DBMS. Neo4j’s customers frequently express dissatisfaction with the product’s High Availability/Disaster Recovery capabilities.

Most NoSQL products are focused on performance and scalability while sacrificing reliability. Users don’t perceive a NoSQL DBMS as being as reliable as a Relational DBMS.

OrientDB, however, isn’t the average NoSQL DBMS. For this reason, OrientDB was the first graph database to ever appear on Gartner’s Operational DBMS Magic Quadrant back in 2013**.


Neo4j supports replication, but this is an Enterprise feature not released in the free, open-source Community Edition. Furthermore, the replication follows the Master/Slave architecture with a huge bottleneck on write operations; only one server can be the master, so the Neo4j write throughput is limited to the capacity of the single Master server. This means that Neo4j isn’t able to scale on writes.

OrientDB, instead, supports a Multi-Master + Sharded architecture: all the servers are masters. The throughput is not limited by a single server. With OrientDB, the global throughput is the sum of the throughput of all the servers.

This is also called Linear Scalability.

Query Language

Neo4j has its own Query Language, called “Cypher,” which requires training to learn a new language. OrientDB’s query language is built on SQL and is augmented with a few extensions to manipulate trees and graphs. Considering that most developers are familiar with SQL, working with OrientDB is just easier.

Look at the same query in OrientDB SQL vs Neo4j Cypher query languages to retrieve the actor’s name and their movies from the actor vertex:


Neo4j Cypher

SELECT name, out('ACTS').title
FROM Person WHERE name = 'Robin'


MATCH (actor:Person{name:'Robin'})-[:ACTS_IN]->(movie)
RETURN actor.name, movie.title

If you are coming from Neo4j and you are familiar with Cypher and Pattern Matching, you will be happy to use the OrientDB MATCH statement:


Neo4j Cypher

MATCH {class:Person, as:actor, where:(name:'Robin'))
-ACTS_IN-> {as:movie}
RETURN actor.name, movie.title


MATCH (actor:Person{name:'Robin'})
RETURN actor.name, movie.title

Complex Domains

Neo4j doesn’t support a proper schema against Vertex and Edges, but only the “label” concept to group vertices and edges of the same type. No inheritance, no polymorphism and no complex constraints, only the uniqueness of values by using indexes.

OrientDB instead supports the creation of schemas around graphs. Further, the true inheritance and polymorphism allow you to create subclasses of Vertex and Edge. For example, you can have “Customer” and “Provider” that extend the common vertex class “Account” by inheriting all of the fields. By using the schema, you can also setup complex constraints against vertices and edges properties.

Complex Types

While OrientDB supports a rich set of types, Neo4 supports only primitive types. With Neo4j, it’s not possible to store decimal numbers (amounts, currencies, salaries, etc.) without losing precision, because “float” and “double” Java types use the floating point technique. OrientDB, instead, provides the “decimal” type to handle numbers with no precision lost.

The same is for dates. Neo4j has no direct support for date types, so the management of temporal data is the responsibility of the developer that must convert it into milliseconds from 1970. OrientDB, instead, provides DATE and DATETIME types to handle dates easily.

OrientDB supports other complex types such as Binary to store BLOB (Binary Large Objects), Embedded to store embedded objects recursively, and Collections and Maps.

Deleted Records

One of the most important features of an Operational DBMS is that it shouldn’t require a restart or downtime for maintenance. Neo4j isn’t able to automatically reclaim the space of deleted records and it requires a complete restart of the server. In comparison, OrientDB automatically reuses the freed space and such operations are transparent and occur while the server is online.

Are you already using Neo4j?

Many clients have passed from Neo4j to OrientDB, join them! To try OrientDB, follow these simple steps: Import from Neo4j to OrientDB.

To discover 10 key advantages of using OrientDB, take a look at Why OrientDB? If you need OrientDB supportconsulting or training, please contact us.