Sign in

Finn Völkel

@fivo.bsky.social
36 followers 106 following 37 posts

Programming, Databases, Distributed systems, Beachvolley. Currently working on Datalog engine on top of S3.

PostsRepliesMedia
Finn Völkel @fivo.bsky.social · 03/09/2026
The other bit that is quite experimental in Triplox are Worst-case optimal joins (WCOJ) and which I have also been exploring in github.com/FiV0/hooray2.
github.com
GitHub - FiV0/hooray2: Experiments in Datalog.
Experiments in Datalog. Contribute to FiV0/hooray2 development by creating an account on GitHub.
000
Finn Völkel @fivo.bsky.social · 03/09/2026
I think the coolest part is incremental queries, and it's the one thing other Datalog engines don't really support as a primitive. Wrote an intro here: triplox.xyz/incremental-... They let you build views or sync engines on top.
triplox.xyz
Incremental Queries
Incremental queries in Triplox.
100
Finn Völkel @fivo.bsky.social · 03/09/2026
I have been working on a distributed Datalog engine on top SlateDB with support for incremental queries. Repo: github.com/FiV0/triplox Website: triplox.xyz
triplox.xyz
Triplox
A distributed Datalog engine.
100
Finn Völkel @fivo.bsky.social · 10/06/2026
I think I don't fully get how you avoid pathological cases where a single filter (deletion) in a lower level does not trigger an O(n) copy in a higher level of your FactLSM. I assume more engaging with the data structure will help.
100
Finn Völkel @fivo.bsky.social · 10/06/2026
Just had another look at datatoad (together with Claude). I think the answer boils down to a way more fancy result set machinery than I have. You can copy a partial result set and hand it around and one branch (even if it filters) doesn't affect the partial result set of another branch.
100
Finn Völkel @fivo.bsky.social · 09/06/2026
I think there is also an interesting query optimization problem to be solved. You could avoid putting the variables of the delta term at the beginning of the GJ run for a particular dQ and this would result in fewer "old" state permutations for certain derived relations. Has anybody worked on this?
100
Finn Völkel @fivo.bsky.social · 09/06/2026
My question essentially concerns this space / time tradeoff. Is there any prior art here ? Has anybody implemented this and what tradeoff have they chosen?
100
Finn Völkel @fivo.bsky.social · 09/06/2026
For maximum efficiency I now need to save "old" states for these relations in potentially many different variables orders. Saving many different variable orders seems expensive. I think there is standard space / time tradeoff to be done here.
210
Finn Völkel @fivo.bsky.social · 09/06/2026
Every delta query in the above (when implemented) starts with the delta term and so also the variable order of the GJ run is determined by the delta term. Let's say some of the participating relations are not base relations but derived relations (or joins, not joins, predicates and fn applications).
100
Finn Völkel @fivo.bsky.social · 09/06/2026
I am working on a triplestore (entity-attribute-value model) so for base relations the above is "easy" to implement as I have all permutations of the primary index EAV at hand anyway.
100
Finn Völkel @fivo.bsky.social · 09/06/2026
I am running GJ for every delta query using ZSets. On variable levels where the variables of a participating relation have not been exhausted, I am using the multiplicative idenity (1) and only use the "real" weight on the last level.
100
Finn Völkel @fivo.bsky.social · 09/06/2026
The other question concerns WCOJ in connection with IVM. I am essentially trying to combine WCOJ with DBSP. After some initial back and forth I recently realized I just ended up with the following formula from your "Distributed Evaluation of Subgraph..." paper.
100
Finn Völkel @fivo.bsky.social · 09/06/2026
I initially implemented this still level by level, but then realized that variable unifications for C could "leak" into the other branch, so I think there is no way around isolation. I was mainly wondering how you avoid the result set copying cost or if you do any other smart thing here.
320
Finn Völkel @fivo.bsky.social · 09/06/2026
Let's say you now have two or branches (two rules sharing the same head) that participate in C, D now. Are you copying the result set that you have so far for (A,B) and run both branches in isolation?
100
Finn Völkel @fivo.bsky.social · 09/06/2026
From my understanding of Datatoad (which is likely quite shallow) you run a full WCOJ per disjunctive branch, right? To make it concrete let's you have variable order A,B,C,D and you have a partial unified result set for (A,B).
100
Finn Völkel @fivo.bsky.social · 09/06/2026
Hey @frankmcsherry.bsky.social. I have two questions. One related to Datatoad, the other related to some other work of yours. I hope that is ok.
200
Finn Völkel @fivo.bsky.social · 14/05/2026
Read the word Distributolog for the first time today 😂
000
Finn Völkel @fivo.bsky.social · 28/04/2026
Blogged about Triplox, a system I'm building on top of SlateDB. finnvolkel.com/triplox-log-... #slatedb #datomic
finnvolkel.com
Triplox Log 1 - Introduction · Finn Völkel
020
Finn Völkel @fivo.bsky.social · 10/04/2026
Wrote some more thoughts down on multi-way joins in DBSP. finnvolkel.com/more-thought... It's reads more like a note to myself.
finnvolkel.com
010
Reposted by Finn Völkel
Frank McSherry @frankmcsherry.bsky.social · 29/03/2026
As part of an attempt to get Claude to help me communicate better, we have .. a Claude-assisted mdbook for datatoad: www.frankmcsherry.org/datatoad/int... Still a work in progress, but it came together much faster with help.
frankmcsherry.org
Datatoad
051
Reposted by Finn Völkel
clojureberlin.bsky.social @clojureberlin.bsky.social · 09/02/2026
We are having a casual Get Together this Thursday 12th of February (I know it's short notice). No talk lined up, just casual chat. clojure.berlin/events/2026-...
clojure.berlin
Get together drinks @ Trespassers
045
Reposted by Finn Völkel
Finn Völkel @fivo.bsky.social · 03/01/2026
WCOJ meets DBSP. This is the post I wanted to get at when starting the series. finnvolkel.com/wcoj-wcoj-me...
finnvolkel.com
WCOJ - WCOJ meets DBSP · Finn Völkel
031
Finn Völkel @fivo.bsky.social · 03/01/2026
WCOJ meets DBSP. This is the post I wanted to get at when starting the series. finnvolkel.com/wcoj-wcoj-me...
finnvolkel.com
WCOJ - WCOJ meets DBSP · Finn Völkel
031
Reposted by Finn Völkel
Finn Völkel @fivo.bsky.social · 02/01/2026
The 4th post in the WCOJ series. An intro to DBSP, Z-Sets and connections to EDN Datalog indices. This will set us up for a WCOJ meets DBSP algorithm. finnvolkel.com/wcoj-dbsp-zs...
finnvolkel.com
WCOJ - DBSP, ZSets and Datalog · Finn Völkel
111
Finn Völkel @fivo.bsky.social · 02/01/2026
The 4th post in the WCOJ series. An intro to DBSP, Z-Sets and connections to EDN Datalog indices. This will set us up for a WCOJ meets DBSP algorithm. finnvolkel.com/wcoj-dbsp-zs...
finnvolkel.com
WCOJ - DBSP, ZSets and Datalog · Finn Völkel
111
Finn Völkel @fivo.bsky.social · 31/12/2025
Idea from a friend of mine. People who set off fireworks should be drafted immediately.
000
Finn Völkel @fivo.bsky.social · 16/12/2025
In section "3.1.2 A batching optimization to reduce memory" of the paper you mentioned, you seem to restrict the size of the extensions `propose` returns, but this then means batches might be quite different in size.
100
Finn Völkel @fivo.bsky.social · 16/12/2025
> benefit from imposing a limit on the tuples to produce at once (currently: 100M) ^from you post. When doing the joining of `a`, you don't know how many tuples you get if all variables have been unified. I was mainly wondering how you decide to cut your batches when being at the `a` level in GC.
100
Finn Völkel @fivo.bsky.social · 16/12/2025
Thanks. I also "stole" the GC interface (giving credit of course) from you old post. www.frankmcsherry.org/dataflow/rel...
frankmcsherry.org
Worst-case optimal joins, in dataflow
I’ve gotten timely dataflow in Rust up and running exciting computations! I’m going to explain one that I think is especially cool, and that I’m going to tr...
000
Finn Völkel @fivo.bsky.social · 16/12/2025
I meant (2.). If the variable order is (a,b,c), naive GJ will produce all a's before looking at b's, so I was wondering what you do in datatoad (or elsewhere) besides potential cardinality estimation.
100
Finn Völkel @fivo.bsky.social · 16/12/2025
Hey. Love that you are blogging on WCOJ again. I was wondering how you deal with the limit on the tuples produced in GenericJoin. In Leapfrog this seems quite easy as you are producing the tuples one at a time at the bottom, but in GenericJoin you need (?) to take some decisions higher up or not?
200
Reposted by Finn Völkel
Finn Völkel @fivo.bsky.social · 15/12/2025
The 3rd post in the WCOJ series. Implementing some logical datalog connectors in the context of GenericJoin. finnvolkel.com/wcoj-datalog...
finnvolkel.com
WCOJ - Datalog and GenericJoin · Finn Völkel
101
Finn Völkel @fivo.bsky.social · 15/12/2025
The 3rd post in the WCOJ series. Implementing some logical datalog connectors in the context of GenericJoin. finnvolkel.com/wcoj-datalog...
finnvolkel.com
WCOJ - Datalog and GenericJoin · Finn Völkel
101
Reposted by Finn Völkel
Finn Völkel @fivo.bsky.social · 11/12/2025
The second post in the series is on an actual implementation of a WCOJ algorithm. finnvolkel.com/wcoj-generic...
finnvolkel.com
WCOJ - Generic Join · Finn Völkel
101
Finn Völkel @fivo.bsky.social · 11/12/2025
The second post in the series is on an actual implementation of a WCOJ algorithm. finnvolkel.com/wcoj-generic...
finnvolkel.com
WCOJ - Generic Join · Finn Völkel
101
Finn Völkel @fivo.bsky.social · 10/12/2025
I started to write a blog series on worst-case optimal join finnvolkel.com/wcoj-graph-j...
finnvolkel.com
WCOJ - Graph-Join correspondence · Finn Völkel
100
Finn Völkel @fivo.bsky.social · 24/11/2025
Wrote a blog post about continuation-passing style in @xtdb.com. finnvolkel.com/continuation...
finnvolkel.com
Continuation-passing style in an expression engine · Finn Völkel
010
Finn Völkel @fivo.bsky.social · 06/10/2025
I know a bit old your posts. I also found this blog a really good resource for understanding WCOJ www.frankmcsherry.org/dataflow/rel.... It implements the one from arxiv.org/abs/1310.3314.
frankmcsherry.org
Worst-case optimal joins, in dataflow
I’ve gotten timely dataflow in Rust up and running exciting computations! I’m going to explain one that I think is especially cool, and that I’m going to tr...
020
Reposted by Finn Völkel
clojureberlin.bsky.social @clojureberlin.bsky.social · 17/07/2025
clojure.berlin now also on Bluesky. #Clojure #Berlin
clojure.berlin
Clojure Berlin
022
Finn Völkel @fivo.bsky.social · 14/07/2025
I confusingly said it would be next Wednesday. It's Wednesday in a week (23.7) from now.
000
Finn Völkel @fivo.bsky.social · 11/07/2025
We are having a Berlin Clojure meetup next Wednesday. The topic is going to be clojure-mcp, so bring your 💻 for some experimenting. clojure.berlin/events/2025-...
clojure.berlin
Clojure Meetup - July 2025
122
Reposted by Finn Völkel
Andras Gerlits @omniledger.io · 07/05/2025
Evaluation of a paper from 1977 arguing for handling events as first class members in data- defined systems. I wish people would have listened to this guy at the time. xtdb.com/blog/update-...
xtdb.com
UPDATE RECONSIDERED, delivered? · XTDB
001
Reposted by Finn Völkel
Mike Masnick @masnick.com · 04/04/2025
I expect to be getting a lot of emails like this soon. This one is from @s.ly and @keyboard.io about the tariffs. Such a pointless destruction of US small businesses.

To our US customers:
 
Yesterday, the Trump Administration announced that they will be ending the de minimis exemption for all shipments from Hong Kong and China on May 2. They also raised the minimum import tax on products made in China or Hong Kong to 54% of the sale price. 
While we design our keyboards in the US, like most consumer electronics companies we manufacture our products in southern China. These new rules will drastically increase how much it costs you to buy our products.
 
(1) If you've been considering buying anything we make, now is the time.
 
According to the new policy, you will owe a 54% import tax on any package from Keyboardio that arrives after May 1. Once the de minimis rule is gone, no sale we can offer will ever make the Model 100 or Atreus as inexpensive as it is today.
 
Starting in May, US customers will be charged $188 in new taxes (tariffs) on a Model 100 + additional customs clearance fees. The new US taxes on the Atreus will be $80 + additional customs clearance fees. 
 
We're really proud of these keyboards—we designed them to be the most comfortable tools to help you be productive, and to help you enjoy the experience of typing. We think they're worth the investment. We don't think a 54% tax is reasonable.
14615186
Finn Völkel @fivo.bsky.social · 09/03/2025
I found this to be a really good article harper.blog/2025/02/16/m...
harper.blog
My LLM codegen workflow atm
A detailed walkthrough of my current workflow for using LLms to build software, from brainstorming through planning and execution.
100
Reposted by Finn Völkel
James Henderson @jarohen.dev · 14/02/2025
@xtdb.com beta6 is out today 🚀 Containing the sorts of changes that don't make for very exciting release-notes, but all the little things you'll appreciate when you're actually working with it day-to-day/deploying it into production. No buzzwords this time I'm afraid! xtdb.com/blog/v2beta6
xtdb.com
[ANN] 2.0.0-beta6 · XTDB
0103
Reposted by Finn Völkel
XTDB @xtdb.com · 10/01/2025
🚀 Need accurate reporting and seamless data corrections in your #Database? 📹 See how XTDB's bitemporality makes auditing and historical queries effortless. Correct mistakes, track changes, and retrieve past states—all with simple SQL queries. youtu.be/gKXpljRpHlo
youtu.be
The incredible TIME TRAVEL capabilities of XTDB 👀
YouTube video by XTDB
001
Reposted by Finn Völkel
James Henderson @jarohen.dev · 12/12/2024
Blogged: "The Missing SQL Sub-queries" SQL's had sub-queries since SQL:92 - but it's still a challenge to return properly nested data through SQL queries. #XTDB has first-class support for nested values, as well as `NEST_ONE` and `NEST_MANY`, which fill this gap: xtdb.com/blog/the-mis...
xtdb.com
The missing SQL sub-queries · XTDB
142
Finn Völkel @fivo.bsky.social · 09/12/2024
Just wanted to mention that the links to the companies mentioned in the report do not work. Keep the great work up.
000
Finn Völkel @fivo.bsky.social · 05/12/2024
Exciting news! clojure.berlin is live! Join us for a Clojure GetTogether the 19.12 at Trespassers. #Clojure #Berlin
000