Distributed Key-Value Storage built on top of Scala/Akka
JustinDB KV is an eventually consistent key-value database that favours write availability. It’s a faithful implementation of Amazon’s Dynamo, with advanced features such as vector clocks for conflict resolution. JustinDB is also fault-tolerant. Servers can go up or down at any moment with no single point of failure.
Problem | Technique | Advantage |
---|---|---|
Partitioning | Consistent Hashing | Incremental Scalability |
Membership and failure detection | Gossip-based membership protocol and failure detection | Preserves symmetry and avoids having a centralized registry for storing membership and node liveness information |
High Availability for writes | Vector clocks with reconciliation during reads | Version size is decoupled from update rites |
Recovering from permanent failures | Anti-entropy using Merkle trees | Synchronizes divergent replicas in the background |
Conflicts resolution | CRDTs | Automatic conflict resolution during reads |
Its a toolkit and runtime for building highly concurrent applications which comes with ideas that have been around from some time - actor model. Besides that it has many welcome features around clustering:
- load balancing
- location transparency
- self maintenance
- fault tolerance
In case it's not obvious, Justin performs no authentication, authorization, or any validation of input data. Clients must implement those things themselves.
JustinDB works with Java 8 and newer.