TETRA
|

We used the math behind AIto build a database.

The matrix operations behind every large language model — the mathematical engine driving the AI revolution — turn out to be a radically better way to store and query data. Not to generate it. Not to predict it. To retrieve exactly what’s there, with perfect accuracy, faster and cheaper than anything else on the market.

The Problem

The cost of data infrastructureis becoming unsustainable.

Behind every enterprise data budget is a deeper crisis — power, compute, and complexity compounding faster than the value they deliver.

$29M
Avg. enterprise data
spend per year1
9%
US electricity consumed
by data centers by 20302
$2.2M
Annual cost just to
maintain data pipelines1
73%
Enterprise data initiatives
that fail expectations1

Enterprise data spending has reached $29 million per year on average, with cloud compute and ingestion alone running over $500K per month at many organizations. Engineering teams spend $2.2 million a year just maintaining data pipelines. And despite all of that, 73% of enterprise data initiatives fail to meet expectations.1

Behind those budgets is a deeper problem: power. Data centers are on track to consume 9% of all US electricity by 2030 — triple what they use today.2 Power demand is growing at 15% per year.3 The industry’s own new benchmark for infrastructure value is “tokens per watt per dollar”4 — a metric that Jensen Huang formally introduced at GTC 2026.5

Every watt spent on database overhead is a watt not available for the workloads that actually generate value.

Traditional databases are a major part of this waste. They store your data and then build an equally large shadow of infrastructure around it — indexes, logs, caches, replication layers — until the system is 5 to 10 times larger than the data itself. All of that overhead consumes compute, memory, storage, and electricity. It exists because the old approach to databases requires it.

TETRA doesn’t.

The Solution

One engine. A fraction of the footprint.

TETRA’s mathematical foundation is so efficient that the complete, queryable, encrypted database is roughly the same size as the compressed raw data it was built from. There is almost no overhead. Where a traditional system wraps your data in layers of infrastructure, TETRA’s structure is the query engine. Nothing is wasted.

That efficiency cascades into every cost line:

Smaller data

Smaller servers. Lower cloud bills. Lower electricity. A multi-server cluster workload runs on a single standard machine.

Single engine

Replaces separate systems for structured records, relationships, search, and analytics. Fewer systems, fewer teams, fewer integration points.

Lower ops burden

No indexes, logs, caches, or replication layers to maintain. The savings compound from the storage layer through the power grid.

Runs anywhere

Datacenter, edge, or a device in the field. Intelligence moves to where the data lives, without a round trip to a central server.

A workload that required a multi-server cluster — with all the licensing, staffing, cooling, and power that implies — runs on a single standard machine.

Everyone else used this math to build language models. We used it to build a database.

Schedule a Consultation See what TETRA can replace

AI + Data

It makes AI accurateinstead of approximate.

The biggest unsolved problem in enterprise AI is accuracy. Models hallucinate. The proven fix is giving them structured knowledge to reason over — not documents to guess from.

3.4×

better accuracy on complex business questions when LLMs reason over structured knowledge graphs vs. vector-only retrieval.6

The bottleneck has been the database underneath. Existing options are too slow to keep up with a model during a live query, and too heavy to deploy alongside one.

TETRA is fast enough and small enough to sit inside the AI stack itself — no separate infrastructure, no additional power draw, no added complexity. This turns AI from a tool that sometimes gets it right into a system that reasons from your actual data, every time.

And because the engine is so compact, it runs wherever the AI runs — in a datacenter, at the edge, on a device in the field. Intelligence moves to where the data lives, without a round trip to a central server and without spinning up another rack.

Timing

Why now.

The data infrastructure industry is hitting a wall. Power constraints are dictating where data centers can be built, what workloads they can run, and how much they can grow.7 Every efficiency gain at the database layer translates directly into capacity freed up for everything else.

175%
Power demand surge
projected by 20307
15%
Annual growth in
data center power3
Current electricity
use by 20302

TETRA doesn’t just reduce cost. It reduces the physical resources required to do the same work — at a moment when those resources are the binding constraint on the entire technology industry.

The result changes the economics of enterprise data infrastructure at exactly the moment those economics are breaking.

Schedule a Consultation Talk to us about TETRA

Sources

1
Fivetran — “The Enterprise Data Infrastructure Benchmark Report 2026.” Survey of 500+ senior data leaders at organizations with 5,000+ employees. fivetran.com
2
Electric Power Research Institute (EPRI) — Data center electricity consumption forecast. epri.com
3
Goldman Sachs — “AI to Drive 165% Increase in Data Center Power Demand by 2030.” 15% CAGR projection for US data center power demand 2023–2030. goldmansachs.com
4
Data Center Knowledge — “2026 Predictions: AI Sparks Data Center Power Revolution.” datacenterknowledge.com
5
CIQ — “Tokens Per Watt is the New CEO Metric.” Jensen Huang’s introduction of tokens-per-watt at GTC 2026. ciq.com
6
Diffbot KG-LM Accuracy Benchmark — GraphRAG improved LLM accuracy 3.4× across 43 business questions vs. vector-only retrieval. falkordb.com
7
Goldman Sachs — “Data Center Power Demand: The 6 Ps Driving Growth and Constraints.” Power demand projected to surge 175% by 2030. goldmansachs.com

See TETRA in action.

Explore the technical benchmarks or talk to us about what TETRA can do for your infrastructure.

Schedule a Consultation Talk to us about TETRA

A graph data system
that runs anywhere.

We didn’t improve the graph database. We reinvented it. Sub-millisecond queries. No specialized hardware. Tiny RAM footprint.

Launch Demo →

Benchmark Report

LDBC Social Network Benchmark

SF10 · 30M nodes · 115M edges · single file · single process

What this proves

TETRA handles a production-scale social network — 30 million people and 115 million connections — on a single laptop. No cluster, no GPU, no cloud instance. The LDBC Social Network Benchmark is the industry-standard test maintained by an independent consortium. SF10 means 10× base scale. Every query completed in under 77ms.

30.1M
Nodes
114.9M
Edges
8.7 GB
File size
31/31
Queries passed
Count queries
30M+ node metadata · all 16 ≤ 69µs
43µs
Friend-of-friend · full graph 2-hop
All persons → friends → friends-of-friends
45ms
Slowest query · forum→post→creator
2-hop traversal · p99: 72ms
70ms

Latency distribution · all 31 queries · p50

< 100µs
16 queries
1–50ms
12 queries
50ms+
3 queries

Counts

How fast can TETRA count 145 million elements? These queries scan metadata for every node and edge type — the foundation of dashboards, monitoring, and analytics.

QueryP50P99StdDevRows
total nodes
MATCH (n) RETURN count(n)
45µs107µs17µs1
total edges
MATCH ()-[r]->() RETURN count(r)
43µs57µs6µs1
Person
MATCH (n:Person) RETURN count(n)
42µs67µs10µs1
Comment
MATCH (n:Comment) RETURN count(n)
42µs82µs8µs1
Post
MATCH (n:Post) RETURN count(n)
58µs80µs6µs1
Forum
MATCH (n:Forum) RETURN count(n)
50µs66µs8µs1
City
MATCH (n:City) RETURN count(n)
42µs93µs11µs1
Country
MATCH (n:Country) RETURN count(n)
51µs61µs4µs1
KNOWS edges
MATCH ()-[r:KNOWS]->() RETURN count(r)
43µs62µs6µs1
LIKES edges
MATCH ()-[r:LIKES]->() RETURN count(r)
44µs56µs5µs1
HAS_CREATOR edges
MATCH ()-[r:HAS_CREATOR]->() RETURN count(r)
41µs51µs4µs1
REPLY_OF edges
MATCH ()-[r:REPLY_OF]->() RETURN count(r)
42µs55µs6µs1
CONTAINER_OF edges
MATCH ()-[r:CONTAINER_OF]->() RETURN count(r)
47µs55µs2µs1
IS_LOCATED_IN edges
MATCH ()-[r:IS_LOCATED_IN]->() RETURN count(r)
43µs55µs4µs1
HAS_MODERATOR edges
MATCH ()-[r:HAS_MODERATOR]->() RETURN count(r)
39µs48µs4µs1
HAS_MEMBER edges
MATCH ()-[r:HAS_MEMBER]->() RETURN count(r)
41µs81µs10µs1

1-hop traversals

Following a single relationship across the full graph. Each query scans every node of a type and follows one edge — like asking “where does every person live?” across 30 million people.

QueryP50P99StdDevRows
Person→KNOWS→Person
MATCH (p:Person)-[:KNOWS]->(o:Person) RETURN count(o)
25.5ms31.0ms2.1ms1
Forum→CONTAINER_OF→Post
MATCH (f:Forum)-[:CONTAINER_OF]->(p:Post) RETURN count(p)
28.4ms30.7ms841µs1
Forum→HAS_MODERATOR→Person
MATCH (f:Forum)-[:HAS_MODERATOR]->(p:Person) RETURN count(f)
42.5ms64.0ms6.8ms1
Person→IS_LOCATED_IN→City
MATCH (p:Person)-[:IS_LOCATED_IN]->(c:City) RETURN count(p)
12.2ms12.6ms194µs1

2-hop traversals

Chained traversals — following two relationships in sequence. The classic “friends of friends” query. These touch the most data and push the engine hardest.

QueryP50P99StdDevRows
friend-of-friend count
MATCH (p:Person)-[:KNOWS]->(f:Person)-[:KNOWS]->(fof:Person) RETURN count(DISTINCT fof)
45.1ms46.2ms596µs1
comment→post→creator
MATCH (c:Comment)-[:REPLY_OF]->(p:Post)-[:HAS_CREATOR]->(person:Person) RETURN count(DISTINCT person)
69.6ms70.9ms830µs1
forum→post→creator
MATCH (f:Forum)-[:CONTAINER_OF]->(p:Post)-[:HAS_CREATOR]->(person:Person) RETURN count(DISTINCT person)
70.2ms71.8ms681µs1

Aggregation

Top-K rankings computed on the fly — no pre-computed views. Answers questions like “who has the most connections?” or “which forum is most active?”

QueryP50P99StdDevRows
top KNOWS degree
MATCH (p:Person)-[:KNOWS]->(other) RETURN p.firstName, count(other) AS cnt ORDER BY cnt DESC LIMIT 10
20.9ms21.3ms216µs10
top forum by posts
MATCH (f:Forum)-[:CONTAINER_OF]->(p:Post) RETURN f.title, count(p) AS posts ORDER BY posts DESC LIMIT 10
19.2ms21.7ms939µs10
top comment creators
MATCH (c:Comment)-[:HAS_CREATOR]->(p:Person) RETURN p.firstName, count(c) AS comments ORDER BY comments DESC LIMIT 10
44.2ms45.1ms660µs10

