Skip to content

Latest commit

 

History

History

rocksdb

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

SWI-Prolog interface for RocksDB

This is a SWI-Prolog pack that provides library(rocksdb), a binding to RocksDB.

Installation

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. Once these are in place, a simple

?- pack_install(rocksdb).

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).

Why are you not using the pre-build librocksdb?

There are a number of issues with several pre-built versions of librocksdb:

  • Shared objects are often linked to jemalloc or tcmalloc. This prevents lazy loading of the library, causing either problems loading or running the embedded rocksdb.
  • Various libraries are compiled without RTTI (RunTime Type Info), which breaks subclassing RocksDB classes.
  • Static library is by default compiled without -fPIC and thus not usable.

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.

Manual installation

If the above fails

  • Clone this prepository in the pack directory of your installation or clone it elsewhere and link it.
  • Run ?- pack_rebuild(rocksdb). to rebuild it. On failure, adjust Makefile to suit your installation and re-run the pack_rebuild/1 command.

Status

The wrapper provides most functionality of RocksDB. It does not provide access to the many options that can be set to configure RocksDB. These will be added on demand. Please create issues for missing functionality (or bugs).