<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Worst-Case Optimal Join Algorithms: Techniques, Results, and Open Problems · HackerPapers discussions</title><link>https://hackerpaper.kaipfister.de/p/1803.09930/</link><description>Collected HN comments and submissions linking this paper.</description><language>en</language><lastBuildDate>Mon, 02 Nov 2026 11:16:22 GMT</lastBuildDate><atom:link href="https://hackerpaper.kaipfister.de/p/1803.09930/feed.xml" rel="self" type="application/rss+xml" /><item><title>Worst-Case Optimal Join Algorithms: Techniques, Results, and Open Problems — mentioned by j-pb</title><link>https://news.ycombinator.com/item?id=25620911</link><guid isPermaLink="false">urn:hackerpapers:mention:1803.09930:25620911</guid><pubDate>Sun, 03 Jan 2021 10:24:49 GMT</pubDate><description>&lt;p&gt;It&amp;#x27;s all about efficient range reads and seek operations. You can compute set operations pretty efficiently using sorted indices that support a &amp;quot;find next or greater&amp;quot; operation. For intersection, take the first value from the first set as the smallest candidate of the output set, then call call candidate := next(candidate) on each set, updating the candidate with the next smallest possible value, and adding it to the output set when a candidate was returned by all sets. The algorithm is worst case optimal up to a log factor, and can even be extended to perform generic constraint programming…&lt;/p&gt;&lt;p&gt;&lt;a href="https://hackerpaper.kaipfister.de/p/1803.09930/"&gt;Paper and discussion history&lt;/a&gt;. A mention is not an endorsement.&lt;/p&gt;</description><category>cs.DB</category></item><item><title>Worst-Case Optimal Join Algorithms: Techniques, Results, and Open Problems — mentioned by refset</title><link>https://news.ycombinator.com/item?id=21793522</link><guid isPermaLink="false">urn:hackerpapers:mention:1803.09930:21793522</guid><pubDate>Sun, 15 Dec 2019 00:38:57 GMT</pubDate><description>&lt;p&gt;Crux uses a Worst-Case Optimal Join [0] algorithm with bitemporal indexes, and the Datalog-specific query layer is implemented in less than a thousand lines of Clojure: https://github.com/juxt/crux/blob/master/crux-core/src/crux/... SQL certainly provides a lot of bells and whistles but Crux has the advantage of consistent in-process queries (i.e. the &amp;quot;database as a value&amp;quot;) which means you can combine custom code with multiple queries efficiently to achieve a much larger range of possibilities, such as graph algorithms like Bidirectional BFS [1]. [0] https://arxiv.org/pdf/1803.09930.pdf [1]…&lt;/p&gt;&lt;p&gt;&lt;a href="https://hackerpaper.kaipfister.de/p/1803.09930/"&gt;Paper and discussion history&lt;/a&gt;. A mention is not an endorsement.&lt;/p&gt;</description><category>cs.DB</category></item></channel></rss>
