LMDB can be used as the data store for Crux’s query indices, but can also be used as a transaction log and/or document store in single node clusters.

LMDB tends to provide faster queries than RocksDB in exchange for a slower ingest rate.

Project Dependency

In order to use LMDB within Crux, you must first add LMDB as a project dependency:

  • deps.edn

  • pom.xml

juxt/crux-lmdb {:mvn/version "20.12-1.13.0-alpha"}

Using LMDB

Replace the implementation of the desired component with crux.lmdb/->kv-store

  • JSON

  • Clojure

  • EDN

  "crux/index-store": {
    "kv-store": {
      "crux/module": "crux.lmdb/->kv-store",
      "db-dir": "/tmp/lmdb"

  "crux/document-store": { ... },
  "crux/tx-log": { ... }
{:crux/index-store {:kv-store {:crux/module 'crux.lmdb/->kv-store
                               :db-dir (io/file "/tmp/lmdb")}}
 :crux/document-store {...}
 :crux/tx-log {...}}
{:crux/index-store {:kv-store {:crux/module crux.lmdb/->kv-store
                               :db-dir "/tmp/lmdb"}}
 :crux/document-store {...}
 :crux/tx-log {...}}


  • db-dir (required, string/File/Path): path to LMDB data directory

  • sync? (boolean, default false): sync to disk after every write

  • env-flags (int): LMDB flags

  • env-mapsize(int): LMDB map size