/AlfheimDB

A linearizability distributed database by raft and wisckey.

Primary LanguageGoMIT LicenseMIT

AlfheimDB

A linearizability distributed database by raft and wisckey, which supports redis client. The badger is default raft log store, you can use AlfheimDB-WAL instead of it.

Build

This project build by mage, you will need install it at first:

go get github.com/magefile/mage

Execute "mage build" in project dir:

mage build

Test Case

The single node test:

mage initDataDir
mage test single

You can also startup a test cluster, the magefile include a cluster test case:

mage initDataDir
mage test id1
mage test id2
mage test id3

Dependencies

Command Support

String

  • Set
  • Get
  • Incr
  • Del
  • SetNx
  • SetEx
  • Expire
  • TTL
  • Keys

Benchmarks

Macbook pro 13, 2020(M1) SSD

Single node test case

Set/Incr and Get:

./redis-benchmark -p 6379 -t set,get -n 1000000 -q  -c 512
SET: 114850.12 requests per second, p50=2.727 msec                    
GET: 161524.80 requests per second, p50=1.447 msec 

Three node test case

Set/Incr and Get:

./redis-benchmark -p 6379 -t set,get -n 500000 -q  -c 512
SET: 66952.33 requests per second, p50=6.279 msec                    
GET: 161917.09 requests per second, p50=1.447 msec 

Centos 7 8c8g HDD

Single node test case

./redis-benchmark -p 6379 -t set,get -n 500000 -q  -c 512
SET: 40038.44 requests per second, p50=10.431 msec
GET: 100684.66 requests per second, p50=2.423 msec 

Three node test case

Set/Incr and Get:

./redis-benchmark -p 6379 -t set,get -n 500000 -q  -c 1024
SET: 23836.77 requests per second, p50=39.391 msec                    
GET: 92114.96 requests per second, p50=5.375 msec

References

Raft: "Raft: In Search of an Understandable Consensus Algorithm"

Wisckey: "WiscKey: Separating Keys from Values in SSD-conscious Storage"(FAST2016)

Todo List

  • WASM script
  • mage build
  • High performance WAL log
  • Set support
  • Map support
  • ZSet support