Skip to main content

vs Neo4j

LoraDB vs Neo4j

LoraDB leads by 7.99× overall. Neo4j is an the original Cypher graph database. Numbers from the same suite as the overview — identical fixtures, identical seed, identical iteration count.

82 comparable workloads0 omissions12 groups
7.99×slower
Neo4j vs LoraDB overall
Geometric-mean slowdown across the full suite.
54/ 82
Workloads won by LoraDB
28 go to a third engine.
0close calls
Within ~10% on both sides
Workloads where neither engine ran away with the row.

Overall

LoraDB sets the row; Neo4j sits at 7.99× slower.

Geometric-mean slowdown across every workload both engines run. Empty rows happen when the language can’t express the workload — they’re called out below, not hidden.

Per group

Wins by group.

For each group, the workload count, who wins it, and how the per-row tally breaks down between LoraDB, Neo4j, and any third engine that took a row.

  • setup1 workload · winner Grafeo
    LoraDB2.70× slower
    Neo4j1769× slower
    Rows · 10·0·1
  • writes9 workloads · winner Grafeo
    LoraDB0.61× slower
    Neo4j7.75× slower
    Rows · 93·0·6
  • scans6 workloads · winner LoraDB
    LoraDBfastest
    Neo4j24.1× slower
    Rows · 65·0·1
  • predicates12 workloads · winner LoraDB
    LoraDBfastest
    Neo4j3.78× slower
    Rows · 128·0·4
  • strings5 workloads · winner Kuzu
    LoraDB1.22× slower
    Neo4j4.19× slower
    Rows · 50·0·5
  • numerics6 workloads · winner Kuzu
    LoraDB1.08× slower
    Neo4j4.00× slower
    Rows · 61·0·5
  • aggregates9 workloads · winner LoraDB
    LoraDBfastest
    Neo4j6.94× slower
    Rows · 98·0·1
  • pipeline9 workloads · winner LoraDB
    LoraDBfastest
    Neo4j3.07× slower
    Rows · 95·0·4
  • lists3 workloads · winner LoraDB
    LoraDBfastest
    Neo4j42.2× slower
    Rows · 32·0·1
  • sort3 workloads · winner LoraDB
    LoraDBfastest
    Neo4j3.48× slower
    Rows · 33·0
  • traversals15 workloads · winner LoraDB
    LoraDBfastest
    Neo4j17.8× slower
    Rows · 1515·0
  • patterns4 workloads · winner LoraDB
    LoraDBfastest
    Neo4j4.96× slower
    Rows · 44·0

Per workload

Raw timings, workload by workload.

Two columns — LoraDB and Neo4j — across every workload they share. Rows with no comparable Neo4jrun are hidden here; they’re listed in the omissions block at the bottom.

setup(1)

WinnerGrafeo
WorkloadSizeLoraDBNeo4jWinner
construct_empty4.06 µs2.70× slower2.66 ms1769× slowerGrafeo

writes(9)

WinnerGrafeo
WorkloadSizeLoraDBNeo4jWinner
bulk_edges200606.63 µsfastest2.65 ms4.37× slowerLoraDB
bulk_set_match1000552.39 µs1.84× slower916.11 µs3.05× slowerKuzu
delete_node1000355.70 µs1.47× slower1.65 ms6.84× slowerGrafeo
merge_create1000112.57 µs1.25× slower2.48 ms27.6× slowerGrafeo
merge_existing100023.95 µs2.89× slower647.72 µs78.1× slowerGrafeo
set_multiple_props100021.15 µsfastest571.61 µs27.0× slowerLoraDB
update_set100018.01 µsfastest732.47 µs40.7× slowerLoraDB
write_bulk10001.46 ms1.93× slower6.34 ms8.38× slowerGrafeo
write_single100014.90 µs2.20× slower1.30 ms192× slowerGrafeo

scans(6)

WinnerLoraDB
WorkloadSizeLoraDBNeo4jWinner
distinct1000198.38 µsfastest566.24 µs2.85× slowerLoraDB
lookup_by_id1000716.64 nsfastest601.36 µs839× slowerLoraDB
lookup_by_id_indexed1000684.00 nsfastest747.01 µs1092× slowerLoraDB
range_filter1000199.70 µs1.04× slower589.16 µs3.06× slowerKuzu
scan_filtered1000149.08 µsfastest718.45 µs4.82× slowerLoraDB
scan_label1000124.96 µsfastest661.84 µs5.30× slowerLoraDB

predicates(12)

WinnerLoraDB
WorkloadSizeLoraDBNeo4jWinner
where_compound_and_or1000213.07 µsfastest584.96 µs2.75× slowerLoraDB
where_contains1000145.04 µsfastest597.31 µs4.12× slowerLoraDB
where_ends_with1000143.60 µsfastest581.26 µs4.05× slowerLoraDB
where_id_in_range1000142.71 µs2.02× slower663.12 µs9.40× slowerGrafeo
where_in_list1000162.42 µsfastest627.53 µs3.86× slowerLoraDB
where_modulo_eq1000127.32 µsfastest557.09 µs4.38× slowerLoraDB
where_not1000166.05 µs1.01× slower695.07 µs4.24× slowerKuzu
where_or1000147.16 µsfastest603.10 µs4.10× slowerLoraDB
where_starts_with1000146.91 µsfastest596.02 µs4.06× slowerLoraDB
where_string_gte1000180.97 µs1.07× slower612.78 µs3.64× slowerKuzu
where_subexpr1000227.59 µs1.69× slower584.16 µs4.34× slowerSurrealDB
where_two_props1000152.69 µsfastest589.64 µs3.86× slowerLoraDB

strings(5)

