# SWI-Prolog interface for RocksDB

This is a SWI-Prolog pack that   provides library(rocksdb), a binding to
[RocksDB](http://rocksdb.org/).

## 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](https://github.com/facebook/rocksdb/blob/master/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).