WITH pipeline

Complex query pipelines — filtering, aggregating, and transforming results mid-query. This is where query languages earn their keep: chaining operations without round-trips to the application layer.

QueryP50P99StdDevRows
WITH + STARTS WITH filter
MATCH (p:Person) WITH p WHERE p.firstName STARTS WITH 'A' RETURN p.firstName, p.lastName LIMIT 10
6.3ms6.8ms276µs10
WITH + agg + filter
MATCH (p:Person)-[:KNOWS]->(f:Person) WITH p, count(f) AS friends WHERE friends > 100 RETURN p.firstName, friends ORDER BY friends DESC LIMIT 10
9.9ms10.6ms629µs10
WITH DISTINCT
MATCH (p:Person)-[:KNOWS]->(f:Person) WITH DISTINCT f RETURN f.firstName LIMIT 20
14.7ms47.4ms13.3ms20

Multi-hop

Chained patterns with deduplication and limiting — multiple joins across the full graph with result materialization.

QueryP50P99StdDevRows
2-hop DISTINCT LIMIT
MATCH (p:Person)-[:KNOWS]->(f:Person)-[:KNOWS]->(fof:Person) RETURN DISTINCT fof.firstName LIMIT 20
27.2ms53.2ms12.0ms20
comment reply chain
MATCH (c:Comment)-[:REPLY_OF]->(p:Post) RETURN count(c)
65.1ms76.4ms6.1ms1

Environment

engine: Tetra Graph Engine · Go · native arm64 binary · single process

storage: Single 8.7 GB file · mmap’d · ~30s cold start

hardware: Apple M4 Pro · 10 cores · 16 GB RAM · CPU only — no GPU, no cluster

protocol: Bolt v4.4 · openCypher

format: TETRAFILE v2 · LDBC SNB SF10

Tetra Graph Engine · TETRAFILE v2 · LDBC SNB SF10 · 31/31 passed

2D/3D
Visualization
30+
Algorithms
1,592/s
Peak throughput
100%
Cypher TCK
28µs
Label count
413µs
Entity lookup
435µs
1-hop traversal
2.6ms
Aggregation

Visualization

Query. Analyze. Visualize. Innovate.

To give you maximum data utility, we built a 2D/3D graph viewer right in. Click a node, follow the connections, see what’s actually there.

Layouts

Force-directed, spherical, and radial — switch on the fly

2D overhead or full 3D orbit

Node Shapes

Six distinct platonic solids. Each node type gets its own shape and color automatically.

Explore

Click to focus — see N hops deep

Fly to any node in the graph

Pin and inspect multiple nodes at once

Performance

78 queries. 300 iterations each. Same hardware.

Recommendations dataset — 28,863 nodes, 166,261 edges. Both containerized on Apple M4 Pro, 16GB, CPU only. Native binary shown for reference.

54
Tetra wins
24
Neo4j wins
0
Tied (5% buffer)
300
Iterations each
TETRA container
Neo4j container
Bar shows container head-to-head · p50 median latency

p50 & p99 latency by query

TETRA p50p99
Neo4j p50p99

Sorted by TETRA advantage — biggest wins top, Neo4j wins bottom

genre popularity (count)
531µs / 780µs
35.1ms / 65.6ms
avg ratings per genre
4.1ms / 6.1ms
65.6ms / 96.5ms
movies per genre
267µs / 403µs
2.3ms / 4.2ms
lookup Toy Story
581µs / 898µs
2.4ms / 7.7ms
directors of Matrix
593µs / 1.2ms
2.3ms / 8.8ms
movies by Spielberg
1.1ms / 1.6ms
7.1ms / 10.1ms
genres Keanu acts in
1.1ms / 2.0ms
3.6ms / 11.0ms
lookup Keanu
1.1ms / 1.6ms
3.7ms / 8.2ms
top rated movies
6.2ms / 10.0ms
37.7ms / 50.8ms
count all nodes
156µs / 309µs
366µs / 1.4ms
lookup Matrix
580µs / 943µs
2.4ms / 4.2ms
users who rated Matrix
609µs / 928µs
2.4ms / 4.1ms
genres of Toy Story
596µs / 959µs
2.3ms / 3.9ms
actors in Matrix
595µs / 963µs
2.3ms / 3.9ms
count all edges
147µs / 227µs
344µs / 745µs
MATCH+MATCH shared var
1.2ms / 1.7ms
3.6ms / 5.4ms
prolific directors
2.1ms / 3.6ms
7.8ms / 11.2ms
WITH agg + filter
2.9ms / 4.0ms
9.2ms / 11.8ms
users rated Keanu movies
1.1ms / 1.6ms
3.6ms / 4.6ms
directors of Keanu movies
1.2ms / 1.7ms
3.7ms / 4.7ms
director's other movies
643µs / 1.2ms
2.3ms / 3.3ms
count RATED
151µs / 289µs
354µs / 752µs
prolific actors
6.0ms / 7.7ms
17.0ms / 19.3ms
count Movie
147µs / 259µs
325µs / 583µs
count DIRECTED
148µs / 214µs
304µs / 473µs
count Genre
149µs / 244µs
308µs / 537µs
count IN_GENRE
153µs / 418µs
306µs / 811µs
forward WITH + filter
785µs / 988µs
866µs / 1.8ms
count Person
145µs / 301µs
321µs / 544µs
movies by Keanu
1.2ms / 3.8ms
3.7ms / 5.6ms
count ACTED_IN
157µs / 463µs
325µs / 641µs
collab filter (similar)
457µs / 1.1ms
566µs / 1.5ms
co-actors of Keanu
1.3ms / 1.9ms
1.4ms / 2.4ms
count User
153µs / 486µs
303µs / 425µs
3-hop actor chain
1.6ms / 2.3ms
1.4ms / 1.8ms
WITH stage barrier
588µs / 933µs
387µs / 512µs
forward WITH + DISTINCT
554µs / 1.1ms
379µs / 549µs
user→movie→actor→movie
754µs / 1.7ms
418µs / 560µs
actors same genre as Matrix
4.5ms / 6.8ms
964µs / 1.4ms
actor→movie→genre→movie
6.0ms / 8.1ms
1.2ms / 1.4ms
TETRA, 353% faster
count all nodes
Bare metal: 41µs
TETRA 156µs
366µs Neo4j
TETRA, 228% faster
count all edges
Bare metal: 26µs
TETRA 147µs
344µs Neo4j
TETRA, 125% faster
count Movie
Bare metal: 29µs
TETRA 147µs
325µs Neo4j
TETRA, 81% faster
count Person
Bare metal: 28µs
TETRA 145µs
321µs Neo4j
TETRA, 120% faster
count Genre
Bare metal: 29µs
TETRA 149µs
308µs Neo4j
Neo4j, 14% faster
count User
Bare metal: 26µs
Neo4j 303µs
153µs TETRA
TETRA, 38% faster
count ACTED_IN
Bare metal: 24µs
TETRA 157µs
325µs Neo4j
TETRA, 160% faster
count RATED
Bare metal: 25µs
TETRA 151µs
354µs Neo4j
TETRA, 121% faster
count DIRECTED
Bare metal: 28µs
TETRA 148µs
304µs Neo4j
TETRA, 94% faster
count IN_GENRE
Bare metal: 27µs
TETRA 153µs
306µs Neo4j
TETRA, 345% faster
lookup Matrix
Bare metal: 376µs
TETRA 580µs
2.4ms Neo4j
TETRA, 413% faster
lookup Keanu
Bare metal: 806µs
TETRA 1.1ms
3.7ms Neo4j
TETRA, 757% faster
lookup Toy Story
Bare metal: 413µs
TETRA 581µs
2.4ms Neo4j
TETRA, 305% faster
actors in Matrix
Bare metal: 430µs
TETRA 595µs
2.3ms Neo4j
TETRA, 47% faster
movies by Keanu
Bare metal: 1.0ms
TETRA 1.2ms
3.7ms Neo4j
TETRA, 307% faster
genres of Toy Story
Bare metal: 435µs
TETRA 596µs
2.3ms Neo4j
TETRA, 633% faster
directors of Matrix
Bare metal: 425µs
TETRA 593µs
2.3ms Neo4j
TETRA, 531% faster
movies by Spielberg
Bare metal: 983µs
TETRA 1.1ms
7.1ms Neo4j
TETRA, 342% faster
users who rated Matrix
Bare metal: 434µs
TETRA 609µs
2.4ms Neo4j
TETRA, 26% faster
co-actors of Keanu
Bare metal: 1.2ms
TETRA 1.3ms
1.4ms Neo4j
TETRA, 176% faster
directors of Keanu movies
Bare metal: 1.1ms
TETRA 1.2ms
3.7ms Neo4j
TETRA, 450% faster
genres Keanu acts in
Bare metal: 919µs
TETRA 1.1ms
3.6ms Neo4j
Neo4j, 386% faster
actors same genre as Matrix
Bare metal: 4.0ms
Neo4j 964µs
4.5ms TETRA
TETRA, 188% faster
users rated Keanu movies
Bare metal: 851µs
TETRA 1.1ms
3.6ms Neo4j
Neo4j, 28% faster
3-hop actor chain
Bare metal: 1.6ms
Neo4j 1.4ms
1.6ms TETRA
Neo4j, 479% faster
actor→movie→genre→movie
Bare metal: 5.5ms
Neo4j 1.2ms
6.0ms TETRA
Neo4j, 204% faster
user→movie→actor→movie
Bare metal: 695µs
Neo4j 418µs
754µs TETRA
TETRA, 942% faster
movies per genre
Bare metal: 135µs
TETRA 267µs
2.3ms Neo4j
TETRA, 408% faster
top rated movies
Bare metal: 5.6ms
TETRA 6.2ms
37.7ms Neo4j
TETRA, 151% faster
prolific actors
Bare metal: 5.3ms
TETRA 6.0ms
17.0ms Neo4j
TETRA, 211% faster
prolific directors
Bare metal: 1.7ms
TETRA 2.1ms
7.8ms Neo4j
TETRA, 1,482% faster
avg ratings per genre
Bare metal: 3.6ms
TETRA 4.1ms
65.6ms Neo4j
TETRA, 8,310% faster
genre popularity (count)
Bare metal: 389µs
TETRA 531µs
35.1ms Neo4j
TETRA, 82% faster
forward WITH + filter
Bare metal: 642µs
TETRA 785µs
866µs Neo4j
Neo4j, 100% faster
forward WITH + DISTINCT
Bare metal: 429µs
Neo4j 379µs
554µs TETRA
TETRA, 195% faster
WITH agg + filter
Bare metal: 2.4ms
TETRA 2.9ms
9.2ms Neo4j
Neo4j, 82% faster
WITH stage barrier
Bare metal: 470µs
Neo4j 387µs
588µs TETRA
TETRA, 175% faster
director's other movies
Bare metal: 506µs
TETRA 643µs
2.3ms Neo4j
TETRA, 36% faster
collab filter (similar)
Bare metal: 318µs
TETRA 457µs
566µs Neo4j
TETRA, 218% faster
MATCH+MATCH shared var
Bare metal: 1.0ms
TETRA 1.2ms
3.6ms Neo4j
TETRA, 200% faster
MATCH+MATCH chain
Bare metal: 1.1ms
TETRA 1.1ms
3.7ms Neo4j
Neo4j, 31% faster
return both endpoints
Bare metal: 418µs
Neo4j 426µs
457µs TETRA
Neo4j, 120% faster
return all 3 vars
Bare metal: 562µs
Neo4j 430µs
621µs TETRA
Neo4j, 106% faster
edge type() in RETURN
Bare metal: 6.6ms
Neo4j 3.4ms
6.0ms TETRA
TETRA, 189% faster
whole node + prop
Bare metal: 1.1ms
TETRA 1.2ms
3.7ms Neo4j
TETRA, 229% faster
3-match chain
Bare metal: 1.4ms
TETRA 1.3ms
3.9ms Neo4j
TETRA, 121% faster
multi-pattern shared
Bare metal: 1.1ms
TETRA 1.2ms
3.7ms Neo4j
TETRA, 1,023% faster
shortestPath
Bare metal: 581µs
TETRA 791µs
6.9ms Neo4j
Neo4j, 87% faster
OPTIONAL MATCH basic
Bare metal: 838µs
Neo4j 3.6ms
1.3ms TETRA
TETRA, 45% faster
OPTIONAL MATCH chain
Bare metal: 1.1ms
TETRA 1.3ms
3.7ms Neo4j
TETRA, 167% faster
OPTIONAL null emit
Bare metal: 436µs
TETRA 640µs
2.3ms Neo4j
Neo4j, 157% faster
named path return
Bare metal: 1.2ms
Neo4j 3.9ms
2.3ms TETRA
TETRA, 81% faster
edge var type()
Bare metal: 1.0ms
TETRA 1.2ms
3.6ms Neo4j
Neo4j, 20% faster
edge var props
Bare metal: 182µs
Neo4j 372µs
297µs TETRA
TETRA, 247% faster
RETURN *
Bare metal: 1.0ms
TETRA 1.3ms
3.8ms Neo4j
TETRA, 204% faster
cartesian 2-node
Bare metal: 1.5ms
TETRA 1.9ms
6.9ms Neo4j
Neo4j, 567% faster
EXISTS in WHERE
Bare metal: 816µs
Neo4j 474µs
1.3ms TETRA
Neo4j, 33% faster
OR in WHERE
Bare metal: 493µs
Neo4j 1.3ms
629µs TETRA
TETRA, 104% faster
count + group + order
Bare metal: 5.4ms
TETRA 6.4ms
17.3ms Neo4j
Neo4j, 70% faster
4-hop actor chain
Bare metal: 1.9ms
Neo4j 1.4ms
2.1ms TETRA
TETRA, 143% faster
Kevin Bacon 2-degree
Bare metal: 1.5ms
TETRA 1.3ms
4.0ms Neo4j
Neo4j, 83% faster
Kevin Bacon 3-degree
Bare metal: 2.3ms
Neo4j 1.4ms
2.3ms TETRA
Neo4j, 305% faster
Kevin Bacon 4-degree
Bare metal: 6.1ms
Neo4j 1.4ms
6.3ms TETRA
TETRA, 188% faster
VLP 1..4 from Keanu
Bare metal: 1.1ms
TETRA 1.3ms
3.7ms Neo4j
Neo4j, 254% faster
VLP 1..6 Kevin Bacon
Bare metal: 5.6ms
Neo4j 1.6ms
6.0ms TETRA
TETRA, 76% faster
full genre cross-agg
Bare metal: 15.3ms
TETRA 16.4ms
37.9ms Neo4j
Neo4j, 6,327% faster
content-based recs
Bare metal: 4.8ms
Neo4j 577µs
7.8ms TETRA
TETRA, 15,754% faster
collab filter recs
Bare metal: 503µs
TETRA 1.1ms
509ms Neo4j
Neo4j, 91% faster
similar users
Bare metal: 258µs
Neo4j 715µs
499µs TETRA
TETRA, 30% faster
actor filmography
Bare metal: 984µs
TETRA 1.3ms
3.7ms Neo4j
Neo4j, 134% faster
movie detail page
Bare metal: 6.5ms
Neo4j 3.4ms
6.3ms TETRA
Neo4j, 8% faster
genre browse
Bare metal: 1.5ms
Neo4j 1.6ms
1.6ms TETRA
TETRA, 62% faster
search by title prefix
Bare metal: 540µs
TETRA 643µs
1.4ms Neo4j
TETRA, 150% faster
mutual connections
Bare metal: 855µs
TETRA 1.2ms
3.5ms Neo4j
Neo4j, 40% faster
friend-of-friend
Bare metal: 1.0ms
Neo4j 1.2ms
1.2ms TETRA
TETRA, 106% faster
yearly movie count
Bare metal: 790µs
TETRA 966µs
2.6ms Neo4j
TETRA, 694% faster
top genres by avg rating
Bare metal: 3.6ms
TETRA 4.6ms
66.6ms Neo4j
TETRA, 456% faster
most connected actors
Bare metal: 9.3ms
TETRA 11.9ms
68.6ms Neo4j
graph LR
  N((n)):::any -->|count| R[result]:::result

