orientdb
OrientDB is the most versatile DBMS supporting Graph, Document, Reactive, Full-Text and Geospatial models in one Multi-Model product. OrientDB can run distributed (Multi-Master), supports SQL, ACID Transactions, Full-Text indexing and Reactive Queries.
Top Related Projects
Apache Cassandra®
The MongoDB Database
Graphs for Everyone
🥑 ArangoDB is a native multi-model database with flexible data models for documents, graphs, and key-values. Build high performance applications using a convenient SQL-like query language or JavaScript extensions.
JanusGraph: an open-source, distributed graph database
The high-performance database for modern applications
Quick Overview
OrientDB is a multi-model, open-source NoSQL database management system written in Java. It supports graph, document, key/value, and object models, making it versatile for various data storage and retrieval needs. OrientDB combines the power of graphs with the flexibility of documents and the familiarity of SQL syntax.
Pros
- Multi-model support (graph, document, key/value, object)
- SQL-like query language for ease of use
- High performance and scalability
- Built-in support for multi-master replication
Cons
- Steeper learning curve compared to some other NoSQL databases
- Limited ecosystem and community support compared to more popular databases
- Documentation can be inconsistent or outdated in some areas
- Some users report stability issues in high-load production environments
Code Examples
- Creating a new database and adding a vertex:
OrientDB orient = new OrientDB("remote:localhost", OrientDBConfig.defaultConfig());
ODatabaseSession db = orient.open("mydb", "admin", "admin");
OVertex person = db.newVertex("Person");
person.setProperty("name", "John");
person.setProperty("age", 30);
person.save();
- Performing a SQL-like query:
String query = "SELECT FROM Person WHERE age > 25";
OResultSet rs = db.query(query);
while (rs.hasNext()) {
OResult result = rs.next();
System.out.println(result.getProperty("name"));
}
rs.close();
- Creating an edge between two vertices:
OVertex person1 = db.newVertex("Person");
person1.setProperty("name", "Alice");
person1.save();
OVertex person2 = db.newVertex("Person");
person2.setProperty("name", "Bob");
person2.save();
OEdge knows = person1.addEdge(person2, "Knows");
knows.setProperty("since", new Date());
knows.save();
Getting Started
To get started with OrientDB:
- Download and install OrientDB from the official website.
- Add the OrientDB Java driver to your project's dependencies:
<dependency>
<groupId>com.orientechnologies</groupId>
<artifactId>orientdb-client</artifactId>
<version>3.2.2</version>
</dependency>
- Use the following code to connect to a local OrientDB instance:
OrientDB orient = new OrientDB("remote:localhost", OrientDBConfig.defaultConfig());
ODatabaseSession db = orient.open("mydb", "admin", "admin");
// Perform database operations here
db.close();
orient.close();
Competitor Comparisons
Apache Cassandra®
Pros of Cassandra
- Highly scalable and distributed architecture, designed for large-scale deployments
- Strong support for multi-datacenter replication and high availability
- Tunable consistency levels for read and write operations
Cons of Cassandra
- Limited support for complex queries and joins compared to OrientDB
- Steeper learning curve and more complex configuration
- Less flexible data model, primarily focused on wide-column store
Code Comparison
OrientDB (SQL-like query):
SELECT FROM Customer
WHERE city = 'New York'
AND orders.size() > 5
Cassandra (CQL):
SELECT * FROM customers
WHERE city = 'New York'
AND order_count > 5;
Note: Cassandra doesn't natively support nested queries or complex operations like orders.size()
. Additional application-level logic or denormalization would be required to achieve similar functionality.
Both databases offer their own query languages, with OrientDB providing more flexibility for complex operations within the database, while Cassandra focuses on simpler, high-performance queries suited for its distributed architecture.
The MongoDB Database
Pros of MongoDB
- Larger community and ecosystem, with more resources and third-party tools
- Better scalability for large-scale distributed systems
- More extensive documentation and official support
Cons of MongoDB
- Less flexible data model compared to OrientDB's multi-model approach
- Higher resource consumption, especially for complex queries
- Limited support for graph-based operations and relationships
Code Comparison
MongoDB query:
db.users.find({ age: { $gt: 30 } }).sort({ name: 1 }).limit(10)
OrientDB query:
SELECT FROM User WHERE age > 30 ORDER BY name LIMIT 10
Both databases offer similar querying capabilities, but OrientDB's SQL-like syntax may be more familiar to developers with relational database experience. MongoDB's query language is more JavaScript-oriented, which can be advantageous for developers working primarily with Node.js or similar environments.
OrientDB's multi-model approach allows for more complex data relationships and graph-based queries, while MongoDB excels in document-based operations and distributed scalability. The choice between the two depends on specific project requirements, team expertise, and the nature of the data being stored and queried.
Graphs for Everyone
Pros of Neo4j
- More mature and widely adopted graph database with a larger community
- Powerful Cypher query language optimized for graph operations
- Robust enterprise features and scalability options
Cons of Neo4j
- Proprietary license for enterprise features
- Steeper learning curve for developers new to graph databases
- Higher resource requirements for large-scale deployments
Code Comparison
Neo4j (Cypher query):
MATCH (p:Person)-[:KNOWS]->(f:Person)
WHERE p.name = 'Alice'
RETURN f.name
OrientDB (SQL-like query):
SELECT expand(out('KNOWS').name) FROM Person WHERE name = 'Alice'
Both databases offer graph capabilities, but Neo4j focuses solely on graph data models, while OrientDB supports multiple data models (document, key-value, graph). Neo4j's Cypher language is more expressive for graph queries, whereas OrientDB's SQL-like syntax may be more familiar to some developers. OrientDB provides more flexibility in data modeling, but Neo4j excels in pure graph operations and has a more extensive ecosystem of tools and integrations.
🥑 ArangoDB is a native multi-model database with flexible data models for documents, graphs, and key-values. Build high performance applications using a convenient SQL-like query language or JavaScript extensions.
Pros of ArangoDB
- Multi-model database supporting key/value, document, and graph data models
- Native support for JavaScript and AQL (ArangoDB Query Language)
- Built-in web interface for administration and query execution
Cons of ArangoDB
- Steeper learning curve due to its multi-model nature
- Less mature ecosystem compared to OrientDB
- Higher memory consumption, especially for large datasets
Code Comparison
ArangoDB query example:
FOR user IN users
FILTER user.age >= 18
RETURN { name: user.name, age: user.age }
OrientDB query example:
SELECT name, age FROM User WHERE age >= 18
Both databases offer powerful query languages, but ArangoDB's AQL is more JavaScript-like, while OrientDB's SQL is closer to traditional SQL syntax.
Key Differences
- Data model: ArangoDB is multi-model, while OrientDB is primarily a graph database with document capabilities
- Query language: ArangoDB uses AQL, OrientDB uses SQL-like syntax
- Performance: OrientDB generally performs better for graph operations, while ArangoDB excels in document-based queries
- Scalability: Both offer horizontal scalability, but ArangoDB's clustering solution is more mature
- Community and ecosystem: OrientDB has a larger community and more third-party integrations
When choosing between these databases, consider your specific use case, data model requirements, and team expertise in graph vs. multi-model databases.
JanusGraph: an open-source, distributed graph database
Pros of JanusGraph
- Better support for distributed and scalable graph processing
- More flexible storage backend options (Cassandra, HBase, Google Cloud Bigtable)
- Stronger integration with big data ecosystems (Hadoop, Spark)
Cons of JanusGraph
- Steeper learning curve and more complex setup
- Less mature and smaller community compared to OrientDB
- Lacks built-in SQL support
Code Comparison
OrientDB query example:
SELECT FROM Person WHERE name = 'John' AND age > 30
JanusGraph query example (using Gremlin):
g.V().hasLabel('person').has('name', 'John').has('age', gt(30))
Key Differences
- OrientDB is a multi-model database (document, graph, key-value, object) while JanusGraph is primarily focused on graph data
- OrientDB offers built-in security features, while JanusGraph relies on external security implementations
- JanusGraph is better suited for large-scale, distributed graph processing, while OrientDB excels in scenarios requiring a mix of data models and ACID transactions
Both projects are open-source and actively maintained, with OrientDB having a longer history and larger user base. JanusGraph, however, has gained popularity for its scalability and integration with big data tools.
The high-performance database for modern applications
Pros of Dgraph
- Native GraphQL support, allowing for easier integration with GraphQL-based applications
- Designed for horizontal scalability, making it suitable for large-scale distributed systems
- Built-in support for full-text search and geospatial queries
Cons of Dgraph
- Less mature ecosystem compared to OrientDB, with fewer third-party tools and integrations
- Steeper learning curve for developers not familiar with GraphQL or graph databases
- Limited support for traditional SQL-like queries
Code Comparison
OrientDB query example:
SELECT FROM Person WHERE name = 'John' AND age > 30
Dgraph query example:
{
person(func: allofterms(name, "John")) @filter(gt(age, 30)) {
name
age
}
}
Both databases offer powerful querying capabilities, but OrientDB's syntax is more familiar to SQL users, while Dgraph's GraphQL-like syntax may be more intuitive for developers working with modern web applications.
OrientDB provides a multi-model database system supporting graph, document, key/value, and object models, making it more versatile for various use cases. Dgraph, on the other hand, focuses primarily on being a distributed graph database with strong consistency and horizontal scalability.
Convert designs to code with AI
Introducing Visual Copilot: A new AI model to turn Figma designs to high quality code using your components.
Try Visual CopilotREADME
OrientDB
What is OrientDB?
OrientDB is an Open Source Multi-Model NoSQL DBMS with the support of Native Graphs, Documents, Full-Text search, Reactivity, Geo-Spatial and Object Oriented concepts. It's written in Java and it's amazingly fast. No expensive run-time JOINs, connections are managed as persistent pointers between records. You can traverse thousands of records in no time. Supports schema-less, schema-full and schema-mixed modes. Has a strong security profiling system based on user, roles and predicate security and supports SQL amongst the query languages. Thanks to the SQL layer it's straightforward to use for people skilled in the Relational world.
Get started with OrientDB | OrientDB Community Group | Dev Updates | Community Chat .
Is OrientDB a Relational DBMS?
No. OrientDB adheres to the NoSQL movement even though it supports ACID Transactions and SQL as query language. In this way it's easy to start using it without having to learn too much new stuff.
Easy to install and use
Yes. OrientDB is totally written in Java and can run on any platform without configuration and installation. Do you develop with a language different than Java? No problem, look at the Programming Language Binding.
Main References
- Documentation Version < 3.2.x
- For any questions visit the OrientDB Community Group
Contributing
For the guide to contributing to OrientDB checkout the CONTRIBUTING.MD
All the contribution are considered licensed under Apache-2 license if not stated otherwise.
Licensing
OrientDB is licensed by OrientDB LTD under the Apache 2 license. OrientDB relies on the following 3rd party libraries, which are compatible with the Apache license:
- Javamail: CDDL license (http://www.oracle.com/technetwork/java/faq-135477.html)
- java persistence 2.0: CDDL license
- JNA: Apache 2 (https://github.com/twall/jna/blob/master/LICENSE)
- Hibernate JPA 2.0 API: Eclipse Distribution License 1.0
- ASM: OW2
References:
-
Apache 2 license (Apache2): http://www.apache.org/licenses/LICENSE-2.0.html
-
Common Development and Distribution License (CDDL-1.0): http://opensource.org/licenses/CDDL-1.0
-
Eclipse Distribution License (EDL-1.0): http://www.eclipse.org/org/documents/edl-v10.php (http://www.eclipse.org/org/documents/edl-v10.php)
Sponsors
Reference
Recent architecture re-factoring and improvements are described in our BICOD 2021 paper:
@inproceedings{DBLP:conf/bncod/0001DLT21,
author = {Daniel Ritter and
Luigi Dell'Aquila and
Andrii Lomakin and
Emanuele Tagliaferri},
title = {OrientDB: {A} NoSQL, Open Source {MMDMS}},
booktitle = {Proceedings of the The British International Conference on Databases
2021, London, United Kingdom, March 28, 2022},
series = {{CEUR} Workshop Proceedings},
volume = {3163},
pages = {10--19},
publisher = {CEUR-WS.org},
year = {2021}
}
Top Related Projects
Apache Cassandra®
The MongoDB Database
Graphs for Everyone
🥑 ArangoDB is a native multi-model database with flexible data models for documents, graphs, and key-values. Build high performance applications using a convenient SQL-like query language or JavaScript extensions.
JanusGraph: an open-source, distributed graph database
The high-performance database for modern applications
Convert designs to code with AI
Introducing Visual Copilot: A new AI model to turn Figma designs to high quality code using your components.
Try Visual Copilot