ArcadeDB
Overview
ArcadeDB is a multi-model graph database that functions as the main Graph Store for the SOF Data Layer (SDL).
ArcadeDB is reachable by clicking on the Graph Store button on the SDL Frontend GUI. Alternatively, the URL will take the form of https://arcadedb.deployed_domain
ArcadeDB serves queries and commands in the following languages: 1. [SQL](https://docs.arcadedb.com#SQL) (from OrientDB SQL) 2. Neo4j [Cypher (Open Cypher)](https://docs.arcadedb.com#Cypher) 3. [Apache Gremlin (Apache Tinkerpop v3.7.x)](https://docs.arcadedb.com#Gremlin-API) 4. [GraphQL Language](https://docs.arcadedb.com#GraphQL)
From the ArcadeDb GUI, you’ll see a query dropdown to the immediate left of the query window. Use that to change languages.
You may see MongoDB listed in the Arcade UI, but it is deprecated and will be removed soon. More information about their language support and syntax may be found here. https://docs.arcadedb.com/
Recommend language
SDL recommends using Gremlin as the graph query lanuage. It provides the most features, least verbosity, and best performance.
Apache Gremlin
Gremlin is a graph traversal language that allows you to express complex graph operations in a readable format. It’s part of the Apache TinkerPop graph computing framework and provides a powerful way to query and manipulate graph data.
Basic Gremlin Concepts
-
Vertices (V): Nodes in the graph
-
Edges (E): Relationships between vertices
-
Properties: Key-value pairs attached to vertices or edges
-
Labels: Categories/types for vertices and edges
-
Traversals: The process of moving through the graph
Common Gremlin Commands
// Get all vertices
g.V()
// Get all edges
g.E()
// Get all verticies, and load all edges in both directions
g.V().bothE()
// Find vertices by property
g.V().has('firstName', 'Enzo')
// Find vertices by label
g.V().hasLabel('People')
// Create a new vertex
g.addV('People')
.property('firstName', 'Enzo')
.property('lastName', 'Ferrari')
// Create an edge between vertices
g.V().has('firstName', 'Enzo')
.addE('LivesIn')
.to(g.V().has('name', 'Italy'))
// Find connected vertices (who lives where?)
g.V().has('firstName', 'Enzo')
.out('LivesIn')
.values('name')
Classification Markings
Arcade is configured to provide object level filtering of graph nodes and edges for each user’s clearance levels.
Arcade currently enforces the classification markings of any objects created or updated by end users. Users are only permitted to create classification markings within the classification of the graph, and only within their own clearance and attribution levels. (A Secret cleared user cannot create a TS object).
Arcade follows the BlackCape ISM model.