- deps.edn
-
juxt/crux-rocksdb {:mvn/version "{crux_version}-beta"}
- pom.xml
-
<dependency> <groupId>juxt</groupId> <artifactId>crux-rocksdb</artifactId> <version>{crux_version}-beta</version> </dependency>
RocksDB is often 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.
In order to use RocksDB within Crux, you must first add RocksDB as a project dependency:
juxt/crux-rocksdb {:mvn/version "{crux_version}-beta"}
<dependency>
<groupId>juxt</groupId>
<artifactId>crux-rocksdb</artifactId>
<version>{crux_version}-beta</version>
</dependency>
If you’re using RocksDB and seeing out-of-memory issues, we recommend setting the environment variable MALLOC_ARENA_MAX=2
- see this issue for more details.
Replace the implementation of the desired component with crux.rocksdb/->kv-store
{
"crux/index-store": {
"kv-store": {
"crux/module": "crux.rocksdb/->kv-store",
"db-dir": "/tmp/rocksdb"
}
},
"crux/document-store": { ... },
"crux/tx-log": { ... }
}
{:crux/index-store {:kv-store {:crux/module 'crux.rocksdb/->kv-store
:db-dir (io/file "/tmp/rocksdb")}}
:crux/document-store {...}
:crux/tx-log {...}}
{:crux/index-store {:kv-store {:crux/module crux.rocksdb/->kv-store
:db-dir "/tmp/rocksdb"}}
:crux/document-store {...}
:crux/tx-log {...}}
It is generally advised to use independent RocksDB instances for each component, although using a single instance for the transaction log and document store is possible. Do not share the RocksDB instance used for the index store with other components as you cannot then perform Crux version upgrades.
metrics
(function, default no-op): enable RocksDB metrics.
db-dir
(required, string/File
/Path
): path to RocksDB data directory
sync?
(boolean, default false): sync to disk after every write
disable-wal?
(boolean): disables the write-ahead log
db-options
(RocksDB Options
object): extra options to pass directly to RocksDB.
To include RocksDB metrics in monitoring, override the metrics
dependency:
{
"crux/index-store": {
"kv-store": {
"crux/module": "crux.rocksdb/->kv-store",
"metrics": {
"crux/module": "crux.rocksdb.metrics/->metrics"
}
...
}
},
"crux/document-store": { ... },
"crux/tx-log": { ... }
}
{:crux/index-store {:kv-store {:crux/module 'crux.rocksdb/->kv-store
:metrics {:crux/module 'crux.rocksdb.metrics/->metrics}}
:crux/document-store {...}
:crux/tx-log {...}}
{:crux/index-store {:kv-store {:crux/module crux.rocksdb/->kv-store
:metrics {:crux/module crux.rocksdb.metrics/->metrics}}
:crux/document-store {...}
:crux/tx-log {...}}
instance-name
(string, default "rocksdb"
): unique name for this instance of RocksDB, used in metrics domains
sample-window
(duration, default 3s): sample window of statistics collector
To configure the block cache used by the RocksDB instance, override the block-cache
dependency.
In the example below, there is a single shared cache between multiple kv-stores
:
{
"crux.rocksdb/block-cache": {
"crux/module": "crux.rocksdb/>lru-block-cache",
"cache-size":536870912
},
"crux/index-store": {
"kv-store": {
"crux/module": "crux.rocksdb/->kv-store",
"block-cache": "crux.rocksdb/block-cache"
...
}
},
"crux/document-store": {
"kv-store": {
"crux/module": "crux.rocksdb/->kv-store",
"block-cache": "crux.rocksdb/block-cache"
}
},
"crux/tx-log": {
"kv-store": {
"crux/module": "crux.rocksdb/->kv-store",
"block-cache": "crux.rocksdb/block-cache"
}
}
}
{:crux.rocksdb/block-cache {:crux/module 'crux.rocksdb/->lru-block-cache
:cache-size (* 512 1024 1024)}
:crux/index-store {:kv-store {:crux/module 'crux.rocksdb/->kv-store
:block-cache :crux.rocksdb/block-cache}}
:crux/document-store {:kv-store {:crux/module 'crux.rocksdb/->kv-store
:block-cache :crux.rocksdb/block-cache}}
:crux/tx-log {:kv-store {:crux/module 'crux.rocksdb/->kv-store
:block-cache :crux.rocksdb/block-cache}}}
{:crux.rocksdb/block-cache {:crux/module crux.rocksdb/->lru-block-cache
:cache-size 536870912}
:crux/index-store {:kv-store {:crux/module crux.rocksdb/->kv-store
:block-cache :crux.rocksdb/block-cache}}
:crux/document-store {:kv-store {:crux/module crux.rocksdb/->kv-store
:block-cache :crux.rocksdb/block-cache}}
:crux/tx-log {:kv-store {:crux/module crux.rocksdb/->kv-store
:block-cache :crux.rocksdb/block-cache}}}
cache-size
(int): Size of the cache in bytes - default size is 8Mb, although it is recommended this is set to a higher amount.
Can you improve this documentation? These fine people already did:
James Henderson, Daniel Mason, Jeremy Taylor & Dan MasonEdit on GitHub
cljdoc is a website building & hosting documentation for Clojure/Script libraries
× close