WinnerKuzu
WorkloadSizeLoraDBNeo4jWinner
string_concat1000186.55 µs1.27× slower577.43 µs3.92× slowerKuzu
string_size1000172.17 µs1.10× slower567.80 µs3.63× slowerKuzu
string_substring1000210.20 µs1.21× slower877.36 µs5.05× slowerKuzu
string_to_lower1000201.00 µs1.33× slower684.21 µs4.52× slowerKuzu
string_to_upper1000185.41 µs1.22× slower603.96 µs3.97× slowerKuzu

numerics(6)

WinnerKuzu
WorkloadSizeLoraDBNeo4jWinner
numeric_abs1000174.85 µs1.13× slower636.05 µs4.10× slowerKuzu
numeric_ceil1000171.69 µs1.10× slower634.65 µs4.08× slowerKuzu
numeric_floor1000175.48 µs1.10× slower609.30 µs3.82× slowerKuzu
numeric_modulo1000144.95 µs1.02× slower637.61 µs4.47× slowerKuzu
numeric_pow1000166.22 µs1.16× slower641.94 µs4.48× slowerKuzu
numeric_round1000180.68 µsfastest581.78 µs3.22× slowerLoraDB

aggregates(9)

WinnerLoraDB
WorkloadSizeLoraDBNeo4jWinner
aggregate_avg100081.43 µsfastest606.76 µs7.45× slowerLoraDB
aggregate_collect100078.90 µsfastest619.24 µs7.85× slowerLoraDB
aggregate_count100059.50 µs2.77× slower588.34 µs27.4× slowerGrafeo
aggregate_count_distinct1000104.05 µsfastest635.68 µs6.11× slowerLoraDB
aggregate_max100079.97 µsfastest619.56 µs7.75× slowerLoraDB
aggregate_min100079.67 µsfastest563.60 µs7.07× slowerLoraDB
aggregate_sum100078.09 µsfastest568.81 µs7.28× slowerLoraDB
grouped_aggregation1000154.46 µsfastest969.01 µs6.27× slowerLoraDB
top_k1000186.50 µsfastest792.15 µs4.25× slowerLoraDB

pipeline(9)

WinnerLoraDB
WorkloadSizeLoraDBNeo4jWinner
case_when1000173.33 µsfastest796.60 µs4.60× slowerLoraDB
coalesce_existing1000161.92 µsfastest628.36 µs3.88× slowerLoraDB
computed_in_return1000151.15 µs1.07× slower639.09 µs4.54× slowerKuzu
distinct_with_order1000508.01 µs2.08× slower617.76 µs2.53× slowerGrafeo
predicate_via_function1000238.39 µs1.38× slower544.38 µs3.16× slowerKuzu
with_aggregate_then_filter1000148.70 µsfastest710.00 µs4.77× slowerLoraDB
with_distinct_then_count1000202.72 µsfastest812.09 µs4.01× slowerLoraDB
with_pipeline1000186.41 µsfastest581.26 µs3.12× slowerLoraDB
with_two_chained1000313.64 µs1.41× slower608.48 µs2.73× slowerKuzu

lists(3)

WinnerLoraDB
WorkloadSizeLoraDBNeo4jWinner
list_in_construction1000177.94 µs1.05× slower733.38 µs4.34× slowerKuzu
list_unwind_explicit10001.11 µsfastest689.53 µs621× slowerLoraDB
range_function100018.86 µsfastest555.15 µs29.4× slowerLoraDB

sort(3)

WinnerLoraDB
WorkloadSizeLoraDBNeo4jWinner
order_by_id_asc1000167.95 µsfastest718.84 µs4.28× slowerLoraDB
order_by_multi_key1000211.99 µsfastest554.84 µs2.62× slowerLoraDB
skip_limit1000162.19 µsfastest612.55 µs3.78× slowerLoraDB

traversals(15)

WinnerLoraDB
WorkloadSizeLoraDBNeo4jWinner
direct_record_traversal500831.70 nsfastest616.93 µs742× slowerLoraDB
recursive_depth2500968.69 nsfastest601.14 µs621× slowerLoraDB
recursive_depth35001.04 µsfastest592.76 µs570× slowerLoraDB
recursive_depth55001.16 µsfastest606.31 µs522× slowerLoraDB
relation_filter500117.78 µsfastest586.82 µs4.98× slowerLoraDB
traversal_count_one_hop50059.36 µsfastest609.51 µs10.3× slowerLoraDB
traversal_filter_one_hop500138.99 µsfastest582.58 µs4.19× slowerLoraDB
traversal_one_hop500125.98 µsfastest570.56 µs4.53× slowerLoraDB
traversal_reverse500123.67 µsfastest591.25 µs4.78× slowerLoraDB
traversal_three_hop500236.10 µsfastest607.69 µs2.57× slowerLoraDB
traversal_two_hop500165.58 µsfastest555.27 µs3.35× slowerLoraDB
traversal_undirected500213.41 µsfastest637.72 µs2.99× slowerLoraDB
variable_length_path10086.24 µsfastest605.82 µs7.02× slowerLoraDB
varlen_2_to_5100123.74 µsfastest578.29 µs4.67× slowerLoraDB
varlen_exact_510056.89 µsfastest586.35 µs10.3× slowerLoraDB

patterns(4)

WinnerLoraDB
WorkloadSizeLoraDBNeo4jWinner
edge_subquery_clause500213.55 µsfastest605.92 µs2.84× slowerLoraDB
star_fanout1000138.96 µsfastest579.41 µs4.17× slowerLoraDB
star_fanout_count100061.36 µsfastest590.08 µs9.62× slowerLoraDB
star_fanout_filter1000112.53 µsfastest599.26 µs5.33× slowerLoraDB