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 Threads
for reads, caching & compaction.
Branches: This is the master
branch. See develop
for
latest (unstable).
Status: Under testing & performance optimisations. See project status.
Thank you JetBrains & JProfiler for full-featured open-source licences to their awesome development tools!
[Become a sponsor] |
- Simple data types -
Map
,Set
,Queue
,SetMap
&MultiMap
with native Java and Scala collections support. - Conditional updates using any pure JVM function - No query language.
- Atomic updates and inserts with
Transaction
API. - 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
- Caching
- 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
TODO
. - 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.
Your feedback and support is very important to get to production. Please get involved via chat, discussion, issues or by becoming a sponsor.
Future releases might not be backward compatible until we are production ready.
See tasks labelled Production release that are required before becoming production ready.
- 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.