Persistent and in-memory key-value storage engine for the JVM aimed at high performance & resource efficiency.
Small footprint: around 7.1 MB jar size. No external core dependency (#307).
Scalable on a single machine: Distribute data on multiple local SSDs. Allocate single or multiple
for reads, caching & compaction.
Branches: This is the
master branch. See
Status: Under testing & performance optimisations. See project status.
|[Become a sponsor]|
- Simple data types -
MultiMapwith native Java and Scala collections support.
- Conditional updates using any pure JVM function - No query language.
- Atomic updates and inserts with
- Non-blocking core with configurable APIs for blocking, non-blocking and/or reactive use-cases.
- Single or multiple disks persistent, in-memory or eventually persistent.
- Streams - Async & sync forward and reverse data streaming/iteration.
- TTL - non-blocking, non-polling asynchronous auto expiring key-values.
- Range operations to update, remove & expire a range of key-values.
- Key only iterations (Lazily fetched values).
- Configurable compression with LZ4 & Snappy
- Configurable core internals to support custom workloads.
- Duplicate values elimination with compressDuplicateValues.
Highly configurable to suit different workloads. Some known use-cases are:
- General key-value storage
- Message queues
- Time-series or Events data
- Application logs
- Archiving data or cold storage with high file level compression
Contributions are encouraged and welcomed. We are here to help and answer any questions.
Code of conduct - Be nice, welcoming, friendly & supportive of each other. Follow the Apache foundation's COC.
Contributing to data management API
Contributing to core API
- See issues labelled good first issue .
Contributing to core internals
- See code marked
- Pick any small section to improve. You will find that everything is a function and can be unit-tested independently, so you can easily pick anything to work on.
- See code marked
Under testing & performance optimisations.
Future releases might not be backward compatible until we are production ready.
See tasks labelled Production release that are required before becoming production ready.