Knowledge Graphs

Property Graphs Guide

Production guide to labeled property graphs - the LPG data model, Neo4j/Memgraph/Neptune patterns, and why property graphs are not full knowledge graphs.

55 min readIntermediateLast reviewed: 20 July 2026
PrerequisitesKnowledge Graphs

Quick Summary

Property graphs store labeled nodes and typed relationships with native properties—the developer-first graph model, but not a complete knowledge graph alone.

One Analogy

A property graph is a warehouse optimized for fast internal forklift routes; RDF is the shipping-container standard for data arriving from other ports.

Engineering Rule

Index business keys, cap traversal depth, govern labels—and if you need global semantics, add an RDF ontology layer.

TL;DR

  • A property graph has labeled nodes and relationships, each carrying key-value properties—the model Neo4j popularized and openCypher standardizes.

  • Property graphs are not full knowledge graphs. A KG requires shared semantics, governance, and validation. An LPG database without ontology discipline, schema registry, and stewardship is a graph database—not an enterprise KG.

  • Relationships are first-class with properties[:TRANSFERRED {amount: 500, currency: "USD", timestamp: ...}] without RDF reification workarounds.

  • Optimized for traversals and pattern matching via Cypher—path queries are the primary access pattern.

  • Choose property graphs over RDF when developer ergonomics, analytics traversals, and native edge metadata dominate over W3C linked-data interoperability.

Why This Matters

Most engineers first encounter graphs through Neo4j tutorials showing (User)-[:FOLLOWS]->(User). That ASCII-art pattern is the labeled property graph (LPG) model—and it maps directly to how developers think about application data.

Consider fraud detection: find accounts sharing a device fingerprint, transferring funds within 24 hours, with no direct KNOWS relationship. In a property graph, this is a Cypher pattern match with filters on edge properties. In RDF, edge properties require RDF-star or reification—workable but verbose.

Property graphs dominate operational use cases:

  • Recommendation engines — product affinity, "people you may know" traversals.

  • Network and IT operations — service dependency maps with latency metadata on edges.

  • Identity and access graphs — users, groups, resources, permissions as paths.

  • AI entity graphs — extracted entities queried by GraphRAG, often paired with vector RAG for document context.

If your team writes application code against a graph daily, LPG reduces friction compared to RDF triple decomposition. But when partners must merge data by URI, or OWL inference is required, add an RDF layer—see RDF vs Property Graphs.

The Problem

Awkward relationship metadata in tabular models. A transfers table with (from_id, to_id, amount, timestamp, channel) works for aggregations but makes multi-hop path queries expensive. In an LPG, TRANSFERRED carries those properties—traversal and metadata travel together.

ORM impedance mismatch. Object graphs in code (user.posts.comments) don't map cleanly to normalized SQL. Property graphs store the object graph natively.

Real-time path analytics. "Shortest path between services avoiding deprecated nodes" or "all cycles involving this account" are core graph algorithms with millisecond traversals when properly indexed.

Confusing graph database with knowledge graph. Teams deploy Neo4j, add nodes and edges, and call it a KG—but without label conventions, property schemas, stewardship, and semantic alignment, queries break when teams use :Staff vs :Employee interchangeably. LPG is a storage model; KG is a discipline.

Property graphs do not solve semantic interoperability across organizations—that is RDF's strength. They solve application-centric graph storage and query with minimal ceremony.

How We Got Here

Property graphs emerged from application needs, parallel to—but separate from—the semantic web:

Diagram: Property graph evolution

flowchart LR
    A[Network data models 1970s] --> B[Object graphs / OODB]
    B --> C[Neo4j 2007 LPG]
    C --> D[openCypher 2015]
    D --> E[Neptune / Memgraph / TigerGraph]
    E --> F[GDS + GraphRAG 2020s]
    F --> G[LPG + vector hybrid AI]
Era Milestone Impact
2007 Neo4j introduces LPG to mainstream Developer-friendly graph storage
2015 openCypher specification Cross-vendor query portability
2017+ Neptune, Memgraph, TigerGraph scale Managed and in-memory options
2020s Graph Data Science, GraphRAG, vector indexes LPG as AI retrieval substrate

