Data Model
As a user, you normally think in four layers: KV records, graph structure, vector embeddings, and optional semantic facts.
Entity UIDs
Use one UID for the same thing everywhere.
product UID 9001
KV: namespace products, key 9001 -> JSON bytes
Vector: index products_text_vec, entity_id 9001 -> embedding
Graph: (product:Product {uid: 9001})-[:MADE_BY]->(brand)
OWL: product rdf:type ProductClass
This shape keeps multimodal queries simple and makes result hydration predictable.
KV
KV data is namespaced by a resource/schema ID at the gRPC layer. Use KV for opaque payloads, JSON records, cached documents, and agent-readable result bodies.
resource_id: 42
key: 9001
value: bytes(JSON product document)
Use:
-
PutKeyValueandGetKeyValuefor single records. -
BulkPutKeyValueandBulkGetKeyValuefor batch paths. -
Transaction KV APIs when a KV write must commit with graph/vector changes.
Graph
Graph writes enter as graph blocks or transaction graph edges. Cypher and graph scan APIs then query the published graph state.
entity UID -> relationship -> entity UID
|
v
query with MATCH, GraphScan, or BulkNeighbors
Use graph edges for:
-
relationships and provenance,
-
explainability around vector hits,
-
anomaly motifs,
-
taxonomy and semantic context,
-
temporal/geospatial facts represented as properties or connected nodes.
Vector
Vector rows bind an entity_id to an index name and embedding.
Use separate indexes for different embedding spaces.
| Index name | Typical content |
|---|---|
|
Text embedding of product title, description, and reviews. |
|
Image embedding for product photos. |
|
Pre-fused multimodal embedding. |
|
Behavioral embedding for anomaly retrieval. |
Semantic facts
Imported ontology triples describe classes and relationships. Optional materialization adds supported inferred facts. A semantic profile connects application labels and fields to that domain vocabulary; see Import and reason over ontologies and Profiles and domain vocabulary.
Geographic observations
Geospatial indexes store append-only observations containing an event ID, entity ID, timestamp, and position. An entity may have many observations. Use the same entity UID as a graph node when you need to join tracks with graph context. Put graph and geospatial writes in one transaction when they must become visible together; see Geospatial and spatiotemporal indexing.