Non-blocking persistent and in-memory key-value storage engine for the JVM with no external core dependencies (#307).
Small footprint: around 7.1 MB jar size.
Status: Under testing & performance optimisations. See project status.
- 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 - Asnc & 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
Your feedback and review is very important to get to production. Please get involved via chat, issues or email which is on my profile.
Undergoing 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.
Related GitHub projects
- SwayDB.java.examples - Java examples demonstrating features and APIs.
- SwayDB.kotlin.examples - Kotlin examples demonstrating features and APIs.
- SwayDB.scala.examples - Scala examples demonstrating features and APIs.
- SwayDB.benchmark - Performance benchmarks.
- SwayDB.website - Website code.
Thank you Jetbrains for providing an open-source licence for their awesome development tools.