Hacker News new | ask | show | jobs
by dimgl 971 days ago
I don’t think that’s necessarily always true. I was recently looking into using Redis as a regular database. Unfortunately data is still kept in memory even if it’s persisted on disk, so it was a no-go. You’d be surprised what people want!
4 comments

I'll bite. I think with most relational and document databases, my view of the "classical world", you are often storing all of your data in tables or documents in a structured way. Normalizing the data where possible. You're then building indexes on that data to pull it out in a useful operational, optimizing for the most common operations. If a new use case comes up, you add some more tables, add some constraints, and create some new indexes.

I think with Redis, you are starting knowing that your use case needs to be fast. You start with the access patterns and fit that into key/value lookups (or search with modules). You're typically denormalizing the data, duplicating it or aggregating it from other places, so that you can serve operational data fast. Otherwise, just use in-memory SQL.

>You’d be surprised what people want!

If what you want is persistent k/v, then there are already tons databases that can do that. Redis has a different use case, so what are you trying to say? That you want to misuse tools?

> If what you want is persistent k/v, then there are already tons databases that can do that.

Are there? What's a good, mainstream, persistent k/v for cheap single-node instances? PostgreSQL's KV support isn't good enough, Cassandra and MongoDB expect to be set up as a cluster and have all the overhead of that, BikeshedDB is alpha and I won't touch their upstream for obvious reasons, CouchDB is pretty much unmaintained, ....

How about LMDB ? It’s single writer/multiple reader, very fast and reliable.
This thread is my first time hearing of it, it doesn't seem particularly established/mature (e.g. I can't find cloud services offering managed instances, whereas there are plenty of those for Redis)
You didn't read enough what it actually is. Its embedded db like rocksdb.
Then it's hardly a substitute for Redis.
RocksDB, Badger if you want embedded; which seems to be a more popular mechanism among kv-stores.

LMDB.

FoundationDB, etcd, consul in single node mode.

I'm not looking for embedded, we're talking about a Redis substitute. etcd/consul feel oriented towards running as a cluster and I'd expect overhead for that. FoundationDB is potentially a good shout, but it's not that established, e.g. it doesn't seem to be available in a managed way in cloud hosting environments.
KV Stores seem to be in a kind of split place, existing either as embedded, or full cluster mode. There isn’t really a “sqlite” or “postgres” of persistent KV stores. Cloud providers ship their own proprietary KV-stores: Dynamo in AWS, Bigtable in GCP. If you are ok with hosted, Scylla is also an option.

I’m always shocked that people use Redis for anything other than an ephemeral cache.

Your second paragraph follows from your first - people use Redis in this space because it's the closest thing there is to an "sqlite" or "postgres" for KV. Which is why I think Redis with persistence actually makes a lot of sense and fills a gap in the market.
RocksDB?
RocksDB is cool but it seems to be more of a toolkit for building your own K/V store than a standalone product like Redis?
What were you trying to accomplish? Curious about your use if you can share it
Perhaps you are looking for LMDB?