Live data from Hacker News

IceFireDB: Distributed disk storage database based on Raft and Redis protocol

github.com

21–30 of 71 posts

Re: IceFireDB: Distributed disk storage database based on Raft and Redis protocol

#21
post #6

Not quite sure what this is supposed to be good for.

I'd guess for "I want redis, but more durable clustering" (although I don't quite remember how much redis nowadays offers there itself). Would want a lot more info before trusting it for that though.

You can configure Redis to be plenty durable... but all the data has to fit into memory somewhere.

Re: IceFireDB: Distributed disk storage database based on Raft and Redis protocol

#22
post #15

A database without any test harness? While this could be a good toy or PoC I would never use it in production. Readers should be aware, just because it's on HN doesn't mean it's production ready.

It uses Raft underneath as well which means there's a bunch of non-determinism and hell for anyone who invokes it as well from experience. The thing is cursed.

Source: several years dealing with vault and consul.

Re: IceFireDB: Distributed disk storage database based on Raft and Redis protocol

#23
post #9

One of the child comments made the observation that "this speaks Redis." Makes me wonder if there is any spec for the Redis commands. I.e., in the same way that SQL defines an interface, but leaves the details up to individual implementations, is there a "Redis" interface that leaves the details up to the implementation? I'm thinking of something similar to ISO or RFC.

You’d probably want to define two specs, a basic and full. There are several Redis-compatible data stores, but (if memory serves) you’ll find they almost always lack some advanced Redis features, e.g. transactions.

Re: IceFireDB: Distributed disk storage database based on Raft and Redis protocol

#24
post #22
post #15

A database without any test harness? While this could be a good toy or PoC I would never use it in production. Readers should be aware, just because it's on HN doesn't mean it's production ready.

It uses Raft underneath as well which means there's a bunch of non-determinism and hell for anyone who invokes it as well from experience. The thing is cursed. Source: several years dealing with vault and consul.

We use consul a bit as some "light" service discovery and a KV store for a few things without much issue so far.

What demons did you encounter with vault/consul?

Re: IceFireDB: Distributed disk storage database based on Raft and Redis protocol

#25
post #22

Earlier quoted context omitted.

It uses Raft underneath as well which means there's a bunch of non-determinism and hell for anyone who invokes it as well from experience. The thing is cursed. Source: several years dealing with vault and consul.

We use consul a bit as some "light" service discovery and a KV store for a few things without much issue so far. What demons did you encounter with vault/consul?

We had some massive problems including complete cluster collapse requiring rebuilds from scratch, eternal leadership elections and occasionally nodes would just entirely stop responding to KV requests causing cascading failures outside. Vault is a massive damage multiplier for these issues plus some other nasty ones like buggy barely supported plugins.

Re: IceFireDB: Distributed disk storage database based on Raft and Redis protocol

#26
post #22
post #15

A database without any test harness? While this could be a good toy or PoC I would never use it in production. Readers should be aware, just because it's on HN doesn't mean it's production ready.

It uses Raft underneath as well which means there's a bunch of non-determinism and hell for anyone who invokes it as well from experience. The thing is cursed. Source: several years dealing with vault and consul.

Please post URLs to bugs / issues to give your comment some cred. Thanks!

Re: IceFireDB: Distributed disk storage database based on Raft and Redis protocol

#27
post #2

SET: 253232.12 requests per second GET: 2130875.50 requests per second The 10:1 throughput ratio for GET vs SET is interesting. Redis being in-memory, the rates there are pretty close to the same for read/write. Is a 10:1 ratio typical for a storage backed distributed kv store? Edit: Looks like CockroachDb has roughly a 3:1 ratio, similar for YugabyteDB: https://www.cockroachlabs.com/docs/stable/performance.html http…

Comparisons of read/write ratios has to account for several differences in design and implementation. Representative benchmarks are difficult.

Things that can make a difference: Databases have subtly different definitions of "durability", so they aren't always doing semantically equivalent operations. Write throughput sometimes scales with the number of clients and it is not possible to saturate the server with a single client due to limitations of the client protocol, so single client benchmarks are misleading. Some databases allow read and write operations to be pipelined; in these implementations it is possible for write performance to sometimes exceed read performance.

For open source databases in particular, read and write throughput is significantly throttled by poor storage engine performance, so the ratio of read/write performance is almost arbitrary. That 3:1 ratio isn't a good heuristic because the absolute values in these cases could be much higher. A more optimal design would offer integer factor throughput improvements for both reading and writing, but it is difficult to estimate what the ratio "should" be on a given server absent a database engine that can really drive the hardware.

Re: IceFireDB: Distributed disk storage database based on Raft and Redis protocol

#28
post #15

A database without any test harness? While this could be a good toy or PoC I would never use it in production. Readers should be aware, just because it's on HN doesn't mean it's production ready.

A database without any code, actually.

It's less than a few hundred lines of Go that just wraps two other databases (syndtr/goleveldb and ledisdb/ledisdb) with a third library (tidwall/uhaha) that provides a Raft API.

Re: IceFireDB: Distributed disk storage database based on Raft and Redis protocol

#29
post #9

One of the child comments made the observation that "this speaks Redis." Makes me wonder if there is any spec for the Redis commands. I.e., in the same way that SQL defines an interface, but leaves the details up to individual implementations, is there a "Redis" interface that leaves the details up to the implementation? I'm thinking of something similar to ISO or RFC.

Probably not like an ISO or RFC. Probably more like AWS S3: it has an API that other software conforms to, but it isn’t strictly speaking a standard

Re: IceFireDB: Distributed disk storage database based on Raft and Redis protocol

#30
post #16

Earlier quoted context omitted.

Raft involves waiting for fsync on a majority of nodes, so that's not too surprising. 'Typical' is a matter of what guarantees you want to give.

Typically people use raft for leader election which in turn can coordinate writes. I don't think the writes are being fsync'd in the raft logs here. At least I wouldn't expect that behavior.

Each write should be fsync'd to the WAL, right?
Post reply on HN