GraphGists

Gentics Mesh Domain Model

Intro

This graph gist is used to document the Gentics Mesh graph database structure. The graph contains concepts for authentication handling, versioning and user/role/group management.

Root Tree

The MeshRootImpl vertex is the root for the mesh graph data structure. Only a single MeshRootImpl exists in the whole graph. Various aggregation vertices are connected to the mesh root vertex.

Node Root

There are multiple node root vertices. One is attached to the central mesh root and each project also has its own node root vertex.

Tag Root

There are multiple tag root vertices. One central one is connected to the mesh root vertex (MeshRootImpl) and additional ones are created for each tag family.

TagFamily Root

There are multiple tag family root vertices. One central which is connected to the mesh root vertex and additional tag family root vertices are created for each project.

Tag relationships to other elements (nodes, projects)

Project Root

The project root vertex is used to aggregate all project vertices.

User/Group/Role Root

Each element type (user, role, group) has its own root aggregation vertex. Users are assigned to groups and roles are assigned to groups. The additional ASSIGNED_TO_ROLE edge is a shortcut edge which improves performance.

User Node References

A user can reference a single node in order to construct the nodeReference information.

Permissions

Gentics Mesh uses a document based permission system. Permissions are created in between roles and mesh elements such as tags, projects, nodes, tag families.

Schema Root

Changelog Root

The changelog root aggregation vertex is used to list all applied changelog entries. Each connected change vertex contains information about executed graph changelog actions. This way the mesh installation can determine which changes have already been executed.

Node With Fields

A node can have multiple graph field containers. A graph field container represents the content of the node for a specific language, release and version. The edge HAS_FIELD_CONTAINER contains additional information in order to identify the language, release, and type of the field container. A field container can represent the latest draft version, the current published version or any older version of the graph field container.

  • HAS_FIELD_CONTAINER: edgeType, releaseUuid, languageTag

Node Relationships

Tag relationships to other elements (nodes, projects)

Node Fields

There are three types of field elements in mesh.

  1. Basic Field Types such as:

    • StringFieldImpl

    • DateFieldImpl

    • NumberFieldImpl

    • BooleanFieldImpl

    • HtmlFieldImpl

These field types are mapped to properties of the field container and thus don’t require additional vertices, edges.

  1. Referencing field types such as:

    • MicronodeField

    • NodeField

These field types create edges to the referenced element (e.g.: a NodeImpl vertex or a MicronodeImpl)

  1. Complex field types such as:

    • All kind of lists

These field types require additional vertices which are used to store the information.

Schema Versions

  • SchemaContainerVersionImpl: version

Releases

A release is a bundle of specific schema container version vertices.

Node Versioning

The displayed node has two field container. One which is represents the latest version of the node content and one which represents the previous version. One of those field containers is connected to two field vertices. This means that the old field (DateGraphFieldListImpl) did not change in the previous revision and was thus reused. The date list field would not be reused if a modification had been detected in the fields content in between both versions.

Node Hierarchy

The project node tree structure is build using the HAS_PARENT_NODE relationship.