Creating Your Data Model

This document explains how to model data using Graphite’s graph model.

Note This document does not cover all Graphite features or general database design principles.


Engine Setup

Note See the Quickstart guide for a complete setup walkthrough.

First, install Graphite:

pip install graphitedb

Then import it and create an engine instance:

import graphite

engine = graphite.engine()

The engine is responsible for parsing DSL definitions, storing data, and executing graph operations.


Defining Node Types

Before inserting data, define the structure of your domain. Start by identifying the core object types in your system.

In this example, we model employment relationships. The primary entities are Person and Company.

node_types = """
node Person
name: string

node Company
"""

engine.parse(node_types)

This defines:

  • A Person node type with a name field of type string.
  • A Company node type without fields.

Note You can define node types, relation types, nodes, and relations in a single .parse() call if needed.


Node Type Inheritance

Graphite supports inheritance using the from keyword. This allows you to share fields across related types.

node_types = """
node Object
price: int

node Chair from Object
height: float

node Book from Object
author: string
"""

In this example:

  • Object defines a shared price field.
  • Chair inherits price and adds height.
  • Book inherits price and adds author.

Child node types include all fields from their base types.


Defining Relation Types

Relations define how nodes connect and what data is associated with those connections.

For modeling jobs, a WORKS_AT relation is appropriate:

relation_types = """
relation WORKS_AT
Person -> Company
salary: int
"""

engine.parse(relation_types)

This defines:

  • A relation type named WORKS_AT
  • Source node type: Person
  • Target node type: Company
  • A salary field of type int

The engine enforces the source and target type constraints.


Creating Nodes

After defining types, you can create nodes using either DSL or direct engine methods.

Using DSL

engine.parse("graphite_games, Company")

engine.parse("""
database_home, Company

joe, Person, Joe
admin, Person, John
""")

Using Engine API

engine.create_node("alice", "Person", "Alice")

Each node:

  • Has a unique ID
  • Has a base type
  • Stores field values in the order defined by its type hierarchy

Creating Relations

Relations connect nodes according to relation type definitions.

Using DSL

engine.parse("""
alice -[WORKS_AT, 30000]-> graphite_games
alice -[WORKS_AT, 1000]-> database_home
""")

The DSL pattern is:

source -[RELATION_TYPE, field_values]-> target

Using Engine API

engine.create_relation("joe", "graphite_games", "WORKS_AT", 30000)

Note Undirected relations can be defined using:

source -[RELATION_TYPE, field_values]- target


Next Steps

Once your data model and data are defined, you can query the graph, traverse relationships, and perform analysis using Graphite’s APIs. These operations are covered in the next documents.