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)

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/

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).

Objects can have a general classification marked like the following:

{
  id: 12345,
  name: Joe Smith,
  ...
  classification: {
    general: 'S'
  }
}

Or objects can use source based classification markings:

{
  id: 12345,
  name: Joe Smith,
  ...
  sources: {
    1: (S) IIR 325395,
    ...
  }
}

Quick start SQL commands

Create a new vertex type

CREATE VERTEX TYPE People

Create a new edge type

CREATE EDGE TYPE LivesIn

Create a vertex

INSERT INTO People CONTENT
{
  firstName: 'Enzo',
  lastName: 'Ferrari',
  classification: { general: 'S'}
}
INSERT INTO Location CONTENT
{
  name: 'Richmond',
  type: 'City',
  classification: {
    general: 'U'
  }
}

Create an edge referencing existing nodes by sub queries

CREATE EDGE LivesIn
FROM (SELECT FROM People WHERE firstName = 'Enzo') TO
     (SELECT FROM Location WHERE name = 'Richmond')
CONTENT {
  sources: {
    '1': '(S//NF) IIR 12345'
  }
}

View nodes matching a where clause

SELECT FROM People WHERE firstName = 'Enzo'