Neo4j Vector and frameworks like LangChain and LlamaIndex now integrate LPG with vector search—but the LPG model itself remains distinct from W3C RDF.

ISO GQL and Query Language Standards

Property graph query languages are consolidating around international standards. GQL (Graph Query Language) is the first ISO/IEC standard for property graph query languages (ISO/IEC 39075), developed to unify concepts from Cypher, SQL/PGQ, and other graph languages under a common specification. GQL builds on ideas familiar from openCypher—pattern matching, path expressions, and typed relationships—while aiming for vendor-neutral portability across LPG engines.

Adoption remains gradual. Database vendors are aligning implementations with the standard incrementally; full feature parity and cross-vendor query portability are still evolving. Cypher remains the dominant production language today, supported by Neo4j, Memgraph, and compatible engines with the largest ecosystem of tooling, drivers, and operational patterns. Teams should monitor GQL for long-term portability but standardize on Cypher for current application development unless a specific platform commits to native GQL support.

Architecture

Property graph application architecture in production:

Layer Components
Graph database Neo4j, Neptune (LPG), Memgraph, TigerGraph
Schema governance Label/property registry, naming conventions, constraints
Driver / OGM Bolt driver, Spring Data Neo4j, neomodel
Ingestion Kafka MERGE pipelines, Spark GraphFrames, LOAD CSV
Query library Version-controlled Cypher with SLAs
API layer GraphQL, REST microservices
Analytics Graph Data Science, custom algorithms
AI layer (optional) Vector index + GraphRAG + RAG hybrid

Diagram: LPG application architecture

flowchart TB
    subgraph ingest [Ingestion]
        KAFKA[Kafka Events]
        ETL[Batch ETL]
    end
    subgraph pg [Property Graph]
        NEO[(Neo4j / Memgraph / Neptune PG)]
        IDX[Indexes + Constraints]
    end
    subgraph apps [Consumption]
        API[Application API]
        GDS[Graph Analytics]
        AI[GraphRAG + Vector RAG]
    end
    subgraph semantic [Optional Semantic Layer]
        RDF[RDF Ontology / TBox]
    end
    KAFKA --> NEO
    ETL --> NEO
    NEO --> IDX
    NEO --> API
    NEO --> GDS
    NEO --> AI
    RDF -.->|maps labels to URIs| NEO

Diagram: LPG vs full KG stack

flowchart LR
    subgraph lpg_only [LPG Only - Graph Database]
        A1[Neo4j] --> A2[App Queries]
    end
    subgraph full_kg [Full Knowledge Graph]
        B1[Ontology TBox] --> B2[RDF Canonical]
        B2 --> B3[SHACL Validation]
        B3 --> B4[LPG Projection]
        B4 --> B5[Apps + AI]
    end

Diagram: MERGE ingestion sequence

sequenceDiagram
    participant K as Kafka Consumer
    participant D as Bolt Driver
    participant N as Neo4j
    K->>D: event batch
    D->>N: BEGIN
    loop each event
        D->>N: MERGE node + relationship
    end
    N-->>D: commit
    D-->>K: ack offset

Step-by-Step Flow

Step 1: Model domain. Identify entity labels, relationship types, key properties. Sketch ( )-[ ]->( ) notation. Document in schema registry.

Step 2: Define constraints. Unique constraints on business keys (Person.id), existence constraints on critical properties (Neo4j 5+).

Step 3: Create indexes. Property indexes for lookup fields; relationship indexes for type + property filters.

Step 4: Load initial data. CSV import, ETL batch, or migration from relational via JOIN → edge generation.

Step 5: Validate graph. Orphan checks, degree distribution, constraint violations, super-node detection.

Step 6: Implement query library. Parameterized Cypher for each use case—avoid ad-hoc queries in application code.

Step 7: Add analytics. GDS projections for PageRank, community detection when needed.

Step 8: Operationalize. Backup, monitoring, query profiling, capacity planning.

