index.md 5 KB
Newer Older
1
![](images/ferma-logo-text.svg)
2

3
An ORM / OGM for the Apache TinkerPop™ graph stack.
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59

**Licensed under the Apache Software License v2**

The Ferma project was originally created as an alternative to the
TinkerPop2 Frames project. Which at the time lacked features needed by
the community, and its performance was cripplingly slow. Today Ferma is
a robust framework that takes on a role similar to an Object-relational
Model (ORM) library for traditional databases. Ferma is often referred
to as a Object-graph Model (OGM) library, and maps Java objects to
elements in a graph such as a Vertex or an Edges. In short it allows a
schema to be defined using java interfaces and classes which provides a
level of abstraction for interacting with the underlying graph.

Ferma 3.x **Supports TinkerPop3**. For tinkerPop2 support use Ferma
version 2.x.

Annotated classes in Ferma have their abstract methods implemented using
code generation during start-up with Byte Buddy, avoiding the need for
proxy classes. This in turn significantly improves performance when
compared with TinkerPop Frames and other frameworks. Ferma offers many
features including several annotation types to reduce the need for
boilerplate code as well as handling Java typing transparently. This
ensures whatever the type of the object is when you persist it to the
graph the same Java type will be used when instantiating a class off of
the graph.

Ferma is designed to easily replace TinkerPop Frames in existing code,
as such, the annotations provided by Ferma are a super-set of those
provided by TinkerPop Frames.

Ferma is built directly on top of TinkerPop and allows access to all of
the internals. This ensures all the TinkerPop features are available to
the end-user. The TinkerPop stack provides several tools which can be
used to work with the Ferma engine.

-   **Gremlin**, a database agnostic query language for Graph Databases.
-   **Gremlin Server**, a server that provides an interface for
    executing Gremlin on remote machines.
-   a data-flow framework for splitting, merging, filtering, and
    transforming of data
-   **Graph Computer**, a framework for running algorithms against a
    Graph Database.
-   Support for both **OLTP** and **OLAP** engines.
-   **TinkerGraph** a Graph Database and the reference implementation
    for TinkerPop.
-   Native **Gephi** integration for visualizing graphs.
-   Interfaces for most major Graph Compute Engines including **Hadoop
    M/R**. **Spark**, and **Giraph**.

Ferma also supports any of the many databases compatible with TinkerPop
including the following.

-   [Titan](http://thinkaurelius.github.io/titan/)
-   [Neo4j](http://neo4j.com)
-   [OrientDB](http://www.orientechnologies.com/orientdb/)
-   [MongoDB](http://www.mongodb.org)
60
-   [Oracle NoSQL](http://www.oracle.com/us/products/database/nosql/overview/index.html)
61
62
63
64
-   TinkerGraph

Ferma Javadocs:
[latest](http://www.javadoc.io/doc/com.syncleus.ferma/ferma) -
65
[3.3.1](http://www.javadoc.io/doc/com.syncleus.ferma/ferma/3.3.1) -
66
[3.3.0](http://www.javadoc.io/doc/com.syncleus.ferma/ferma/3.3.0) -
67
[3.2.1](http://www.javadoc.io/doc/com.syncleus.ferma/ferma/3.2.1) -
68
[3.2.0](http://www.javadoc.io/doc/com.syncleus.ferma/ferma/3.2.0) -
69
70
71
[3.1.0](http://www.javadoc.io/doc/com.syncleus.ferma/ferma/3.1.0) -
[3.0.3](http://www.javadoc.io/doc/com.syncleus.ferma/ferma/3.0.3) -
[3.0.2](http://www.javadoc.io/doc/com.syncleus.ferma/ferma/3.0.2) -
72
73
[3.0.1](http://www.javadoc.io/doc/com.syncleus.ferma/ferma/3.0.1) -
[3.0.0](http://www.javadoc.io/doc/com.syncleus.ferma/ferma/3.0.0) -
74
75
76
77
[2.4.0](http://www.javadoc.io/doc/com.syncleus.ferma/ferma/2.4.0) -
[2.3.0](http://www.javadoc.io/doc/com.syncleus.ferma/ferma/2.3.0) -
[2.2.2](http://www.javadoc.io/doc/com.syncleus.ferma/ferma/2.2.2) -
[2.2.1](http://www.javadoc.io/doc/com.syncleus.ferma/ferma/2.2.1) -
78
79
80
81
82
83
84
85
86
87
88
89
[2.2.0](http://www.javadoc.io/doc/com.syncleus.ferma/ferma/2.2.0) -
[2.1.0](http://www.javadoc.io/doc/com.syncleus.ferma/ferma/2.1.0) -
[2.0.6](http://www.javadoc.io/doc/com.syncleus.ferma/ferma/2.0.6) -
[2.0.5](http://www.javadoc.io/doc/com.syncleus.ferma/ferma/2.0.5) -
[2.0.4](http://www.javadoc.io/doc/com.syncleus.ferma/ferma/2.0.4) -
[2.0.3](http://www.javadoc.io/doc/com.syncleus.ferma/ferma/2.0.3) -
[2.0.2](http://www.javadoc.io/doc/com.syncleus.ferma/ferma/2.0.2) -
[2.0.1](http://www.javadoc.io/doc/com.syncleus.ferma/ferma/2.0.1) -
[2.0.0](http://www.javadoc.io/doc/com.syncleus.ferma/ferma/2.0.0)

For support please use
[Gitter](https://gitter.im/Syncleus/Ferma?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge)
90
or the [official Ferma mailing list and Discourse forum](https://discourse.qoto.org/c/PROJ/FERMA).
91

92
93
Please file bugs and feature requests on [QOTO GitLab](https://git.qoto.org/Ferma/Ferma/issues) a
reference to some older issues can be found at [Github](https://github.com/Syncleus/Ferma/issues).
94
95
96
97
98
99
100
101

Obtaining the Source
--------------------

The official source repository for Ferma is located in the Syncleus
Github repository and can be cloned using the following command.

```
102
git clone https://git.qoto.org/Ferma/Ferma.git
103
```