Rasputin DB :globewithmeridians:
a distributed transactional store

triumvirs: stability, performance, and composability
key types
- table: transactional namespaced KV backed by RocksDB
- log: namespaced sequential messages with configurable retention policy
- object: utilizes system VFS, useful for CDN type workloads
each type supports (possibly-disjoint) transactional range-based operations
client semantics
- read/write/delete a range
- subscribe: receive a linearized mutation stream on a specified range of a collection
- watch: receive a notification (at most once semantics, it may never come even if a mutation has occurred) when a mutation occurs on a range of a collection
replication modes (per-collection)
- consensus: for use where loss of acked writes is unacceptable, and throughput is willing to be sacrificed
- async: for high-throughput operations which can tolerate a finite window of data loss in the event of a master failure
roadmap
- [x] mio event loops
- [x] leadership algorithm for a range
- [x] rocksdb persistence layer
- [x] consensus algorithm based on parts of Raft and Paxos
- [ ] meta table that contains information about collections and replicas
- [ ] mutable membership over consensus algorithm
- [ ] lexicographic resharding of keyspace