39 lines
1.3 KiB
Markdown
39 lines
1.3 KiB
Markdown
|
# RocksDB ADR
|
||
|
|
||
|
**Author**
|
||
|
Marko Budiselic (github.com/gitbuda)
|
||
|
|
||
|
**Status**
|
||
|
ACCEPTED
|
||
|
|
||
|
**Date**
|
||
|
January 23, 2024
|
||
|
|
||
|
**Problem**
|
||
|
|
||
|
Interacting with data (reads and writes) on disk in a concurrent, safe, and
|
||
|
fast way is a challenging task. Implementing all low-level primitives to
|
||
|
interact with various disk hardware efficiently consumes significant
|
||
|
engineering people. Whenever Memgraph has to store data on disk (or any
|
||
|
other colder than RAM storage system), the problem is how to do that in the
|
||
|
least amount of development time while satisfying all functional requirements
|
||
|
(often performance).
|
||
|
|
||
|
**Criteria**
|
||
|
|
||
|
- working efficiently in a highly concurrent environment
|
||
|
- easy integration with Memgraph's C++ codebase
|
||
|
- providing low-level key-value API
|
||
|
- heavily tested in production environments
|
||
|
- providing abstractions for the storage hardware (even for cloud-based
|
||
|
storages like S3)
|
||
|
|
||
|
**Decision**
|
||
|
|
||
|
There are a few robust key-value stores, but finding one that is
|
||
|
production-ready and compatible with Memgraph's C++ codebase is challenging.
|
||
|
**We select [RocksDB](https://github.com/facebook/rocksdb)** because it
|
||
|
delivers robust API to manage data on disk; it's battle-tested in many
|
||
|
production environments (many databases systems are embedding RocksDB), and
|
||
|
it's the most compatible one.
|