Counts & Lookups

count all nodes

TETRA, 353% faster
Bare metal: 41µs
TETRA container: 156µs
Neo4j container: 366µs
MATCH (n) RETURN count(n)

1 rows · 300 iterations

Latency distribution (µs)

p50 — median

Bare metal
41µs
TETRA
156µs
Neo4j
366µs

σ — std dev

TETRA
34µs
Neo4j
199µs

p99 — worst case

TETRA
309µs
Neo4j
1.4ms
graph LR
  A((a)):::any -->|r| B((b)):::any -->|count| R[result]:::result

Counts & Lookups

count all edges

TETRA, 228% faster
Bare metal: 26µs
TETRA container: 147µs
Neo4j container: 344µs
MATCH ()-[r]->() RETURN count(r)

1 rows · 300 iterations

Latency distribution (µs)

p50 — median

Bare metal
26µs
TETRA
147µs
Neo4j
344µs

σ — std dev

TETRA
19µs
Neo4j
132µs

p99 — worst case

TETRA
227µs
Neo4j
745µs
graph LR
  N[movie]:::movie -->|count| R[result]:::result

Counts & Lookups

count Movie

TETRA, 125% faster
Bare metal: 29µs
TETRA container: 147µs
Neo4j container: 325µs
MATCH (n:Movie) RETURN count(n)

1 rows · 300 iterations

Latency distribution (µs)

p50 — median

Bare metal
29µs
TETRA
147µs
Neo4j
325µs

σ — std dev

TETRA
21µs
Neo4j
135µs

p99 — worst case

TETRA
259µs
Neo4j
583µs
graph LR
  N[person]:::person -->|count| R[result]:::result

Counts & Lookups

count Person

TETRA, 81% faster
Bare metal: 28µs
TETRA container: 145µs
Neo4j container: 321µs
MATCH (n:Person) RETURN count(n)

1 rows · 300 iterations

Latency distribution (µs)

p50 — median

Bare metal
28µs
TETRA
145µs
Neo4j
321µs

σ — std dev

TETRA
45µs
Neo4j
47µs

p99 — worst case

TETRA
301µs
Neo4j
544µs
graph LR
  N[genre]:::genre -->|count| R[result]:::result

Counts & Lookups

count Genre

TETRA, 120% faster
Bare metal: 29µs
TETRA container: 149µs
Neo4j container: 308µs
MATCH (n:Genre) RETURN count(n)

1 rows · 300 iterations

Latency distribution (µs)

p50 — median

Bare metal
29µs
TETRA
149µs
Neo4j
308µs

σ — std dev

TETRA
21µs
Neo4j
56µs

p99 — worst case

TETRA
244µs
Neo4j
537µs
graph LR
  N[user]:::user -->|count| R[result]:::result

Counts & Lookups

count User

Neo4j, 14% faster
Bare metal: 26µs
TETRA container: 153µs
Neo4j container: 303µs
MATCH (n:User) RETURN count(n)

1 rows · 300 iterations

Latency distribution (µs)

p50 — median

Bare metal
26µs
TETRA
153µs
Neo4j
303µs

σ — std dev

TETRA
127µs
Neo4j
58µs

p99 — worst case

TETRA
486µs
Neo4j
425µs
graph LR
  N[acted_in]:::any -->|count| R[result]:::result

Counts & Lookups

count ACTED_IN

TETRA, 38% faster
Bare metal: 24µs
TETRA container: 157µs
Neo4j container: 325µs
MATCH ()-[r:ACTED_IN]->() RETURN count(r)

1 rows · 300 iterations

Latency distribution (µs)

p50 — median

Bare metal
24µs
TETRA
157µs
Neo4j
325µs

σ — std dev

TETRA
91µs
Neo4j
77µs

p99 — worst case

TETRA
463µs
Neo4j
641µs
graph LR
  N[rated]:::any -->|count| R[result]:::result

Counts & Lookups

count RATED

TETRA, 160% faster
Bare metal: 25µs
TETRA container: 151µs
Neo4j container: 354µs
MATCH ()-[r:RATED]->() RETURN count(r)

1 rows · 300 iterations

Latency distribution (µs)

p50 — median

Bare metal
25µs
TETRA
151µs
Neo4j
354µs

σ — std dev

TETRA
64µs
Neo4j
91µs

p99 — worst case

TETRA
289µs
Neo4j
752µs
graph LR
  N[directed]:::any -->|count| R[result]:::result

Counts & Lookups

count DIRECTED

