An implementation of this paper.
The project here is the result of the work of students @ UCSC: dwilby, anassadi, bgluu, and jkong--the different areas we worked on can be found in the contributions.yml.
- Sharding using consistent hashing
- Quorum-based replication
- Scalable Docker containers
- Causal/Eventual consistency
- Fault tolerant over network partitions and lost packets
- Robust gossip protocal
Currently, there is no way to detect if an individual replica is down.
After cloning the repository, you will
- Build the Docker image
- Create a Docker subnet for the replicas
- Run the number of replicas you want by creating that number of Docker container copies and specifying their ip/subnet
- Send a
PUT
request to one of the containers with the following request body:
num_shards: n, // an integer
nodes: [] // the addresses of the other containers
Now you can send PUT
, GET
, and DELETE
requests to any one of the containers to insert data efficiently and durably.
After building the docker image
- Run the
test.sh
file in thetests
folder to set up the database - Run the
make_partition.sh
file to simulate network partitions usingiptables
- Run any of the
run_test_*.sh
scripts
This project is not currently being maintained.