Homekv
HomeKV is a Rust memory key-value store which support Atomicity. Atomicity is implemented by a MVCC storage, which also make Reading and Writing don't block each other so that they can run in parallel. We are trying to make it a distributed system to support scalability and availablility.
Install / Use
/learn @softwheel/HomekvREADME
HOMEKV - Highly Optimized & Memory Efficient Key Value Store
Basic
HomeKV is a Rust key-value store which support Atomicity. Atomicity is implemented by a MVCC storage, which also make Reading and Writing don't block each other so that they can run in parallel.
The core MVCC storage of HomeKV acts as RWLock<T>, but it's better.
Because writes and multiple reads can be performed simultaneously,
which means they are not block each other to reduce contention.
To make the implementation easier, HomeKV only use the BTreeMap in Rust standard lib. The drawback of it is that MVCC needs to clone the whole tree to maintain multiple versions. An improvement could be change the underlying data structure to B+Tree. But it will be more complicated and can not be done in a short time.
WIP: Making HomeKV a distributed system for large-scale data.
- Built-in Service Discovery - Gossip & Phi Accrual Failure Detector
- Efficiently Distributing Keys - Consistent Hashing
- Replication Strong Consistence - Raft
- More Storage Types - Fragmented LSM
Server Concurrency Model
HomeKV uses Rust Tonic as the GRPC package, which handles concurrent requests in Asynchronous Programming way to achieve high performance.
ProtoBuf service definition is at api/proto/homekv_service.proto
API
HomeKV provides a RPC service through GRPC, which includes the following APIs,
get: get values for multiple keysset: set multiple key-value pairs transactionallydel: del values for multiple keys transactionallymetrics: show storage metrics, number of keys, size of total values, and number of commands
Build
# homekv/
.
├── Cargo.lock
├── Cargo.toml
├── README.md
├── api
│ └── proto
│ └── homekv_service.proto
├── build.rs
└── src
├── bin
│ ├── hkvctl.rs
│ └── homekv.rs
├── common
│ ├── error.rs
│ └── mod.rs
├── lib.rs
└── storage
├── btree_store.rs
├── mod.rs
└── mvcc.rs
Rust has a versatile build tool, Cargo, which make our building is very easy.
Rust ENV Preparation
Please follow the Official Rust Installation to use rustup tool to
install Rust and Cargo.
Cargo Build
HomeKV provides a command-line client tool called hkvctl, and a server
starter called homekv. They are both under the src/bin folder, which
will be built as binary executable files under target/release when we
build this repo.
We just need to run the following command under the root folder of this repo.
# switch pwd to homekv
cargo build --release
Run
Start homekv server
# switch pwd to homekv
./target/release/homekv -h 127.0.0.1 -p 20001
Play with the cli
# switch pwd to homekv
# Set key/keys by specifying `cmd` as `set` and `kvs` as 1/n key-value pairs
./target/release/hkvctl -h 127.0.0.1 -p 20001 --cmd set --kvs dummy_key=🦫
./target/release/hkvctl -h 127.0.0.1 -p 20001 --cmd set --kvs trail=big_cedder people=5 start_time=12:00
# Get key/keys by specifying `cmd` as `get` and `keys` as 1/n keys
./target/release/hkvctl -h 127.0.0.1 -p 20001 --cmd get --keys dummy_key
./target/release/hkvctl -h 127.0.0.1 -p 20001 --cmd get --keys trail people
# Not existing keys
./target/release/hkvctl -h 127.0.0.1 -p 20001 --cmd get --keys end_time
# Delete key/keys by specifying `cmd` as `del` and `keys` as 1/n keys
./target/release/hkvctl -h 127.0.0.1 -p 20001 --cmd del --keys dummy_key
./target/release/hkvctl -h 127.0.0.1 -p 20001 --cmd del --keys people start_time
# Not existing keys
./target/release/hkvctl -h 127.0.0.1 -p 20001 --cmd del --keys end_time
# Observability
./target/release/hkvctl -h 127.0.0.1 -p 20001 --cmd metrics
Related Skills
openhue
347.0kControl Philips Hue lights and scenes via the OpenHue CLI.
sag
347.0kElevenLabs text-to-speech with mac-style say UX.
weather
347.0kGet current weather and forecasts via wttr.in or Open-Meteo
tweakcc
1.6kCustomize Claude Code's system prompts, create custom toolsets, input pattern highlighters, themes/thinking verbs/spinners, customize input box & user message styling, support AGENTS.md, unlock private/unreleased features, and much more. Supports both native/npm installs on all platforms.
