Java API

OrientDB is written 100% in Java. You can use the native Java APIs without any driver or adapter. Here the Javadocs.

Architecture of components

image

OrientDB provides 3 different Java APIs to work with OrientDB. Each one has pros and cons.

Which API to choose between Graph and Document? Look also at Graph-or-Document-API?.

Graph API

Use OrientDB as a Graph Database working with Vertices and Edges. Graph API is 100% compliant with TinkerPop standard.

API: Graph API

Document API

Handles records as documents. Documents are comprised of fields. Fields can be any of the types supported. Does not need a Java domain POJO, as required for the Object Database. Can be used as schema-less or schema-base modes.

API: Document API

Object API

It’s the JPA like interface where POJO are automatically bound to the database as documents. Can be used in schema-less or schema-based modes. This API hasn’t been improved since OrientDB v1.5. Please consider using Document or Graph API by writing an additional layer of mapping with your POJO. While you can use both Graph and Document APIs at the same time, the Object API is compatible with Document API, but it doesn’t work very well with the Graph API. The main reason is that you should create POJOs that mimic the Vertex and Edge classes with sub optimal performance in comparison with direct Graph API. For this reason we don’t suggest to work with Object API with a Graph domain. You could evaluate using Object Mapping on top of OrientDB Blueprints Graph API, such as TinkerPop Frames, Ferma and Totorom.

API: Object Database

What to use? Feature Matrix

Graph Document Object
API Graph API Document API Object Database
Use this if You work with graphs and want your code to be portable across TinkerPop Blueprints implementations Your domain fits better the Document Database use case with schema-less structures If you need a full Object Oriented abstraction that binds all the database entities to POJO (Plain Old Java Object)
Easy to switch from Other GraphDBs like Neo4J or Titan. If you used TinkerPop standard OrientDB is a drop-in replacement Other DocumentDB like MongoDB and CouchDB JPA applications
Java class OrientGraph ODatabaseDocumentTx OObjectDatabaseTx
Query Yes Yes Yes
Schema Less Yes Yes Yes
Schema full Yes Yes Yes
Speed* 90% 100% 50%

* Speed comparison for generic CRUD operations such as query, insertion, update and deletion. Larger is better. 100% is fastest. In general the price of a high level of abstraction is a speed penalty, but remember that Orient is orders of magnitude faster than the classic RDBMS. So using the Object Database gives you a high level of abstraction with much less code to develop and maintain.

Which library do I use?

OrientDB comes with some jar files contained in the lib directory

JAR name Description When required Depends on 3rd party jars
orientdb-core-*.jar Core library Always snappy-*.jar as optional, performance pack: orientdb-nativeos-*.jar, jna-*.jar and jna-platform-*.jar
orientdb-client-*.jar Remote client When your application talks with a remote server
orientdb-enterprise-*.jar Deprecated since v2.2. Base package with the protocol and network classes shared by client and server When your application talks with a remote server
orientdb-server-*.jar Server component It’s used by the server component. Include it only if you’re embedding a server
orientdb-tools-*.jar Contain the console and console commands Never, unless you want to execute console command directly by your application. Used by the console application
orientdb-object-*.jar Contain the Object Database interface Include it if you’re using this interface javassist.jar, persistence-api-1.0.jar
orientdb-graphdb-*.jar Contain the GraphDB interface Include it if you’re using this interface blueprints-core-*.jar
orientdb-distributed-*.jar Contain the distributed plugin Include it if you’re working with a server cluster hazelcast-*.jar