• Stars
    star
    158
  • Rank 237,131 (Top 5 %)
  • Language
    Scala
  • License
    Apache License 2.0
  • Created over 9 years ago
  • Updated almost 7 years ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

⚛️ JustinDB is a highly available globally distributed key-value data store.

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