Skip to content

justin-db/JustinDB

master
Switch branches/tags

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
Code

Latest commit

* add Kubernetes deployment definition (Service + StatefulSet)

* new Docker definition

* working configuration

* passing multi-jvm tests

* set justindb node-id based on kubernetes node hostname value

* expose 9000 and 19999 ports
844a3f6

Git stats

Files

Permalink
Failed to load latest commit information.

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

Releases

No releases published

Packages

No packages published