Skip to content

langston-barrett/duckalog

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

35 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Duckalog

Duckalog is a Datalog engine built on DuckDB.

Currently only usable as a Rust library; there is no parser.

The language is 100% vanilla Datalog. There are no datatypes, no negation, no aggregation. Relations are not declared separately from their uses. Facts are part of the program, they are simply rules with empty bodies.

Features

Implemented

  • DuckDB and SQLite backends

    • Dynamic join order (query planning)
    • Indices
    • Join algorithms
  • Semi-naïve evaluation

  • That's it!

Roadmap

See the issue tracker.

Not on the roadmap (for now)

  • Syntax
  • Aggregation
  • Negation
  • Datatypes, built-in functions

Comparison to other tools

  • Duckalog is like Duckegg, but the focus is on supporting moderately performant (semi-naïve) evaluation, rather than experimenting with e-graphs.
  • Duckalog is to DuckDB what RecStep is to QuickStep---though Duckalog is currently much less optimized.
  • Duckalog is much simpler and less fully-featured than Soufflé, and likely way slower. Duckalog only has an interpreter, not a compiler.
  • Unlike Ascent, Duckalog is an interpreter. Duckalog is also probably way slower, and certainly less featureful.
  • Duckalog is meant to be run on a single node, unlike BigDatalog, Distributed SociaLite, etc.
  • Duckalog is open source, unlike LogicBlox.
  • I don't understand DataFrog enough to draw a comparison

FAQ

Is it any good?

Not yet!

Why another Datalog engine?

To provide a hackable platform for experimentation!

About

Datalog engine based on DuckDB

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published