Step 9: (Optional) Align with ontology. Map labels to OWL classes if RDF canonical layer exists.

Step 10: (Optional) AI integration. Sync entities to vector index for hybrid RAG.

Real Production Example

E-commerce: customer–product–behavior graph (Neo4j)

CREATE CONSTRAINT person_id IF NOT EXISTS FOR (p:Person) REQUIRE p.id IS UNIQUE;
CREATE CONSTRAINT product_sku IF NOT EXISTS FOR (p:Product) REQUIRE p.sku IS UNIQUE;
CREATE INDEX person_email IF NOT EXISTS FOR (p:Person) ON (p.email);

Recommendation query:

MATCH (u:Person {id: $userId})-[:PURCHASED]->(p:Product)<-[:PURCHASED]-(other:Person)
WHERE other <> u
MATCH (other)-[:PURCHASED]->(rec:Product)
WHERE NOT (u)-[:PURCHASED]->(rec)
RETURN rec.sku, count(*) AS score ORDER BY score DESC LIMIT 10

Fraud query:

MATCH (a:Account)-[:USED_DEVICE]->(d:Device)<-[:USED_DEVICE]-(b:Account)
WHERE a <> b
MATCH (a)-[t1:TRANSFERRED]->(), (b)-[t2:TRANSFERRED]->()
WHERE t1.amount > 10000 AND t2.amount > 10000
  AND duration.between(t1.timestamp, t2.timestamp).hours < 1
RETURN a.id, b.id, d.fingerprint

Outcome: recommendation CTR up 12%; fraud team investigates connected rings instead of isolated transactions.

Manufacturing: BOM explosion (Memgraph)

Memgraph's in-memory engine serves real-time BOM traversals on the factory floor. :CONTAINS edges carry {quantity, unit}. Variable-length paths compute component requirements per production order in <50ms.

Finance: counterparty exposure (Neo4j GDS)

PageRank on reversed OWES edges surfaces entities whose default impacts the most counterparties. GDS writes scores back via Cypher for limit monitoring dashboards.

Telecom: service dependency blast radius (Neptune openCypher)

MATCH (failed:Service {id: $failedServiceId})
MATCH (dependent:Service)-[:DEPENDS_ON*1..4]->(failed)
WHERE dependent.tier IN ['critical', 'customer-facing']
RETURN DISTINCT dependent.id, min(length(path)) AS distance
ORDER BY distance

Mean time to identify blast radius: under 30 seconds vs 15 minutes of manual wiki lookup.

Life sciences: GraphRAG entity layer

Extract entities from literature into Neo4j. At query time, expand 2-hop neighborhoods via Cypher; combine with vector-retrieved passages from LlamaIndex for hybrid context—LPG handles structure, RAG handles prose.

Event node pattern deep dive

When a PURCHASED relationship must link to promotion campaigns, invoices, and return events simultaneously, promote the purchase to a node:

MERGE (p:Person {id: $userId})
MERGE (prod:Product {sku: $sku})
CREATE (p)-[:MADE]->(purchase:Purchase {
  orderId: $orderId, amount: $amount, timestamp: datetime($ts)
})-[:OF_PRODUCT]->(prod)
WITH purchase
FOREACH (code IN CASE WHEN $promoCode IS NOT NULL THEN [$promoCode] ELSE [] END |
  MERGE (promo:Promotion {code: code})
  MERGE (purchase)-[:USED_PROMO]->(promo)
)

This supports "all purchases using promotion X" without scanning all PURCHASED edges globally—critical when promotion analytics is a first-class query pattern alongside recommendations.

Index and constraint checklist

Before production load: unique constraints on every MERGE key; indexes on filter properties in WHERE clauses; relationship indexes (Neo4j 5+) when filtering -[r:TYPE]-> by r.status or r.timestamp. Re-run CALL db.indexes() after schema migrations.

Multi-store deployment patterns

