Skip to content

Crux - bi-temporal schema-less document databaseλ︎

Crux is a general purpose database with graph-oriented bi-temporal indexes. Datalog, SQL & EQL queries are supported along with Java, HTTP & Clojure APIs. The Datalog query interface that can be used to express complex joins and recursive graph traversals.

Getting Startedλ︎

Follow the Crux Earth Assignment Tutorial, in either the self-contained Next-Journal environment or as your own Clojure project.

{% tabs clojure="Clojure CLI tools", lein="Leiningen" %}

{% content "clojure" %} Using the Clojure CLI tools and practicalli/clojure-deps-edn configuration, create a new project:

clojure -X:project/new :template app :name practicalli/crux-demo

{% content "lein" %} Using the Leiningen build tool, create a new project:

lein new app practicalli/crux-demo

{% endtabs %}

Install Crux as a library in a Clojure project or use the pre-built docker image.

Note: to have more than one set of tabs in a page, simply create unique id's for the tabs, e.g. practicalli2

Experiment with the Crux-labs workshop project, which contains examples of using Crux.

Resourcesλ︎

{% youtube %} https://www.youtube.com/watch?v=JkZfQZGLPTA

Unbundled architectural overviewλ︎

Crux follows an unbundled architectural, decoupled components communicating via an immutable log and document store. crux-rocksdb is the high performance default data store, with a range of storage options available for embedded usage and cloud scaling.

Crux embraces the transaction log as the central point of coordination when running as a distributed system. Use of a separate document store enables simple eviction of active and historical data to assist with technical compliance for information privacy regulations.

This design makes it feasible and desirable to embed Crux nodes directly within your application processes, which reduces deployment complexity and eliminates round-trip overheads when running complex application queries.

Crux - unbundled architectural overview