TETRA, 121% faster
Bare metal: 28µs
TETRA container: 148µs
Neo4j container: 304µs
MATCH ()-[r:DIRECTED]->() RETURN count(r)

1 rows · 300 iterations

Latency distribution (µs)

p50 — median

Bare metal
28µs
TETRA
148µs
Neo4j
304µs

σ — std dev

TETRA
18µs
Neo4j
46µs

p99 — worst case

TETRA
214µs
Neo4j
473µs
graph LR
  N[in_genre]:::genre -->|count| R[result]:::result

Counts & Lookups

count IN_GENRE

TETRA, 94% faster
Bare metal: 27µs
TETRA container: 153µs
Neo4j container: 306µs
MATCH ()-[r:IN_GENRE]->() RETURN count(r)

1 rows · 300 iterations

Latency distribution (µs)

p50 — median

Bare metal
27µs
TETRA
153µs
Neo4j
306µs

σ — std dev

TETRA
61µs
Neo4j
151µs

p99 — worst case

TETRA
418µs
Neo4j
811µs
graph LR
  N[matrix]:::movie

Counts & Lookups

lookup Matrix

TETRA, 345% faster
Bare metal: 376µs
TETRA container: 580µs
Neo4j container: 2.4ms
MATCH (m:Movie {title: 'Matrix, The'}) RETURN m.title, m.released

1 rows · 300 iterations

Latency distribution (µs)

p50 — median

Bare metal
376µs
TETRA
580µs
Neo4j
2.4ms

σ — std dev

TETRA
82µs
Neo4j
419µs

p99 — worst case

TETRA
943µs
Neo4j
4.2ms
graph LR
  N[keanu]:::movie

Counts & Lookups

lookup Keanu

TETRA, 413% faster
Bare metal: 806µs
TETRA container: 1.1ms
Neo4j container: 3.7ms
MATCH (p:Person {name: 'Keanu Reeves'}) RETURN p.name, p.born

1 rows · 300 iterations

Latency distribution (µs)

p50 — median

Bare metal
806µs
TETRA
1.1ms
Neo4j
3.7ms

σ — std dev

TETRA
130µs
Neo4j
2.0ms

p99 — worst case

TETRA
1.6ms
Neo4j
8.2ms
graph LR
  N[toy story]:::movie

Counts & Lookups

lookup Toy Story

TETRA, 757% faster
Bare metal: 413µs
TETRA container: 581µs
Neo4j container: 2.4ms
MATCH (m:Movie {title: 'Toy Story'}) RETURN m.title

1 rows · 300 iterations

Latency distribution (µs)

p50 — median

Bare metal
413µs
TETRA
581µs
Neo4j
2.4ms

σ — std dev

TETRA
101µs
Neo4j
1.0ms

p99 — worst case

TETRA
898µs
Neo4j
7.7ms
graph RL
  P[Person]:::person -->|rel| M[Movie]:::movie

Single-Hop Traversals

actors in Matrix

TETRA, 305% faster
Bare metal: 430µs
TETRA container: 595µs
Neo4j container: 2.3ms
MATCH (m:Movie {title: 'Matrix, The'})<-[:ACTED_IN]-(a:Person) RETURN a.name

4 rows · 300 iterations

Latency distribution (µs)

p50 — median

Bare metal
430µs
TETRA
595µs
Neo4j
2.3ms

σ — std dev

TETRA
77µs
Neo4j
296µs

p99 — worst case

TETRA
963µs
Neo4j
3.9ms
graph LR
  P[Person]:::person -->|ACTED_IN| M[Movie]:::movie

Single-Hop Traversals

movies by Keanu

TETRA, 47% faster
Bare metal: 1.0ms
TETRA container: 1.2ms
Neo4j container: 3.7ms
MATCH (p:Person {name: 'Keanu Reeves'})-[:ACTED_IN]->(m:Movie) RETURN m.title

33 rows · 300 iterations

Latency distribution (µs)

p50 — median

Bare metal
1.0ms
TETRA
1.2ms
Neo4j
3.7ms

σ — std dev

TETRA
446µs
Neo4j
376µs

p99 — worst case

TETRA
3.8ms
Neo4j
5.6ms
graph LR
  M[Movie]:::movie -->|IN_GENRE| G[Genre]:::genre

Single-Hop Traversals

genres of Toy Story

TETRA, 307% faster
Bare metal: 435µs
TETRA container: 596µs
Neo4j container: 2.3ms
MATCH (m:Movie {title: 'Toy Story'})-[:IN_GENRE]->(g:Genre) RETURN g.name

5 rows · 300 iterations

Latency distribution (µs)

p50 — median

Bare metal
435µs
TETRA
596µs
Neo4j
2.3ms

σ — std dev

TETRA
75µs
Neo4j
256µs

p99 — worst case

TETRA
959µs
Neo4j
3.9ms
graph RL
  P[Person]:::person -->|rel| M[Movie]:::movie

Single-Hop Traversals

directors of Matrix

TETRA, 633% faster
Bare metal: 425µs
TETRA container: 593µs
Neo4j container: 2.3ms
MATCH (m:Movie {title: 'Matrix, The'})<-[:DIRECTED]-(d:Person) RETURN d.name

2 rows · 300 iterations

Latency distribution (µs)

p50 — median

Bare metal
425µs
TETRA
593µs
Neo4j
2.3ms

σ — std dev

TETRA
151µs
Neo4j
2.0ms

p99 — worst case

TETRA
1.2ms
Neo4j
8.8ms
graph LR
  P[Person]:::person -->|ACTED_IN| M[Movie]:::movie

Single-Hop Traversals

movies by Spielberg

TETRA, 531% faster
Bare metal: 983µs
TETRA container: 1.1ms
Neo4j container: 7.1ms
MATCH (d:Person {name: 'Steven Spielberg'})-[:DIRECTED]->(m:Movie) RETURN m.title

30 rows · 300 iterations

Latency distribution (µs)

p50 — median

Bare metal
983µs
TETRA
1.1ms
Neo4j
7.1ms

σ — std dev

TETRA
114µs
Neo4j
622µs

p99 — worst case

TETRA
1.6ms
Neo4j
10.1ms
graph LR
  A:::any -->|query| B[result]:::result

Single-Hop Traversals

users who rated Matrix

TETRA, 342% faster
Bare metal: 434µs
TETRA container: 609µs
Neo4j container: 2.4ms
MATCH (m:Movie {title: 'Matrix, The'})<-[:RATED]-(u:User) RETURN count(u)

1 rows · 300 iterations

Latency distribution (µs)

p50 — median

Bare metal
434µs
TETRA
609µs
Neo4j
2.4ms

σ — std dev

TETRA
99µs
Neo4j
380µs

p99 — worst case

TETRA
928µs
Neo4j
4.1ms
graph LR
  P[Person]:::person -->|ACTED_IN| M[Movie]:::movie
  O[Other]:::person -->|ACTED_IN| M

Two-Hop Patterns

co-actors of Keanu

TETRA, 26% faster
Bare metal: 1.2ms
TETRA container: 1.3ms
Neo4j container: 1.4ms
MATCH (p:Person {name: 'Keanu Reeves'})-[:ACTED_IN]->(m:Movie)<-[:ACTED_IN]-(a:Person) RETURN DISTINCT a.name LIMIT 50

50 rows · 300 iterations

Latency distribution (µs)

p50 — median

Bare metal
1.2ms
TETRA
1.3ms
Neo4j
1.4ms

σ — std dev

TETRA
112µs
Neo4j
187µs

p99 — worst case

TETRA
1.9ms
Neo4j
2.4ms
graph RL
  P[Person]:::person -->|rel| M[Movie]:::movie

Two-Hop Patterns

directors of Keanu movies

TETRA, 176% faster
Bare metal: 1.1ms
TETRA container: 1.2ms
Neo4j container: 3.7ms
MATCH (p:Person {name: 'Keanu Reeves'})-[:ACTED_IN]->(m:Movie)<-[:DIRECTED]-(d:Person) RETURN DISTINCT d.name

33 rows · 300 iterations

Latency distribution (µs)

p50 — median

Bare metal
1.1ms
TETRA
1.2ms
Neo4j
3.7ms

σ — std dev

TETRA
162µs
Neo4j
203µs

p99 — worst case

TETRA
1.7ms
Neo4j
4.7ms
graph LR
  M[Movie]:::movie -->|IN_GENRE| G[Genre]:::genre

Two-Hop Patterns

genres Keanu acts in

TETRA, 450% faster
Bare metal: 919µs
TETRA container: 1.1ms
Neo4j container: 3.6ms
MATCH (p:Person {name: 'Keanu Reeves'})-[:ACTED_IN]->(m:Movie)-[:IN_GENRE]->(g:Genre) RETURN DISTINCT g.name

14 rows · 300 iterations

Latency distribution (µs)

p50 — median

Bare metal
919µs
TETRA
1.1ms
Neo4j
3.6ms

σ — std dev

TETRA
137µs
Neo4j
1.0ms

p99 — worst case

TETRA
2.0ms
Neo4j
11.0ms
graph LR
  M[Movie]:::movie -->|IN_GENRE| G[Genre]:::genre

Two-Hop Patterns

actors same genre as Matrix

Neo4j, 386% faster
Bare metal: 4.0ms
TETRA container: 4.5ms
Neo4j container: 964µs
MATCH (m:Movie {title: 'Matrix, The'})-[:IN_GENRE]->(g:Genre)<-[:IN_GENRE]-(other:Movie)<-[:ACTED_IN]-(a:Person) RETURN DISTINCT a.name LIMIT 50

50 rows · 300 iterations

Latency distribution (µs)

p50 — median

Bare metal
4.0ms
TETRA
4.5ms
Neo4j
964µs

σ — std dev

TETRA
633µs
Neo4j
94µs

p99 — worst case

TETRA
6.8ms
Neo4j
1.4ms
graph LR
  A:::any -->|query| B[result]:::result

Two-Hop Patterns

users rated Keanu movies

TETRA, 188% faster
Bare metal: 851µs
TETRA container: 1.1ms
Neo4j container: 3.6ms
MATCH (p:Person {name: 'Keanu Reeves'})-[:ACTED_IN]->(m:Movie)<-[:RATED]-(u:User) RETURN count(DISTINCT u)

1 rows · 300 iterations

Latency distribution (µs)

p50 — median

Bare metal
851µs
TETRA
1.1ms
Neo4j
3.6ms

σ — std dev

TETRA
126µs
Neo4j
177µs

