The rocksdb branch provides experimental support for RocksDB as the cache engine.
Reasons for RocksDB
At the moment, Imposm can use LevelDB or the optimized HyperLevelDB fork of LevelDB. HyperLevelDB is faster then LevelDB for the workload of Imposm. However, HyperLevelDB is not actively maintained anymore.
RocksDB is maintained and fast.
Implementation
This branch uses minimal cgo bindings from ledisdb. gorocksdb and similar bindings are not used as they implement the complete RocksDB API and the API changed in the past. This results in compatibility issues between the gorocksdb and RocksDB versions for API functions that are not used by Imposm.
The actual changes to the Imposm code are minimal since the API of Levigo (the LevelDB bindings) and RocksDB are similar.
Issues
RocksDB requires C++11 which is not supported by glibc of older systems. The current build script uses Debian 6 to create binaries that are compatible with SLES 11 or RHEL 6. An updated build script would create binaries that are incompatible with SLES 11, RHEL 6/7, Debian 7.
First tests showed horrible -write performance on Linux. (Performance is ok on MacOS).
The rocksdb branch provides experimental support for RocksDB as the cache engine.
Reasons for RocksDB
At the moment, Imposm can use LevelDB or the optimized HyperLevelDB fork of LevelDB. HyperLevelDB is faster then LevelDB for the workload of Imposm. However, HyperLevelDB is not actively maintained anymore.
RocksDB is maintained and fast.
Implementation
This branch uses minimal cgo bindings from ledisdb. gorocksdb and similar bindings are not used as they implement the complete RocksDB API and the API changed in the past. This results in compatibility issues between the gorocksdb and RocksDB versions for API functions that are not used by Imposm.
The actual changes to the Imposm code are minimal since the API of Levigo (the LevelDB bindings) and RocksDB are similar.
Issues
RocksDB requires C++11 which is not supported by glibc of older systems. The current build script uses Debian 6 to create binaries that are compatible with SLES 11 or RHEL 6. An updated build script would create binaries that are incompatible with SLES 11, RHEL 6/7, Debian 7.
First tests showed horrible
-write
performance on Linux. (Performance is ok on MacOS).