Live data from Hacker News

Show HN: Minikv – Distributed key-value and object store in Rust (Raft, S3 API)

github.com

21–30 of 40 posts

Re: Show HN: Minikv – Distributed key-value and object store in Rust (Raft, S3 API)

#21
post #6

Last posted 16 days ago: https://news.ycombinator.com/item?id=46661308

>All the code, architecture, logic, and design in minikv were written by me, 100% by hand. Why people always lie with this? Especially in this case that they uploaded the entire log: Date: Sat Dec 6 16:08:04 2025 +0100 Add hashing utilities and consistent hash ring Date: Sat Dec 6 16:07:24 2025 +0100 Create mod.rs for common utilities in minikv Date: Sat Dec 6 16:07:03 2025 +0100 Add configuration structures for mini…

It looks like that if you want logically separated commits from a chunk of programming you have done. Stage a file or a hunk or two, write commit message, commit, rinse and repeat.

Re: Show HN: Minikv – Distributed key-value and object store in Rust (Raft, S3 API)

#22
post #19
post #17

Earlier quoted context omitted.

How does this deleted fix_everything.sh fit in to your story? https://github.com/whispem/minikv/commit/6e01d29365f345283ec...

I don't see the problem to be honest

Hmm. You doth protest too much, methinks :)

Re: Show HN: Minikv – Distributed key-value and object store in Rust (Raft, S3 API)

#23
post #3
post #2

I there an official docker image? I am looking for something more light-weighted than MinIO. What are the requirements?

Have you checked garage - https://garagehq.deuxfleurs.fr ? Not affiliated nor trying to overshadow the posted project

Yes! I'll check as soon as possible

Re: Show HN: Minikv – Distributed key-value and object store in Rust (Raft, S3 API)

#24
post #16

Earlier quoted context omitted.

I am not going to pretend to know what this person did, but I've definitely modified many things at once and made distinct commits after the fact (within 30s). I do not find it that abnormal.

Thanks a lot! I make distinct commits "every 30s" because I'm focused and I test my project. If the CI is green, I don't touch of anything. If not, I work on the project until the CI is fully green.

What does that mean? You got feedback from the CI within 30 seconds and immediately pushed a fix?

Re: Show HN: Minikv – Distributed key-value and object store in Rust (Raft, S3 API)

#25
Bit of a tangent, but what I'm looking for is a S3-compatible server with transparent storage, ie storing each file (object) as an individual file on disk.

Minio used to do that but changed many years ago. Production-grade systems don't do that, for good reason. The only tool I've found is Rclone but it's not really meant to be exposed as a service.

Anyone knows of an option?

Re: Show HN: Minikv – Distributed key-value and object store in Rust (Raft, S3 API)

#26
post #13
post #9

Hello, cool project, did you think about maybe contributing to the key-value store feature of Garage, which is also a Rust project by open source development lab Deux Fleurs?

Hello! Thank you for your message. I don’t know this project, do you have a GitHub link maybe?

Sure, here you go:

- Documentation: https://garagehq.deuxfleurs.fr/

- Git repo: https://git.deuxfleurs.fr/Deuxfleurs/garage

Re: Show HN: Minikv – Distributed key-value and object store in Rust (Raft, S3 API)

#27
post #26
post #13

Earlier quoted context omitted.

Hello! Thank you for your message. I don’t know this project, do you have a GitHub link maybe?

Sure, here you go: - Documentation: https://garagehq.deuxfleurs.fr/ - Git repo: https://git.deuxfleurs.fr/Deuxfleurs/garage

Thanks!

Re: Show HN: Minikv – Distributed key-value and object store in Rust (Raft, S3 API)

#28

Great educational project! I'm curious why you are using Raft and also 2PC unless you're sharding data and doing cross-shard transactions? Or is Raft only for cluster membership but 2PC is for replicating data? If that's the case it kind of seems like overkill but I'm not sure. Few distributed filesystems/object stores seem to use Raft (or consensus at all) for replicating data because it's unnecessary overhead. Chai…

Thank you for this sharp and detailed question! In minikv, both Raft and 2PC are purposefully implemented, which may seem “overkill” in some contexts, but it serves both education and production-grade guarantees:

- Raft is used for intra-shard strong consistency: within each "virtual shard" (256 in total), data and metadata are replicated via Raft (with leader election and log replication), not just for cluster membership;

- 2PC (Two-Phase Commit) is only used when a transaction spans multiple shards: this allows atomic, distributed writes across multiple partitions. Raft alone is not enough for atomicity here, hence the 2PC overlay;

- The design aims to illustrate real-world distributed transaction tradeoffs, not just basic data replication. It helps understand what you gain and lose with a layered model versus simpler replication like chain replication (which, as you noted, is more common for the data path in some object stores).

So yes, in a pure object store, consensus for data replication is often skipped in favor of lighter-weight methods. Here, the explicit Raft+2PC combo is an architectural choice for anyone learning, experimenting, or wanting strong, multi-shard atomicity. In a production system focused only on throughput or simple durability, some of this could absolutely be streamlined.

Re: Show HN: Minikv – Distributed key-value and object store in Rust (Raft, S3 API)

#29

Hi Emilie, nice project, thanks for sharing. I’m curious whether there were any decisions that you added mainly for educational value even though you wouldn’t make the same call in a production system?

Thanks for the feedback and for the question! A number of choices in minikv are explicitly made to explain distributed system ideas clearly, even if not always optimal for hyperscale prod environments:

- Raft + 2PC together, as above, so people can see how distributed consensus and cross-shard atomicity actually operate and interplay (with their trade-offs);

- Several subsystems are written for readability and transparency (clean error propagation, explicit structures) even if that means a few more allocations or some lost microseconds;

- The storage layer offers different backends (RocksDB, Sled, in-memory) to let users experiment and understand their behavior, not because it’s always ideal to support so many;

- Features such as CDC (Change Data Capture), admin metrics, WAL status, and even “over-promiscuous” logs are exposed for teaching/tracing/debugging, though those might be reduced or hardened in production;

- Much of the CLI/admin API exposes “how the sausage is made,” which is gold for learning but might be hidden in a SaaS-like setting;

So yes, if I targeted only hyperscale production, some internals would be simplified or streamlined, but the educational and transparency value is central to this project’s DNA.

Re: Show HN: Minikv – Distributed key-value and object store in Rust (Raft, S3 API)

#30
post #4

Looks nice. What is the memory consumption under a significant load? That seems to be as much important as the throughput & latency.

Very relevant question! The memory profile in minikv depends on usage scenario and storage backend.

- With the in-memory backend: Every value lives in RAM (with HashMap index, WAL ring buffer, TTL map, and Bloom filters). For a cluster with a few million objects, you’ll typically see a node use as little as 50–200 MB, scaling up with active dataset size and batch inflight writes;

- With RocksDB or Sled: Persistent storage keeps RAM use lower for huge sets but still caches hot keys/metadata and maintains Bloom + index snapshots (both configurable). The minimum stays light, but DB block cache, WAL write buffering, and active transaction state all add some baseline RAM (tens to a few hundreds of MB/node in practice);

- Heavy load (many concurrent clients, transactions, or CDC enabled): Buffers, Raft logs, and transaction queues scale up, but you can cap these in config (batch size, CDC buffer, WAL fsync policy, etc);

- Prometheus /metrics and admin API expose live stats, so you can observe resource use per node in production.

If you have a specific workload or dataset in mind, feel free to share it and I can benchmark or provide more precise figures!

Post reply on HN