This page exists as an easy reference to compare and contrast the available open source Clojure-Datalog databases. Only databases under active development are listed.
DataScript by Nikita Prokopov | An immutable in-memory Clojure(Script) database - "What if creating a database would be as cheap as creating a Hashmap?" |
Datalevin by Juji | Datalevin extends DataScript with durable storage and has been designed to be both in embedded and client/server mode. Data durability is handled by LMDB, which is optimized for concurrent read-intensive workloads. Datalevin does not store transaction history. |
Datahike by lamdaforge | Datahike extends DataScript with durable storage via Hitchhiker Tree (a persistent off-heap data structure). Datahike provides similar functionality to Datomic On-Prem and can be used as a drop-in replacement for a subset of use-cases. Datahike is part of the replikativ toolbox for building distributed data management solutions. |
Asami by Cisco Secure Malware Analytics | Schema-less triple store designed for Clojure(Script) graph analytics. Sibling project of the Naga Datalog rules engine |
XTDB by JUXT | Bitemporal document database for graph and SQL queries, with HTTP+JSON and Java APIs. Based on an "unbundled" architecture with pluggable storage. Formerly known as "Crux". |
The following matrix may contain mistakes and be missing various important dimensions. If you believe other projects should be added or if any of the data is incorrect, please submit a PR. Thanks!
Capabilities | DataScript | Datalevin | Datahike | Asami | XTDB |
Storage: |
|||||
Durable storage | N/A | Y | Y | Y | Y |
Transaction-Time history | N/A | N/A | Y | Y | Y |
Valid-Time history | N/A | N/A | N | N | Y |
`byte-array` value type | Y | Y | N | Y | Y |
Transactions: |
|||||
Explicit Schema-on-Write | Y | Y | Y | N/A | N/A |
“Datom” transaction semantics | Y | Y | Y | Y | N/A |
Speculative transactions | Y | N | Y | Planned (Issue) | Y |
Transaction functions | Y | Y | Y | Proposed (Issue TBD) | Y |
Arbitrary map ("document") storage | Y | Y | N | Planned (Issue) | Y |
Evict / Excise / Purge (for data privacy compliance) | Y | Y | Y | N | Y |
Composite tuples | Y | Planned (Issue) | Y | Planned (Issue) | N |
Query: |
|||||
Query planner | N | Proposed (Issue) | Proposed (Issue) | Y | Y |
Datalog rules | Y | Y | Y | Proposed (Issue) | Y |
Lazy queries | N | N | N | Y | Y |
Pull syntax | Y | Y | Y | Proposed (Issue) | Y |
Wildcard attributes | Y | Y | Y | Y | N |
Full-text search | N | Y | N | N | Y |
SQL | N | N | N | N | Y |
Advanced graph features (paths, transitive edges, multigraph) | N | N | N | Y | N |
Developer Experience: |
|||||
Clojure (JVM) runtime | Y | Y | Y | Y | N |
ClojureScript runtime | Y | N | Y | Y | N |
Graal native image | Y | Y | Possible | Y | N (Issue) |
Typed Java API | N | N | Y | N | Y |
HTTP API | N | N | Y | N | Y |
Remote client API | N | Y | Y | N | Y |
GUI console | N | N | N | N | Y |
CLI console | N | Y | N | Y | N |
Administration: |
|||||
Online index upgrades | N | N | N | N | Y |
Asynchronous indexing | N | N | N | N | Y |
Single-writer atomic transactions | Y | Y | Y | Y | Y |
Horizontal scaling (clustering) | N/A | Proposed (Issue) | Y | Proposed (Issue TBD) | Y |
Commercial support | N | Planned | Y | N | Y |
Legend: "N/A" ("not applicable") means the capability is explicitly a non-goal of the project | |||||
Suggestions? Questions? |