p99 — worst case

TETRA
1.6ms
Neo4j
4.6ms
graph LR
  A:::person -->|rel| B:::movie -->|rel| C:::person -->|rel| D:::genre

Three-Hop Chains

3-hop actor chain

Neo4j, 28% faster
Bare metal: 1.6ms
TETRA container: 1.6ms
Neo4j container: 1.4ms
MATCH (a:Person {name: 'Keanu Reeves'})-[:ACTED_IN]->(m1)<-[:ACTED_IN]-(b)-[:ACTED_IN]->(m2) RETURN DISTINCT m2.title LIMIT 50

50 rows · 300 iterations

Latency distribution (µs)

p50 — median

Bare metal
1.6ms
TETRA
1.6ms
Neo4j
1.4ms

σ — std dev

TETRA
160µs
Neo4j
100µs

p99 — worst case

TETRA
2.3ms
Neo4j
1.8ms
graph LR
  M[Movie]:::movie -->|IN_GENRE| G[Genre]:::genre

Three-Hop Chains

actor→movie→genre→movie

Neo4j, 479% faster
Bare metal: 5.5ms
TETRA container: 6.0ms
Neo4j container: 1.2ms
MATCH (a:Person {name: 'Tom Hanks'})-[:ACTED_IN]->(m)-[:IN_GENRE]->(g)<-[:IN_GENRE]-(rec) RETURN DISTINCT rec.title LIMIT 30

30 rows · 300 iterations

Latency distribution (µs)

p50 — median

Bare metal
5.5ms
TETRA
6.0ms
Neo4j
1.2ms

σ — std dev

TETRA
613µs
Neo4j
82µs

p99 — worst case

TETRA
8.1ms
Neo4j
1.4ms
graph LR
  A:::any -->|query| B[result]:::result

Three-Hop Chains

user→movie→actor→movie

Neo4j, 204% faster
Bare metal: 695µs
TETRA container: 754µs
Neo4j container: 418µs
MATCH (u:User {userId: '1'})-[:RATED]->(m)<-[:ACTED_IN]-(a)-[:ACTED_IN]->(rec) RETURN DISTINCT rec.title LIMIT 30

30 rows · 300 iterations

Latency distribution (µs)

p50 — median

Bare metal
695µs
TETRA
754µs
Neo4j
418µs

σ — std dev

TETRA
146µs
Neo4j
26µs

p99 — worst case

TETRA
1.7ms
Neo4j
560µs
graph LR
  M[Movie]:::movie -->|IN_GENRE| G[Genre]:::genre

Aggregations

movies per genre

TETRA, 942% faster
Bare metal: 135µs
TETRA container: 267µs
Neo4j container: 2.3ms
MATCH (m:Movie)-[:IN_GENRE]->(g:Genre) RETURN g.name, count(m) AS cnt ORDER BY cnt DESC LIMIT 10

10 rows · 300 iterations

Latency distribution (µs)

p50 — median

Bare metal
135µs
TETRA
267µs
Neo4j
2.3ms

σ — std dev

TETRA
28µs
Neo4j
388µs

p99 — worst case

TETRA
403µs
Neo4j
4.2ms
graph LR
  A:::any -->|traverse| B:::any -->|aggregate| R[result]:::result

Aggregations

top rated movies

TETRA, 408% faster
Bare metal: 5.6ms
TETRA container: 6.2ms
Neo4j container: 37.7ms
MATCH (u:User)-[r:RATED]->(m:Movie) RETURN m.title, count(r) AS ratings ORDER BY ratings DESC LIMIT 10

10 rows · 300 iterations

Latency distribution (µs)

p50 — median

Bare metal
5.6ms
TETRA
6.2ms
Neo4j
37.7ms

σ — std dev

TETRA
933µs
Neo4j
3.0ms

p99 — worst case

TETRA
10.0ms
Neo4j
50.8ms
graph LR
  A:::any -->|traverse| B:::any -->|aggregate| R[result]:::result

Aggregations

prolific actors

TETRA, 151% faster
Bare metal: 5.3ms
TETRA container: 6.0ms
Neo4j container: 17.0ms
MATCH (a:Person)-[:ACTED_IN]->(m:Movie) RETURN a.name, count(m) AS movies ORDER BY movies DESC LIMIT 10

10 rows · 300 iterations

Latency distribution (µs)

p50 — median

Bare metal
5.3ms
TETRA
6.0ms
Neo4j
17.0ms

σ — std dev

TETRA
451µs
Neo4j
777µs

p99 — worst case

TETRA
7.7ms
Neo4j
19.3ms
graph LR
  A:::any -->|traverse| B:::any -->|aggregate| R[result]:::result

Aggregations

prolific directors

TETRA, 211% faster
Bare metal: 1.7ms
TETRA container: 2.1ms
Neo4j container: 7.8ms
MATCH (d:Person)-[:DIRECTED]->(m:Movie) RETURN d.name, count(m) AS movies ORDER BY movies DESC LIMIT 10

10 rows · 300 iterations

Latency distribution (µs)

p50 — median

Bare metal
1.7ms
TETRA
2.1ms
Neo4j
7.8ms

σ — std dev

TETRA
333µs
Neo4j
1.0ms

p99 — worst case

TETRA
3.6ms
Neo4j
11.2ms
graph LR
  M[Movie]:::movie -->|IN_GENRE| G[Genre]:::genre

Aggregations

avg ratings per genre

TETRA, 1,482% faster
Bare metal: 3.6ms
TETRA container: 4.1ms
Neo4j container: 65.6ms
MATCH (u:User)-[r:RATED]->(m:Movie)-[:IN_GENRE]->(g:Genre) RETURN g.name, avg(r.rating) AS avg_rating ORDER BY avg_rating DESC LIMIT 10

10 rows · 300 iterations

Latency distribution (µs)

p50 — median

Bare metal
3.6ms
TETRA
4.1ms
Neo4j
65.6ms

σ — std dev

TETRA
375µs
Neo4j
5.0ms

p99 — worst case

TETRA
6.1ms
Neo4j
96.5ms
graph LR
  N[genre popularity (count)]:::genre -->|count| R[result]:::result

Aggregations

genre popularity (count)

TETRA, 8,310% faster
Bare metal: 389µs
TETRA container: 531µs
Neo4j container: 35.1ms
MATCH (u:User)-[:RATED]->(m:Movie)-[:IN_GENRE]->(g:Genre) RETURN g.name, count(u) AS popularity ORDER BY popularity DESC LIMIT 10

10 rows · 300 iterations

Latency distribution (µs)

p50 — median

Bare metal
389µs
TETRA
531µs
Neo4j
35.1ms

σ — std dev

TETRA
45µs
Neo4j
3.0ms

p99 — worst case

TETRA
780µs
Neo4j
65.6ms
graph LR
  A[start]:::any -->|match| B:::any -->|WITH| C[result]:::result

WITH Pipeline

forward WITH + filter

TETRA, 82% faster
Bare metal: 642µs
TETRA container: 785µs
Neo4j container: 866µs
MATCH (p:Person) WITH p WHERE p.name STARTS WITH 'Tom' RETURN p.name LIMIT 20

20 rows · 300 iterations

Latency distribution (µs)

p50 — median

Bare metal
642µs
TETRA
785µs
Neo4j
866µs

σ — std dev

TETRA
52µs
Neo4j
116µs

p99 — worst case

TETRA
988µs
Neo4j
1.8ms
graph LR
  A[start]:::any -->|match| B:::any -->|WITH| C[result]:::result

WITH Pipeline

forward WITH + DISTINCT

Neo4j, 100% faster
Bare metal: 429µs
TETRA container: 554µs
Neo4j container: 379µs
MATCH (a:Person)-[:ACTED_IN]->(m) WITH DISTINCT a RETURN a.name LIMIT 20

20 rows · 300 iterations

Latency distribution (µs)

p50 — median

Bare metal
429µs
TETRA
554µs
Neo4j
379µs

σ — std dev

TETRA
90µs
Neo4j
37µs

p99 — worst case

TETRA
1.1ms
Neo4j
549µs
graph LR
  A[start]:::any -->|match| B:::any -->|WITH| C[result]:::result

WITH Pipeline

WITH agg + filter

TETRA, 195% faster
Bare metal: 2.4ms
TETRA container: 2.9ms
Neo4j container: 9.2ms
MATCH (a:Person)-[:ACTED_IN]->(m:Movie) WITH a, count(m) AS movies WHERE movies > 5 RETURN a.name, movies ORDER BY movies DESC LIMIT 10

10 rows · 300 iterations

Latency distribution (µs)

p50 — median

Bare metal
2.4ms
TETRA
2.9ms
Neo4j
9.2ms

σ — std dev

TETRA
288µs
Neo4j
695µs

p99 — worst case

TETRA
4.0ms
Neo4j
11.8ms
graph LR
  A[start]:::any -->|match| B:::any -->|WITH| C[result]:::result

WITH Pipeline

WITH stage barrier

Neo4j, 82% faster
Bare metal: 470µs
TETRA container: 588µs
Neo4j container: 387µs
MATCH (p:Person)-[:ACTED_IN]->(m:Movie) WITH p MATCH (p)-[:DIRECTED]->(d:Movie) RETURN p.name, d.title LIMIT 20

20 rows · 300 iterations

Latency distribution (µs)

p50 — median

Bare metal
470µs
TETRA
588µs
Neo4j
387µs

σ — std dev

TETRA
94µs
Neo4j
33µs

p99 — worst case

TETRA
933µs
Neo4j
512µs
graph LR
  A[start]:::any -->|match| B:::any -->|WITH| C[result]:::result

WITH Pipeline

director's other movies

TETRA, 175% faster
Bare metal: 506µs
TETRA container: 643µs
Neo4j container: 2.3ms
MATCH (m:Movie {title: 'Matrix, The'})<-[:DIRECTED]-(d) WITH d MATCH (d)-[:DIRECTED]->(other) RETURN other.title

14 rows · 300 iterations

Latency distribution (µs)

p50 — median

Bare metal
506µs
TETRA
643µs
Neo4j
2.3ms

σ — std dev

TETRA
86µs
Neo4j
151µs

p99 — worst case

TETRA
1.2ms
Neo4j
3.3ms
graph LR
  U[User]:::user -->|RATED| M[Movie]:::movie
  O[Other]:::user -->|RATED| M

WITH Pipeline

collab filter (similar)