Pattern Use case Stores
Single Neo4j cluster Unified app graph Neo4j AuraDB or self-hosted causal cluster
Memgraph + Neo4j Real-time edge + batch analytics Memgraph for streaming; periodic export to Neo4j GDS
Neptune PG AWS-native, managed ops Neptune openCypher with IAM auth
LPG + RDF dual Enterprise KG GraphDB canonical; Neo4j projection for app

When deploying dual-layer, business keys in LPG must map 1:1 to URIs in RDF—document mapping in schema registry and validate in CI.

Capacity planning guidelines

Estimate graph size before hardware selection: nodes = entity count; relationships = sum of edge types × average degree. Neo4j heap recommendation often starts at 50% of store size for traversal-heavy workloads. Memgraph requires RAM to hold full graph in memory. Neptune scales storage automatically but query latency depends on instance class—benchmark with 2× projected data. For GraphRAG entity layers, cap neighborhood expansion depth in API tier to prevent LLM context overflow from unbounded Cypher results.

Super-node mitigation patterns

Pattern When Example
Intermediate grouping Single hub with >1M edges Country → Region → City → Person
Time partitioning Historical edges accumulate Monthly :Purchase subgraphs
Relationship type split One type overloaded :FOLLOWS vs :FOLLOWS_ARCHIVED
Query depth cap API-facing traversals *1..3 enforced in query library

Spring Data Neo4j integration pattern

Java teams often use Spring Data Neo4j repositories for typed access while keeping complex traversals in @Query annotations:

@Query("MATCH (u:Person {id: $userId})-[:PURCHASED]->(p) RETURN p")
List<Product> findPurchasedProducts(@Param("userId") String userId);

Keep complex fraud and dependency queries in the version-controlled Cypher library—not scattered across repository interfaces—so PROFILE review and SLA tracking stay centralized.

GraphRAG indexing considerations for LPG

When building entity graphs for GraphRAG, model entities with stable id properties matching extraction pipeline output. Create :Entity nodes with name, type, and sourceDocId properties linking back to vector-indexed chunks. At query time, resolve extracted entity names to graph nodes via exact match on id first, fuzzy match on name second—never expand neighborhoods from unresolved strings. Cap expansion at 2 hops for LLM context limits; summarize larger subgraphs with GDS community detection offline.

Backup and disaster recovery

Neo4j: full and incremental backups via neo4j-admin backup; test restore quarterly. Memgraph: snapshot export before major schema changes. Neptune: automated snapshots with point-in-time recovery—verify restore runbook includes Bolt/openCypher connection string updates. For dual-layer architectures, RDF canonical store is source of truth—restore LPG projection from RDF ETL if LPG backup fails.

Read replica routing

Direct read-heavy workloads (GraphRAG neighborhood expansion, analytics dashboards) to Neo4j read replicas via routing driver. Write ingestion to leader only. Monitor replication lag—queries against stale replicas return outdated traversals that confuse fraud and dependency analysis.

Design Decisions

Decision Option A Option B When to choose
Labels vs properties for typing Label :Person Property {type: 'Person'} Labels—indexed by default
Rich edges vs event nodes ()-[:TRANSFERRED {amount}] (:TransferEvent) node Edges for simple metadata; nodes when edge has relationships
Super nodes Single hub with millions of edges Intermediate grouping nodes Partition high-degree nodes
Graph native vs external ID UUID property Internal Neo4j ID Never expose internal IDs
LPG-only vs dual-layer Neo4j as sole store RDF canonical + LPG projection Dual when interop + traversals both required
Database Neo4j Memgraph / Neptune PG Neo4j for ecosystem; Memgraph for in-memory; Neptune for AWS

Comparisons

Property graph vs RDF

Aspect Property Graph RDF
Node identity Internal ID + business key URI
Edge properties Native RDF-star / reification
Query Cypher, Gremlin SPARQL
Standards openCypher W3C
Reasoning Application logic OWL reasoners
Best for App traversals Interop, ontologies

See RDF vs Property Graphs for decision framework.

LPG databases

