- 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 {...}}
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 & Dan MasonEdit on GitHub
cljdoc is a website building & hosting documentation for Clojure/Script libraries
× close