TETRA, 36% faster
Bare metal: 318µs
TETRA container: 457µs
Neo4j container: 566µs
MATCH (u:User {userId: '1'})-[:RATED]->(m:Movie)<-[:RATED]-(other:User) WITH other, count(m) AS shared WHERE shared > 3 RETURN other.name, shared ORDER BY shared DESC LIMIT 10

10 rows · 300 iterations

Latency distribution (µs)

p50 — median

Bare metal
318µs
TETRA
457µs
Neo4j
566µs

σ — std dev

TETRA
75µs
Neo4j
102µs

p99 — worst case

TETRA
1.1ms
Neo4j
1.5ms
graph LR
  A:::person -->|rel| B:::movie -->|rel| C:::genre

Multi-MATCH

MATCH+MATCH shared var

TETRA, 218% faster
Bare metal: 1.0ms
TETRA container: 1.2ms
Neo4j container: 3.6ms
MATCH (a:Person {name: 'Keanu Reeves'}) MATCH (a)-[:ACTED_IN]->(m:Movie) RETURN m.title

33 rows · 300 iterations

Latency distribution (µs)

p50 — median

Bare metal
1.0ms
TETRA
1.2ms
Neo4j
3.6ms

σ — std dev

TETRA
133µs
Neo4j
287µs

p99 — worst case

TETRA
1.7ms
Neo4j
5.4ms
graph LR
  A:::person -->|rel| B:::movie -->|rel| C:::genre

Multi-MATCH

MATCH+MATCH chain

TETRA, 200% faster
Bare metal: 1.1ms
TETRA container: 1.1ms
Neo4j container: 3.7ms
MATCH (a:Person {name: 'Tom Hanks'})-[:ACTED_IN]->(m) MATCH (m)<-[:DIRECTED]-(d) RETURN d.name, m.title

41 rows · 300 iterations

Latency distribution (µs)

p50 — median

Bare metal
1.1ms
TETRA
1.1ms
Neo4j
3.7ms

σ — std dev

TETRA
95µs
Neo4j
244µs

p99 — worst case

TETRA
1.6ms
Neo4j
4.8ms
graph LR
  A:::any -->|query| B[result]:::result

Multi-MATCH

return both endpoints

Neo4j, 31% faster
Bare metal: 418µs
TETRA container: 457µs
Neo4j container: 426µs
MATCH (a:Person)-[:ACTED_IN]->(m:Movie) RETURN a.name, m.title LIMIT 30

30 rows · 300 iterations

Latency distribution (µs)

p50 — median

Bare metal
418µs
TETRA
457µs
Neo4j
426µs

σ — std dev

TETRA
71µs
Neo4j
42µs

p99 — worst case

TETRA
783µs
Neo4j
598µs
graph LR
  A:::any -->|query| B[result]:::result

Multi-MATCH

return all 3 vars

Neo4j, 120% faster
Bare metal: 562µs
TETRA container: 621µs
Neo4j container: 430µs
MATCH (a:Person)-[:ACTED_IN]->(m:Movie)-[:IN_GENRE]->(g:Genre) RETURN a.name, m.title, g.name LIMIT 30

30 rows · 300 iterations

Latency distribution (µs)

p50 — median

Bare metal
562µs
TETRA
621µs
Neo4j
430µs

σ — std dev

TETRA
105µs
Neo4j
37µs

p99 — worst case

TETRA
1.3ms
Neo4j
591µs
graph LR
  A:::any -->|query| B[result]:::result

Multi-MATCH

edge type() in RETURN

Neo4j, 106% faster
Bare metal: 6.6ms
TETRA container: 6.0ms
Neo4j container: 3.4ms
MATCH (m:Movie {title: 'Matrix, The'})<-[r]-(p) RETURN type(r), p.name

265 rows · 300 iterations

Latency distribution (µs)

p50 — median

Bare metal
6.6ms
TETRA
6.0ms
Neo4j
3.4ms

σ — std dev

TETRA
771µs
Neo4j
246µs

p99 — worst case

TETRA
9.7ms
Neo4j
4.7ms
graph LR
  A:::any -->|query| B[result]:::result

Multi-MATCH

whole node + prop

TETRA, 189% faster
Bare metal: 1.1ms
TETRA container: 1.2ms
Neo4j container: 3.7ms
MATCH (p:Person {name: 'Keanu Reeves'})-[:ACTED_IN]->(m:Movie) RETURN p, m.title

33 rows · 300 iterations

Latency distribution (µs)

p50 — median

Bare metal
1.1ms
TETRA
1.2ms
Neo4j
3.7ms

σ — std dev

TETRA
106µs
Neo4j
311µs

p99 — worst case

TETRA
1.8ms
Neo4j
5.2ms
graph LR
  A:::person -->|rel| B:::movie -->|rel| C:::genre

Multi-MATCH

3-match chain

TETRA, 229% faster
Bare metal: 1.4ms
TETRA container: 1.3ms
Neo4j container: 3.9ms
MATCH (a:Person {name: 'Tom Hanks'}) MATCH (a)-[:ACTED_IN]->(m) MATCH (m)-[:IN_GENRE]->(g) RETURN g.name

104 rows · 300 iterations

Latency distribution (µs)

p50 — median

Bare metal
1.4ms
TETRA
1.3ms
Neo4j
3.9ms

σ — std dev

TETRA
115µs
Neo4j
330µs

p99 — worst case

TETRA
1.7ms
Neo4j
5.6ms
graph LR
  A:::any -->|query| B[result]:::result

Multi-MATCH

multi-pattern shared

TETRA, 121% faster
Bare metal: 1.1ms
TETRA container: 1.2ms
Neo4j container: 3.7ms
MATCH (a:Person {name: 'Keanu Reeves'})-[:ACTED_IN]->(m), (m)<-[:DIRECTED]-(d) RETURN d.name, m.title

37 rows · 300 iterations

Latency distribution (µs)

p50 — median

Bare metal
1.1ms
TETRA
1.2ms
Neo4j
3.7ms

σ — std dev

TETRA
294µs
Neo4j
430µs

p99 — worst case

TETRA
2.8ms
Neo4j
6.2ms
graph LR
  A[Keanu]:::person -.->|shortest| B[Tom Hanks]:::person

Exotic Patterns

shortestPath

TETRA, 1,023% faster
Bare metal: 581µs
TETRA container: 791µs
Neo4j container: 6.9ms
MATCH p = shortestPath((a:Person {name: 'Tom Hanks'})-[*]-(b:Person {name: 'Kevin Bacon'})) RETURN length(p)

1 rows · 300 iterations

Latency distribution (µs)

p50 — median

Bare metal
581µs
TETRA
791µs
Neo4j
6.9ms

σ — std dev

TETRA
106µs
Neo4j
1.0ms

p99 — worst case

TETRA
1.3ms
Neo4j
14.6ms
graph LR
  M[Movie]:::movie -.->|OPTIONAL| D[Director?]:::person

Exotic Patterns

OPTIONAL MATCH basic

Neo4j, 87% faster
Bare metal: 838µs
TETRA container: 1.3ms
Neo4j container: 3.6ms
MATCH (a:Person {name: 'Keanu Reeves'}) OPTIONAL MATCH (a)-[:DIRECTED]->(m:Movie) RETURN a.name, m.title

1 rows · 300 iterations

Latency distribution (µs)

p50 — median

Bare metal
838µs
TETRA
1.3ms
Neo4j
3.6ms

σ — std dev

TETRA
1.0ms
Neo4j
186µs

p99 — worst case

TETRA
8.8ms
Neo4j
4.7ms
graph LR
  M[Movie]:::movie -.->|OPTIONAL| D[Director?]:::person

Exotic Patterns

OPTIONAL MATCH chain

TETRA, 45% faster
Bare metal: 1.1ms
TETRA container: 1.3ms
Neo4j container: 3.7ms
MATCH (p:Person {name: 'Tom Hanks'})-[:ACTED_IN]->(m:Movie) OPTIONAL MATCH (m)<-[:DIRECTED]-(d:Person) RETURN m.title, d.name

41 rows · 300 iterations

Latency distribution (µs)

p50 — median

Bare metal
1.1ms
TETRA
1.3ms
Neo4j
3.7ms

σ — std dev

TETRA
437µs
Neo4j
181µs

p99 — worst case

TETRA
3.3ms
Neo4j
4.8ms
graph LR
  M[Movie]:::movie -.->|OPTIONAL| D[Director?]:::person

Exotic Patterns

OPTIONAL null emit

TETRA, 167% faster
Bare metal: 436µs
TETRA container: 640µs
Neo4j container: 2.3ms
MATCH (m:Movie {title: 'Toy Story'}) OPTIONAL MATCH (m)<-[:DIRECTED]-(d:Person) RETURN m.title, d.name

1 rows · 300 iterations

Latency distribution (µs)

p50 — median

Bare metal
436µs
TETRA
640µs
Neo4j
2.3ms

σ — std dev

TETRA
119µs
Neo4j
172µs

p99 — worst case

TETRA
1.2ms
Neo4j
3.2ms
graph LR
  A:::any -->|query| B[result]:::result

Exotic Patterns

named path return

Neo4j, 157% faster
Bare metal: 1.2ms
TETRA container: 2.3ms
Neo4j container: 3.9ms
MATCH p = (a:Person {name: 'Keanu Reeves'})-[:ACTED_IN]->(m:Movie) RETURN p

33 rows · 300 iterations

Latency distribution (µs)

p50 — median

Bare metal
1.2ms
TETRA
2.3ms
Neo4j
3.9ms

σ — std dev

TETRA
3.0ms
Neo4j
244µs

p99 — worst case

TETRA
12.6ms
Neo4j
4.9ms
graph LR
  A:::any -->|query| B[result]:::result

Exotic Patterns

edge var type()

TETRA, 81% faster
Bare metal: 1.0ms
TETRA container: 1.2ms
Neo4j container: 3.6ms
MATCH (p:Person {name: 'Keanu Reeves'})-[r]->(m) RETURN type(r), m.title

33 rows · 300 iterations

Latency distribution (µs)

p50 — median

Bare metal
1.0ms
TETRA
1.2ms
Neo4j
3.6ms

σ — std dev

TETRA
263µs
Neo4j
200µs

p99 — worst case

TETRA
2.6ms
Neo4j
4.7ms
graph LR
  A:::any -->|query| B[result]:::result

Exotic Patterns

edge var props

Neo4j, 20% faster
Bare metal: 182µs
TETRA container: 297µs
Neo4j container: 372µs
MATCH (u:User {userId: '1'})-[r:RATED]->(m:Movie) RETURN m.title, r.rating LIMIT 20

