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? | |||||