Database Strengths Production fit
Neo4j Ecosystem, GDS, AuraDB managed Default choice for enterprise LPG
Memgraph In-memory, Cypher, streaming Real-time analytics, IoT
Neptune (PG mode) Managed, openCypher, AWS Cloud-native, separate from Neptune RDF
TigerGraph Massive scale, GSQL High-volume finance, telecom

Graph database vs knowledge graph

Graph Database Knowledge Graph
Storage + query + ontology (TBox)
Ad-hoc labels Governed vocabulary
Application team owns Cross-team semantic contract
Cypher/Gremlin + SHACL/OWL validation (typically RDF layer)

Common Mistakes

  1. Calling Neo4j a knowledge graph without governance. Define label conventions, schema registry, and stewardship.

  2. Using internal Neo4j IDs in applications. They change on export/import. Use business-key properties.

  3. Super-node bottlenecks. A hub with 100M edges kills traversals. Introduce intermediate nodes.

  4. Missing indexes. MATCH (n:Person {email: $email}) without index scans the label set.

  5. Unbounded variable-length paths. -[*]-> causes exponential expansion. Cap: *1..5.

  6. Modeling everything as nodes. Attributes that never participate in traversals belong outside the graph.

  7. Ignoring RDF layer when partners need URI merge. LPG alone requires custom ETL per partner.

Where It Breaks Down

Property graphs fail when teams treat them as complete knowledge graphs without governance:

Cross-organizational semantic exchange. Without URIs and standard ontologies, sharing graph data with partners requires custom export schemas per integration. Maintain RDF canonical layer for external interchange.

Heavy full-graph aggregations. "Total revenue by region across all history" is often faster in a warehouse. Property graphs excel at local traversals from anchored nodes, not columnar scans.

Fine-grained temporal history at scale. Valid-time edges (validFrom/validTo on every relationship) require disciplined modeling patterns; teams that skip conventions get contradictory "current state" queries.

Label proliferation without schema registry. Six teams invent :Staff, :Employee, :Worker independently—queries miss 40% of data. Establish governance before scaling ingestion.

Super-node blind spots. Hub nodes with millions of edges cause GC pressure and timeout cascades. Monitor degree distribution in weekly graph health reports.

When NOT

Skip property graphs as primary storage when:

  1. Multiple organizations must merge data by URI without prior schema agreement—use RDF.

  2. OWL reasoning or SHACL validation is a hard requirement on the primary store.

  3. Linked open data integration (schema.org, Wikidata, FIBO) is core—RDF tooling is mature.

  4. Edge properties are rare and queries are primarily semantic pattern matching over standardized predicates.

Use LPG when one team owns traversal-heavy application queries with rich edge metadata and closed-world constraints fit your domain.

Running in Production

Best Practice

Best Practices — Index business keys, cap traversal depth, profile slow queries, govern labels via schema registry, never expose internal IDs.

Dimension Consideration
Scaling Neo4j Causal Cluster read replicas; Fabric for sharded graphs. Neptune scales storage automatically.
Latency Target p99 < 100ms for API traversals. PROFILE queries exceeding 200ms.
Cost Neo4j Enterprise per core; AuraDB by memory. Memgraph by RAM. Factor GDS compute separately.
Monitoring Slow query log, heap/GC, store size, checkpoint duration, replication lag.
Evaluation Regression suite of Cypher with expected cardinalities. Load test at 2x projected edge count.
Security RBAC, property-level encryption for PII, audit logging on sensitive patterns.

Important

Cap variable-length path depth in every user-facing query. Uncapped traversals are the top production outage cause.

Diagram: Learning path

flowchart LR
    A[Knowledge Graphs] --> B[Property Graphs]
    B --> C[Cypher]
    B --> D[Graph Databases]
    B --> E[RDF vs PG]
    B --> F[GraphRAG]
    F --> G[RAG]

Prerequisites: Knowledge Graphs

Next topics: Cypher · Graph Databases · RDF