20 rows · 300 iterations

Latency distribution (µs)

p50 — median

Bare metal
182µs
TETRA
297µs
Neo4j
372µs

σ — std dev

TETRA
69µs
Neo4j
34µs

p99 — worst case

TETRA
646µs
Neo4j
540µs
graph LR
  A:::any -->|query| B[result]:::result

Exotic Patterns

RETURN *

TETRA, 247% faster
Bare metal: 1.0ms
TETRA container: 1.3ms
Neo4j container: 3.8ms
MATCH (p:Person {name: 'Tom Hanks'})-[:ACTED_IN]->(m:Movie) RETURN *

38 rows · 300 iterations

Latency distribution (µs)

p50 — median

Bare metal
1.0ms
TETRA
1.3ms
Neo4j
3.8ms

σ — std dev

TETRA
161µs
Neo4j
435µs

p99 — worst case

TETRA
1.9ms
Neo4j
6.6ms
graph LR
  A[Node]:::person
  B[Node]:::movie

Exotic Patterns

cartesian 2-node

TETRA, 204% faster
Bare metal: 1.5ms
TETRA container: 1.9ms
Neo4j container: 6.9ms
MATCH (a:Person {name: 'Keanu Reeves'}), (b:Person {name: 'Tom Hanks'}) RETURN a.name, b.name

1 rows · 300 iterations

Latency distribution (µs)

p50 — median

Bare metal
1.5ms
TETRA
1.9ms
Neo4j
6.9ms

σ — std dev

TETRA
169µs
Neo4j
300µs

p99 — worst case

TETRA
2.8ms
Neo4j
8.5ms
graph LR
  P[Person]:::person -->|EXISTS?| M[Movie]:::movie

Exotic Patterns

EXISTS in WHERE

Neo4j, 567% faster
Bare metal: 816µs
TETRA container: 1.3ms
Neo4j container: 474µs
MATCH (p:Person) WHERE exists { (p)-[:DIRECTED]->() } RETURN p.name LIMIT 20

20 rows · 300 iterations

Latency distribution (µs)

p50 — median

Bare metal
816µs
TETRA
1.3ms
Neo4j
474µs

σ — std dev

TETRA
1.0ms
Neo4j
127µs

p99 — worst case

TETRA
8.0ms
Neo4j
1.2ms
graph LR
  A:::any -->|query| B[result]:::result

Exotic Patterns

OR in WHERE

Neo4j, 33% faster
Bare metal: 493µs
TETRA container: 629µs
Neo4j container: 1.3ms
MATCH (m:Movie) WHERE m.title STARTS WITH 'The' OR m.title STARTS WITH 'A ' RETURN m.title LIMIT 20

20 rows · 300 iterations

Latency distribution (µs)

p50 — median

Bare metal
493µs
TETRA
629µs
Neo4j
1.3ms

σ — std dev

TETRA
210µs
Neo4j
122µs

p99 — worst case

TETRA
2.0ms
Neo4j
1.5ms
graph LR
  A:::any -->|query| B[result]:::result

Exotic Patterns

count + group + order

TETRA, 104% faster
Bare metal: 5.4ms
TETRA container: 6.4ms
Neo4j container: 17.3ms
MATCH (p:Person)-[:ACTED_IN]->(m:Movie) RETURN p.name, count(m) AS movies ORDER BY movies DESC LIMIT 10

10 rows · 300 iterations

Latency distribution (µs)

p50 — median

Bare metal
5.4ms
TETRA
6.4ms
Neo4j
17.3ms

σ — std dev

TETRA
1.0ms
Neo4j
3.0ms

p99 — worst case

TETRA
11.3ms
Neo4j
23.0ms
graph LR
  A:::person -->|rel| B:::movie -->|rel| C:::person -->|rel| D:::genre

Variable-Length Paths

4-hop actor chain

Neo4j, 70% faster
Bare metal: 1.9ms
TETRA container: 2.1ms
Neo4j container: 1.4ms
MATCH (a:Person {name: 'Keanu Reeves'})-[:ACTED_IN]->(m1)<-[:ACTED_IN]-(b)-[:ACTED_IN]->(m2)<-[:ACTED_IN]-(c) RETURN DISTINCT c.name LIMIT 50

50 rows · 300 iterations

Latency distribution (µs)

p50 — median

Bare metal
1.9ms
TETRA
2.1ms
Neo4j
1.4ms

σ — std dev

TETRA
291µs
Neo4j
105µs

p99 — worst case

TETRA
3.9ms
Neo4j
2.3ms
graph LR
  KB[Kevin Bacon]:::person -.->|*1..2| O[Person]:::person

Variable-Length Paths

Kevin Bacon 2-degree

TETRA, 143% faster
Bare metal: 1.5ms
TETRA container: 1.3ms
Neo4j container: 4.0ms
MATCH (kb:Person {name: 'Kevin Bacon'})-[:ACTED_IN]->(m)<-[:ACTED_IN]-(other) RETURN DISTINCT other.name LIMIT 100

90 rows · 300 iterations

Latency distribution (µs)

p50 — median

Bare metal
1.5ms
TETRA
1.3ms
Neo4j
4.0ms

σ — std dev

TETRA
135µs
Neo4j
284µs

p99 — worst case

TETRA
2.1ms
Neo4j
5.1ms
graph LR
  KB[Kevin Bacon]:::person -.->|*1..3| O[Person]:::person

Variable-Length Paths

Kevin Bacon 3-degree

Neo4j, 83% faster
Bare metal: 2.3ms
TETRA container: 2.3ms
Neo4j container: 1.4ms
MATCH (kb:Person {name: 'Kevin Bacon'})-[:ACTED_IN]->(m1)<-[:ACTED_IN]-(a)-[:ACTED_IN]->(m2)<-[:ACTED_IN]-(b) RETURN DISTINCT b.name LIMIT 100

100 rows · 300 iterations

Latency distribution (µs)

p50 — median

Bare metal
2.3ms
TETRA
2.3ms
Neo4j
1.4ms

σ — std dev

TETRA
199µs
Neo4j
75µs

p99 — worst case

TETRA
3.3ms
Neo4j
1.8ms
graph LR
  KB[Kevin Bacon]:::person -.->|*1..4| O[Person]:::person

Variable-Length Paths

Kevin Bacon 4-degree

Neo4j, 305% faster
Bare metal: 6.1ms
TETRA container: 6.3ms
Neo4j container: 1.4ms
MATCH (kb:Person {name: 'Kevin Bacon'})-[:ACTED_IN]->(m1)<-[:ACTED_IN]-(a)-[:ACTED_IN]->(m2)<-[:ACTED_IN]-(b)-[:ACTED_IN]->(m3)<-[:ACTED_IN]-(c) RETURN DISTINCT c.name LIMIT 100

100 rows · 300 iterations

Latency distribution (µs)

p50 — median

Bare metal
6.1ms
TETRA
6.3ms
Neo4j
1.4ms

σ — std dev

TETRA
515µs
Neo4j
124µs

p99 — worst case

TETRA
8.1ms
Neo4j
2.0ms
graph LR
  KB[Kevin Bacon]:::person -.->|*1..4| O[Person]:::person

Variable-Length Paths

VLP 1..4 from Keanu

TETRA, 188% faster
Bare metal: 1.1ms
TETRA container: 1.3ms
Neo4j container: 3.7ms
MATCH (p:Person {name: 'Keanu Reeves'})-[:ACTED_IN*1..4]->(m:Movie) RETURN DISTINCT m.title LIMIT 100

33 rows · 300 iterations

Latency distribution (µs)

p50 — median

Bare metal
1.1ms
TETRA
1.3ms
Neo4j
3.7ms

σ — std dev

TETRA
95µs
Neo4j
216µs

p99 — worst case

TETRA
1.7ms
Neo4j
4.9ms
graph LR
  KB[Kevin Bacon]:::person -.->|*1..6| O[Person]:::person

Variable-Length Paths

VLP 1..6 Kevin Bacon

Neo4j, 254% faster
Bare metal: 5.6ms
TETRA container: 6.0ms
Neo4j container: 1.6ms
MATCH (kb:Person {name: 'Kevin Bacon'})-[:ACTED_IN*1..6]-(other:Person) RETURN DISTINCT other.name LIMIT 100

100 rows · 300 iterations

Latency distribution (µs)

p50 — median

Bare metal
5.6ms
TETRA
6.0ms
Neo4j
1.6ms

σ — std dev

TETRA
838µs
Neo4j
161µs

p99 — worst case

TETRA
9.2ms
Neo4j
2.6ms
graph LR
  M[Movie]:::movie -->|IN_GENRE| G[Genre]:::genre

Variable-Length Paths

full genre cross-agg

TETRA, 76% faster
Bare metal: 15.3ms
TETRA container: 16.4ms
Neo4j container: 37.9ms
MATCH (n)-[r]->(m) RETURN labels(n)[0] AS src, labels(m)[0] AS dst, type(r), count(r) ORDER BY count(r) DESC

5 rows · 300 iterations

Latency distribution (µs)

p50 — median

Bare metal
15.3ms
TETRA
16.4ms
Neo4j
37.9ms

σ — std dev

TETRA
2.0ms
Neo4j
673µs

p99 — worst case

TETRA
22.9ms
Neo4j
40.4ms
graph LR
  U[User]:::user -->|RATED| M[Movie]:::movie
  O[Other]:::user -->|RATED| M

Real App Queries

content-based recs

Neo4j, 6,327% faster
Bare metal: 4.8ms
TETRA container: 7.8ms
Neo4j container: 577µs
MATCH (u:User {userId: '1'})-[:RATED]->(m:Movie)-[:IN_GENRE]->(g:Genre)<-[:IN_GENRE]-(rec:Movie) WHERE NOT (u)-[:RATED]->(rec) RETURN DISTINCT rec.title LIMIT 20

20 rows · 300 iterations

Latency distribution (µs)

p50 — median

Bare metal
4.8ms
TETRA
7.8ms
Neo4j
577µs

σ — std dev

TETRA
9.0ms
Neo4j
143µs

p99 — worst case

TETRA
96.4ms
Neo4j
1.5ms
graph LR
  U[User]:::user -->|RATED| M[Movie]:::movie
  O[Other]:::user -->|RATED| M

Real App Queries

collab filter recs

