Bindings to RocksDB.
This package builds RocksDB in place by default. This requires:
You can use the
NINJA_J environment variable to control the number of threads used by
NINJA_J=2. This is a hack for building on CI, since
ninja seems to fail to detect the actual number of CPU cores available.
To skip building and link with system-wide RocksDB, use the
system-rocksdb Cabal flag. This is not recommended, since this package is only developed with the latest release of RocksDB.
Database.RocksDB.Internals contains the raw C bindings. All functions and
enum values in
rocksdb/c.h are covered. The opaque types like
rocksdb_options_t have corresponding Haskell types like
RocksdbOptions. They are nullary datatypes and are only used to mark the
Ptr phantom type.
The higher-level API is being worked on. Using functions like
openDB, you can obtain a
ForeignPtr which carries a C resource. The garbage collector can automatically invokes the
ForeignPtr finalizers, and you can also use
finalizeForeignPtr with something like
ResourceT to ensure scoped finalizing. Also,
ByteStrings are used instead of raw buffers.
Some RocksDB functions require passing in a pointer to an error message buffer for error reporting. The higher-level API will obtain the error message and throw it with a
RocksDBException when present.
About Windows support
Not working at the moment (builds but crashes when built with mingw-w64 toolchain). May switch to MSVC to fix it.
CHANGELOG for direct-rocksdb
- Basic put/get is working at a higher level
- Initial release, containing only raw C bindings