Interview Questions

  1. Property graph vs knowledge graph—what's missing in LPG alone?

    • Expected: ontology, URI semantics, SHACL validation, cross-team governance.
  2. When native edge properties beat RDF reification?

    • Expected: dense transaction metadata, temporal filters on relationships, fraud/IoT.
  3. How do you avoid super-node problems?

    • Expected: intermediate grouping nodes, partition relationships, cap traversal depth.
  4. Neo4j vs Memgraph vs Neptune PG?

    • Expected: Neo4j ecosystem/GDS; Memgraph in-memory real-time; Neptune AWS managed.
  5. Can LPG replace RDF in enterprise KG?

    • Expected: rarely alone—LPG for app layer, RDF for canonical semantics when interop required.
  6. How integrate LPG with RAG?

    • Expected: entity graph in Neo4j + vector chunks; Cypher neighborhood + embedding retrieval via LlamaIndex/LangChain.
  7. Why never use internal Neo4j IDs?

    • Expected: change on import/export; unstable across environments.
  8. Rich edge vs event node pattern?

    • Expected: edge for simple metadata; promote to node when event links to other entities.

Key Takeaways

  • Property graphs store labeled nodes and typed relationships with native properties on both.
  • An LPG database is not automatically a knowledge graph—governance and semantics matter.
  • Neo4j, Memgraph, and Neptune PG optimize traversals; choose based on ecosystem, latency, and cloud.
  • Index business keys, cap traversal depth, profile queries, govern labels across teams.
  • Pair LPG with RDF ontology layer when interoperability and OWL inference are required.
  • Integrate with GraphRAG and RAG for hybrid AI retrieval.

FAQs

What is a labeled property graph?

A graph model where nodes and relationships have types (labels/types) and arbitrary key-value properties.

Property graph vs Neo4j?

Property graph is the model; Neo4j is a database implementing it. Memgraph and Neptune PG also support LPG.

Can a node have multiple labels?

Yes. (:Person:Employee:Manager) carries all three labels.

Property graph vs RDF?

Neither is universally better. LPG wins ergonomics and edge properties; RDF wins standards and linked data. See RDF vs Property Graphs.

Is a property graph a knowledge graph?

Only with schema governance, semantic alignment, and defined consumption patterns—not by default.

How do property graphs work with GraphRAG?

Extract entities into LPG; at query time retrieve k-hop neighborhoods as structured LLM context alongside vector chunks.

openCypher vs Neo4j Cypher?

openCypher is the open spec; Neo4j adds APOC, GDS, temporal functions. Test portability against Neptune/Memgraph.

How handle temporal validity on relationships?

Store validFrom/validTo on edges; filter active relationships in WHERE. For bi-temporal history, append new relationship versions instead of mutating historical edges.

Property graph vs knowledge graph checklist?

Schema registry, business definitions per label, constraint validation, URI mapping if RDF exists, reviewed Cypher query library, and stewardship RFC for new types.

How do I choose between Neo4j AuraDB and self-hosted?

AuraDB reduces ops burden—automatic backups, upgrades, and scaling. Self-hosted suits data residency requirements, custom GDS workloads, or cost optimization at very large scale where reserved hardware beats managed pricing. Benchmark both with your query mix before multi-year commitment.

What metrics indicate graph health?

Monitor: store size growth rate, slow query count per day, constraint violation rate during ingestion, orphan node count, max node degree (super-node early warning), replication lag on read replicas, and MERGE conflict rate during concurrent ingestion.

Are property graphs schemaless?

No—they are schema-flexible. Production systems enforce constraints, indexes, naming conventions, and a schema registry. Flexibility at write time does not remove the need for governance at scale.

References

Next Topics

Learning Path

Continue Learning

Related Guides

Related Tools

ToolCategoryPurposeWebsiteBest For
Neo4j Vector Index
CloudSelf-hosted
Vector DBVector search on Neo4j graph database — combine embeddings with knowledge graphs.neo4j.comGraphRAG
LangChain
PopularOpen SourceAPI
frameworksFramework for building LLM-powered applications and workflows.langchain.comRAG systems
LlamaIndex
Open SourceAPI
frameworksData framework for connecting LLMs to private and structured data.llamaindex.aiRAG over documents

Related Rankings

Related Comparisons