# What is GMA graph?

All the [entities](entity.md) and [relationships](relationship.md) are stored in a graph database, Neo4j.
The graph always represents the current state of the world and has no direct support for versioning or history.
However, as stated in the [Metadata Modeling](../modeling/metadata-model.md) section,
the graph is merely a derived view of all metadata [aspects](aspect.md) thus can always be rebuilt directly from historic [MAEs](mxe.md#metadata-audit-event-mae).
Consequently, it is possible to build a specific snapshot of the graph in time by replaying MAEs up to that point.

In theory, the system can work with any generic [OLTP](https://en.wikipedia.org/wiki/Online_transaction_processing) graph DB that supports the following operations:

- Dynamical creation, modification, and removal of nodes and edges
- Dynamical attachment of key-value properties to each node and edge
- Transactional partial updates of properties of a specific node or edge
- Fast ID-based retrieval of nodes & edges
- Efficient queries involving both graph traversal and properties value filtering
- Support efficient bidirectional graph traversal