TETRA, 15,754% faster
Bare metal: 503µs
TETRA container: 1.1ms
Neo4j container: 509ms
MATCH (u:User {userId: '1'})-[:RATED]->(m:Movie)<-[:RATED]-(other:User)-[:RATED]->(rec:Movie) WHERE NOT (u)-[:RATED]->(rec) RETURN rec.title, count(other) AS score ORDER BY score DESC LIMIT 20

20 rows · 300 iterations

Latency distribution (µs)

p50 — median

Bare metal
503µs
TETRA
1.1ms
Neo4j
509ms

σ — std dev

TETRA
651µs
Neo4j
13.0ms

p99 — worst case

TETRA
3.7ms
Neo4j
587ms
graph LR
  A:::any -->|query| B[result]:::result

Real App Queries

similar users

Neo4j, 91% faster
Bare metal: 258µs
TETRA container: 499µs
Neo4j container: 715µs
MATCH (u:User {userId: '1'})-[:RATED]->(m:Movie)<-[:RATED]-(other:User) RETURN other.name, count(m) AS shared ORDER BY shared DESC LIMIT 20

20 rows · 300 iterations

Latency distribution (µs)

p50 — median

Bare metal
258µs
TETRA
499µs
Neo4j
715µs

σ — std dev

TETRA
367µs
Neo4j
58µs

p99 — worst case

TETRA
2.1ms
Neo4j
1.1ms
graph LR
  P[Person]:::person -->|ACTED_IN| M[Movie]:::movie

Real App Queries

actor filmography

TETRA, 30% faster
Bare metal: 984µs
TETRA container: 1.3ms
Neo4j container: 3.7ms
MATCH (a:Person {name: 'Tom Hanks'})-[:ACTED_IN]->(m:Movie) RETURN m.title, m.year ORDER BY m.year DESC

38 rows · 300 iterations

Latency distribution (µs)

p50 — median

Bare metal
984µs
TETRA
1.3ms
Neo4j
3.7ms

σ — std dev

TETRA
530µs
Neo4j
235µs

p99 — worst case

TETRA
3.7ms
Neo4j
4.8ms
graph RL
  A:::person -->|ACTED_IN| M:::movie
  B:::person -->|ACTED_IN| M

Real App Queries

movie detail page

Neo4j, 134% faster
Bare metal: 6.5ms
TETRA container: 6.3ms
Neo4j container: 3.4ms
MATCH (m:Movie {title: 'Matrix, The'})<-[r]-(p) RETURN type(r), p.name

265 rows · 300 iterations

Latency distribution (µs)

p50 — median

Bare metal
6.5ms
TETRA
6.3ms
Neo4j
3.4ms

σ — std dev

TETRA
882µs
Neo4j
228µs

p99 — worst case

TETRA
10.3ms
Neo4j
4.4ms
graph LR
  M[Movie]:::movie -->|IN_GENRE| G[Genre]:::genre

Real App Queries

genre browse

Neo4j, 8% faster
Bare metal: 1.5ms
TETRA container: 1.6ms
Neo4j container: 1.6ms
MATCH (m:Movie)-[:IN_GENRE]->(g:Genre {name: 'Comedy'}) RETURN m.title, m.year ORDER BY m.year DESC LIMIT 50

50 rows · 300 iterations

Latency distribution (µs)

p50 — median

Bare metal
1.5ms
TETRA
1.6ms
Neo4j
1.6ms

σ — std dev

TETRA
1.0ms
Neo4j
974µs

p99 — worst case

TETRA
6.8ms
Neo4j
6.3ms
graph LR
  M[Movie]:::movie

Real App Queries

search by title prefix

TETRA, 62% faster
Bare metal: 540µs
TETRA container: 643µs
Neo4j container: 1.4ms
MATCH (m:Movie) WHERE m.title STARTS WITH 'The' RETURN m.title LIMIT 30

30 rows · 300 iterations

Latency distribution (µs)

p50 — median

Bare metal
540µs
TETRA
643µs
Neo4j
1.4ms

σ — std dev

TETRA
148µs
Neo4j
123µs

p99 — worst case

TETRA
1.3ms
Neo4j
2.1ms
graph LR
  A:::person -->|ACTED_IN| M:::movie
  B:::person -->|ACTED_IN| M

Real App Queries

mutual connections

TETRA, 150% faster
Bare metal: 855µs
TETRA container: 1.2ms
Neo4j container: 3.5ms
MATCH (a:Person {name: 'Keanu Reeves'})-[:ACTED_IN]->(m:Movie)<-[:ACTED_IN]-(b:Person {name: 'Laurence Fishburne'}) RETURN m.title

1 rows · 300 iterations

Latency distribution (µs)

p50 — median

Bare metal
855µs
TETRA
1.2ms
Neo4j
3.5ms

σ — std dev

TETRA
170µs
Neo4j
391µs

p99 — worst case

TETRA
2.0ms
Neo4j
5.0ms
graph LR
  U[User]:::user -->|RATED| M[Movie]:::movie
  O[Other]:::user -->|RATED| M

Real App Queries

friend-of-friend

Neo4j, 40% faster
Bare metal: 1.0ms
TETRA container: 1.2ms
Neo4j container: 1.2ms
MATCH (a:Person {name: 'Tom Hanks'})-[:ACTED_IN]->(m1)<-[:ACTED_IN]-(b)-[:ACTED_IN]->(m2) WHERE m1 <> m2 RETURN DISTINCT b.name, m2.title LIMIT 30

30 rows · 300 iterations

Latency distribution (µs)

p50 — median

Bare metal
1.0ms
TETRA
1.2ms
Neo4j
1.2ms

σ — std dev

TETRA
130µs
Neo4j
65µs

p99 — worst case

TETRA
2.1ms
Neo4j
1.5ms
graph LR
  N[yearly movie count]:::movie -->|count| R[result]:::result

Real App Queries

yearly movie count

TETRA, 106% faster
Bare metal: 790µs
TETRA container: 966µs
Neo4j container: 2.6ms
MATCH (m:Movie) WHERE m.year > 2000 RETURN m.year, count(m) AS cnt ORDER BY m.year

16 rows · 300 iterations

Latency distribution (µs)

p50 — median

Bare metal
790µs
TETRA
966µs
Neo4j
2.6ms

σ — std dev

TETRA
99µs
Neo4j
141µs

p99 — worst case

TETRA
1.6ms
Neo4j
3.3ms
graph LR
  M[Movie]:::movie -->|IN_GENRE| G[Genre]:::genre

Real App Queries

top genres by avg rating

TETRA, 694% faster
Bare metal: 3.6ms
TETRA container: 4.6ms
Neo4j container: 66.6ms
MATCH (u:User)-[r:RATED]->(m:Movie)-[:IN_GENRE]->(g:Genre) RETURN g.name, avg(r.rating) AS avg, count(r) AS total ORDER BY avg DESC LIMIT 10

10 rows · 300 iterations

Latency distribution (µs)

p50 — median

Bare metal
3.6ms
TETRA
4.6ms
Neo4j
66.6ms

σ — std dev

TETRA
922µs
Neo4j
4.0ms

p99 — worst case

TETRA
10.2ms
Neo4j
81.0ms
graph LR
  P:::person -->|ACTED_IN| M:::movie
  O:::person -->|ACTED_IN| M

Real App Queries

most connected actors

TETRA, 456% faster
Bare metal: 9.3ms
TETRA container: 11.9ms
Neo4j container: 68.6ms
MATCH (a:Person)-[:ACTED_IN]->(m:Movie)<-[:ACTED_IN]-(b:Person) WHERE a <> b RETURN a.name, count(DISTINCT b) AS connections ORDER BY connections DESC LIMIT 10

10 rows · 300 iterations

Latency distribution (µs)

p50 — median

Bare metal
9.3ms
TETRA
11.9ms
Neo4j
68.6ms

σ — std dev

TETRA
1.0ms
Neo4j
4.0ms

p99 — worst case

TETRA
17.7ms
Neo4j
98.4ms

Algorithms

Ask questions. Get answers on the graph.

Who’s the most connected? Where are the clusters? What’s the shortest path? Run it, see it.

Centrality 8 algorithms
Degree, betweenness, closeness, PageRank, HITS, eigenvector, clustering coefficient, eccentricity
Community 2 algorithms
Label propagation, connected components — color-coded clusters you can expand and focus
Path 4 algorithms
Shortest path, ego network, articulation points, triangle enumeration
Structure 2 algorithms
K-core decomposition, connected components — find the densest subgraphs
Metric 3 algorithms
Network density, triangle count, graph diameter — whole-graph scalar measures
Diffusion 3 algorithms
Influence spread, anomaly detection, structural fingerprinting

Standards Compliance

No lock-in. Real Cypher.

TETRA passes all 1,611 scenarios in the openCypher TCK. So does Neo4j. Your queries work on both. Move when you want to.

Same language. Faster results.

1,611/1,611
TETRA
1,611/1,611
Neo4j

Throughput

Concurrent scaling. Same hardware. Fair fight.

Mixed workload — queries per second as concurrent clients increase. Both containers capped at 2 CPU / 2 GB RAM on Apple M4 Pro. Native binary shown for reference.

Queries / second by concurrency level

Higher is better
Native binary
TETRA container
Neo4j container
1
546/s
482/s
157/s
2
1,005/s
903/s
319/s
4
1,736/s
1,442/s
563/s
8
2,256/s
1,590/s
664/s
16
2,350/s
1,592/s
634/s
32
2,414/s
1,553/s
542/s
64
2,405/s
1,525/s
545/s
2,414/s
Native peak
1,592/s
TETRA peak
664/s
Neo4j peak
2.4×
TETRA vs Neo4j

Containers: 2 CPU / 2 GB RAM each · Bolt v4.4 · Mixed read workload · Recommendations dataset

Methodology

platform: Apple M4 Pro · 16 GB RAM · macOS · CPU only

environment: Both databases containerized, identical conditions

dataset: Recommendations — 28,863 nodes, 166,261 edges

queries: 78 Cypher queries across 10 categories · 300 iterations each

metric: p99 worst-case latency — lower is better · 5% tie threshold

throughput: Mixed workload, queries per second — higher is better

cypher_tck: 1,611 / 1,611 scenarios (100%)

Demo the TETRA viewer for FREE in your browser.

Explore the recommendations dataset in 3D. 2,330 nodes. 3,506 edges. Running entirely in your browser.

Launch Demo →

Introductory Pricing

$10,864
Configuration
$299/mo
Includes operational support
Get TETRA →

Questions? Schedule a call or reach out.

We use cookies to understand how you use our site and improve your experience. Privacy Policy