...
The Database should be open-sourced and able to support APIs for multiple programming languages as it can be extended in future but should definitely support C++ APIs as currently, we are using C++ APIs.
7) Very important comparison:- https://www.influxdata.com/blog/benchmarking-leveldb-vs-rocksdb-vs-hyperleveldb-vs-lmdb-performance-for-influxdb/
8) https://mozilla.github.io/firefox-browser-architecture/text/0017-lmdb-vs-leveldb.html
Popular Key-Value store NoSQL Databases comparison. Also, one of the good comparisons can be found here.
Databases | Open Source | C++ APIs | Low Latency | Key-Value Storage | Embedded database with on-disk storage mode | In-Memory (Caching) Capabilities | Note | ||
---|---|---|---|---|---|---|---|---|---|
Aerospike | |||||||||
Berkeley DB (one of the best) | Developed by Oracle Inc. Support APIs for multiple programming languages. Support many Operating systems as the server. One of the oldest and developed in the year 1994. | ||||||||
Redis | only In-memory capabilities. Can only use it as cache store so cannot store data larger than RAM size. | One of the best but cannot store big volumes of data larger than RAM hence cannot be used for our purpose. | |||||||
LevelDB | Developed by Google Inc. IoS is not supported as a server operating system. Developed in 2011. | ||||||||
RocksDB (also very much recommended) | Developed by Facebook Inc. Developed in 2013. Only supports APIs in language C++ and Java. RocksDB supports Transactions when using a TransactionDB or OptimisticTransactionDB. Transactions have a simple BEGIN/COMMIT/ROLLBACK API and allow applications to modify their data concurrently while letting RocksDB handle the conflict checking. RocksDB supports both pessimistic and optimistic concurrency control. | ||||||||
LMDB (Very high performant) | |||||||||
BadgerDB | When Badger is running in in-memory mode, all the data is stored in the memory. Reads and writes are much faster in in-memory mode, but all the data stored in Badger will be lost in case of a crash or close. Badger doesn't support on-disk and in-memory mode together. | Riak KV | |||||||
Amazon DynamoDB | |||||||||
SQLite (Not very good performance) | Does not guarantee domain integrity. SQLite works great as the database engine for most low to medium traffic. |
It primarily depends on your requirements, as a rule of thumb:
* If your workload is random-writes heavy, choose lsm (RocksDB/LevelDB)
* If your workload is serial-writes heavy, both are similar
* If your workload is read-heavy (random or not) go for lmdb
...
hyc_symas on Nov 11, 2018 [–]
...
http://lmdb.tech/bench/ondisk/
...
Considering multiple parameters mentioned above along with support for Transactions etc. We decided to move ahead with RocksDB.