⚛️ JustinDB is a highly available globally distributed key-value data store.
Switch branches/tags
Nothing to show
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
deploy/kubernetes
justin-core/src
justin-http-api/src
justin-ring/src
justin-storage-api/src/main/scala/justin/db/storage
justin-storage-in-mem/src
justin-storage-rocksdb/src
justin-vector-clocks/src
project
src
.gitignore
.java-version
.travis.yml
LICENSE
README.md
build.sbt
logo.png
scalastyle-config.xml

README.md

JustinDB

Build Status codecov Codacy Badge License Project Status Gitter

Watch on GitHub Star on GitHub

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.

➜  JustinDB git:(master) ✗ docker exec -it justindb /bin/bash
   ___              _    _        ______ ______
  |_  |            | |  (_)       |  _  \| ___ \
    | | _   _  ___ | |_  _  _ __  | | | || |_/ /
    | || | | |/ __|| __|| || '_ \ | | | || ___ \
/\__/ /| |_| |\__ \| |_ | || | | || |/ / | |_/ /
\____/  \__,_||___/ \__||_||_| |_||___/  \____/

Cli:
    cli help
More documentation available at:
    https://github.com/speedcom/JustinDB
    https://speedcom.github.io/

Summary of techniques

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

Why akka

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:

  1. load balancing
  2. location transparency
  3. self maintenance
  4. fault tolerance

Authentication, authorization, validation

In case it's not obvious, Justin performs no authentication, authorization, or any validation of input data. Clients must implement those things themselves.

System Requirements

JustinDB works with Java 8 and newer.

Bunch of posts about JustinDB

  1. JustinDB - Modern REACTIVE NoSQL database
  2. JustinDB - Database Model
  3. JustinDB - Pluggable persistent and in-memory storage engines
  4. JustinDB - More than 700 commits!
  5. JustinDB - Serialization that greatly improves performance
  6. JustinDB - Replication and Partitioning
  7. JustinDB - Why Scala and Akka?
  8. JustinDB - Data versioning: Vector Clocks
  9. JustinDB - HTTP API
  10. JustinDB - The Ring
  11. JustinDB - Preference list
  12. JustinDB - Solving data entropy: Read Repair
  13. JustinDB - Solving data entropy: Active-Anti Entropy
  14. JustinDB - Executable JAR
  15. JustinDB - Multi-Datacenter Replication