|Did you know ...||Search Documentation:|
|Packs (add-ons) for SWI-Prolog|
|Title:||SWI-Prolog interface to RocksDB|
|Rating:||Not rated. Create the first rating!|
|Author:||Jan Wielemaker <J.Wielemaker@vu.nl>|
|Maintainer:||Jan Wielemaker <J.Wielemaker@cwi.nl>|
|Packager:||Jan Wielemaker <J.Wielemaker@cwi.nl>|
No reviews. Create the first review!.
This is a SWI-Prolog pack that provides
library(rocksdb), a binding to
The installation requires a recent C++ compiler. RocksDB can work with several compression libraries. Most systems have zlib installed, but others may provide better performance or less resource usage. See INSTALL.md. On Ubuntu 22.04 the following packages were installed:
sudo apt install libsnappy-dev liblz4-dev libzstd-dev libgflags-dev
Once these are in place, a simple
Should do the trick. Note that this clones RocksDB and builds it the way we need the library. This requires significant disk space (1.4Gb) and takes long (several minutes on a modern machine).
There are a number of issues with several pre-built versions of librocksdb:
As is, the most reliable way around is to include RocksDB, so we can control the version and build it the way that best fits our needs: as a static library with RTTI and -fPIC.
If the above fails
packdirectory of your installation or clone it elsewhere and link it.
?- pack_rebuild(rocksdb).to rebuild it. On failure, adjust Makefile to suit your installation and re-run the pack_rebuild/1 command.
The wrapper provides most of functionality of RocksDB. Column families are not supported, nor are the following features (this is not an exhaustive list):
The options are defined and documented in file
RocksDB persists its options to an OPTIONS file but there currently
is no Prolog support loading this, as in
RocksDB provides extensive logging and statistics for adjusting
the options. These are normally written to the LOG
the database directory, but can be written elsewhere by setting
Statistics can be turned on by the
Additional statistics-related options are:
See also https://github.com/facebook/rocksdb/wiki/Statistics http://rocksdb.org/blog/2018/08/01/rocksdb-tuning-advisor.html https://github.com/EighteenZi/rocksdb_wiki/blob/master/RocksDB-Tuning-Guide.md
If you want to support user-defined statsitics callbacks
DBOptions.info_log), it appears that there are multi-threaded
issues -- a simple implementation that called `Sfprintf(Suser_error,
...)` git a SEGV error when `Flush()` was implemented using
`Sflush(Suser_error)`. For reason reason, we don't support
or info_log_flush(:Goal)' in the optins. Setting
`info_log_level results in LOG files in the RocksDB directory, which
is probably good enough.
Other callback implementations (such as
listeners) could have similar problems.
These seem to be the most useful missing features that don't require a lot of work:
Pack contains 9 files holding a total of 85.7K bytes.