Skip to content

Commit c7f3af4

Browse files
lmeyerovclaude
andcommitted
docs(gfql): position vs GraphFrames + PuppyGraph; label pipeline-vs-lifecycle (round-2 personas E/F)
Round-2 user-testing closed all round-1 P0s and fully served personas A-D, but E (Databricks GraphFrames/Spark) and F (Snowflake/Databricks + PuppyGraph) FAILED — their tools + decision axes were absent, and GraphFrames' motif queries mapped onto the one case we disclaim with no 'it runs' reassurance. - Add GraphFrames + PuppyGraph rows to the vs-external-tools table (qualitative, 'not benchmarked yet' markers): single-node-vs-cluster (100M+ on one machine; cluster only above the single-node ceiling) and warehouse-in-place-vs-pull- subgraph (GFQL adds PageRank/centrality PuppyGraph lacks; complement). Note motif/multi-way-join queries RUN but aren't yet perf-tuned. - Benchmark page: label the headline table as PIPELINE time and note the per-graph sections are full-lifecycle (incl ETL) — kills the 3.33s-vs-7.1s apparent contradiction a skeptic hits. Numbers unchanged (positioning is qualitative; head-to-heads are the later stacked benchmark PR). RST validated. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
1 parent 2532d0a commit c7f3af4

2 files changed

Lines changed: 25 additions & 4 deletions

File tree

docs/source/gfql/benchmark_filter_pagerank.rst

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,10 @@ no database required. This benchmark compares **Graphistry's local Cypher**
3030
- **3.33s**
3131
- **>56x**
3232

33-
*Warm median of 5 runs, 2 warmup iterations. DGX dgx-spark, GB10 GPU.*
33+
*Pipeline time (search + PageRank + search), warm median of 5 runs, 2 warmup iterations. DGX
34+
dgx-spark, GB10 GPU. The per-graph sections below report full-lifecycle totals that also include
35+
one-time ETL/load — hence the slightly larger numbers there (e.g. GPlus GPU 3.33s pipeline vs
36+
~7.1s lifecycle).*
3437

3538
The pipeline
3639
------------

docs/source/gfql/engines.rst

Lines changed: 21 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -201,15 +201,33 @@ benchmarked** rather than guess.
201201
- **not benchmarked** — expect order-of-magnitude headroom qualitatively (no measured
202202
head-to-head).
203203
- Fine for small/interactive graphs; GFQL is the columnar/GPU path when they grow.
204+
* - **Spark GraphFrames**
205+
- *Distributed* graph engine on a Spark cluster; provision + tune the cluster.
206+
- GFQL is *single-node* (CPU or one GPU): 100M+ edges in-process on **one machine**,
207+
no cluster to stand up, interactive latency — and a single GPU often matches or beats
208+
a Spark cluster on read-heavy traversal + PageRank at a fraction of the cost.
209+
*Head-to-head not yet published.*
210+
- Reach for GraphFrames when the graph genuinely exceeds one machine's memory. Motif /
211+
triangle / multi-way-join queries **run** in GFQL but are not yet perf-benchmarked.
212+
* - **PuppyGraph**
213+
- Graph query layer *over your warehouse tables in place* (zero-ETL, query pushdown).
214+
- GFQL adds GPU/CPU graph **analytics PuppyGraph does not offer — PageRank, centrality,
215+
community** — on a pulled subgraph, in one pipeline. *No head-to-head yet.*
216+
- **Complement:** use PuppyGraph for ad-hoc graph SQL across the whole warehouse; pull the
217+
relevant subgraph into GFQL when you need GPU-accelerated analytics on it.
204218

205219
GFQL **complements** a graph database more than it replaces one: keep Neo4j or Kuzu as the
206220
system-of-record, and do the read-heavy search + analytics in GFQL so ETL, traversal, and
207221
scoring stay in one in-process dataframe pipeline. Route by shape — **selective** seeded
208222
lookups favor the GFQL index (up to 28× Kuzu, 16.9× Neo4j on 2-hop), **bulk** frontier
209223
expansion and full pipelines favor Polars / GPU (22–87× Kuzu; **46–56× Neo4j** on the
210-
filter→PageRank→filter pipeline). The one case we explicitly **do not** claim is
211-
cyclic / multi-way-join patterns (triangles, cliques), where Kuzu's worst-case-optimal
212-
joins can beat a dataframe plan.
224+
filter→PageRank→filter pipeline). Against the **distributed** engines the axis is different:
225+
GFQL trades horizontal scale-out for zero cluster/warehouse setup and interactive latency —
226+
choose it below the single-machine ceiling (100M+ edges fit in-process; a cluster is only
227+
needed once the graph genuinely exceeds one node's memory), and complement PuppyGraph's
228+
zero-ETL warehouse graph with GFQL's GPU analytics. The one case we explicitly **do not**
229+
claim is cyclic / multi-way-join patterns (triangles, cliques): they **run**, but Kuzu's
230+
worst-case-optimal joins can beat a dataframe plan there and we have not yet perf-tuned them.
213231

214232
Decision matrix
215233
---------------

0 commit comments

Comments
 (0)