Releases: lighkLife/kvs
Releases · lighkLife/kvs
Concurrency and parallelism
Task: Create a multi-threaded, persistent key/value store server and client
with synchronous networking over a custom protocol.
Goals:
- Write a simple thread pool
- Use channels for cross-thread communication
- Share data structures with locks
- Perform read operations without locks
- Benchmark single-threaded vs multithreaded
Topics: thread pools, channels, locks, lock-free data structures,
atomics, parameterized benchmarking.
Synchronous client-server networking
Task: Create a single-threaded, persistent key/value store server and client
with synchronous networking over a custom protocol.
Goals:
- Create a client-server application
- Write a custom protocol with
std
networking APIs - Introduce logging to the server
- Implement pluggable backends with traits
- Benchmark the hand-written backend against
sled
Topics: std::net
, logging, traits, benchmarking.
A Log-structured storage
Task:
Create a persistent key/value store that can be accessed from the command line.
Goals:
- Handle and report errors robustly
- Use serde for serialization
- Write data to disk as a log using standard file APIs
- Read the state of the key/value store from disk
- Map in-memory key-indexes to on-disk values
- Periodically compact the log to remove stale data
An in-emory storage
Task:
Create an in-memory key/value store that passes simple tests and responds
to command-line arguments.
Goals:
- Install the Rust compiler and tools
- Learn the project structure used throughout this course
- Use
cargo init
/run
/test
/clippy
/fmt
- Learn how to find and import crates from crates.io
- Define an appropriate data type for a key-value store
Topics:
testing, the clap
crate, CARGO_VERSION
etc., the clippy
and rustfmt
tools.