Skip to content

Comment on Almost every Cassandra feature has some surprising behaviorparent

Comments

We've moved most of our data to redis (which we were using way before cassandra), with a bit of classic MySQL for off-line data, and Redshift for analytics. Right now redis is not using cluster mode, but we'll switch to it eventually. It's a big move, but I find redis more predictable, and for our data sizes (10s of Gs), cheaper to maintain.

Do you use Redis as the master data store? Are you using Redis Cluster, or unclustered?

My concern with Redis is reliability. Redis Cluster has problems with consistency [1], whereas unclustered Redis -- well, it syncs to disk every 10 seconds or so, but even then I'm concerned that the reliability of its on-disk structures haven't been as battle-tested as, say, PostgreSQL. Or has it?

[1] https://aphyr.com/posts/307-call-me-maybe-redis-redux

well, it syncs to disk every 10 seconds or so

Yeah, about that:

http://redis.io/topics/persistence

Using AOF Redis is much more durable: you can have different fsync policies: no fsync at all, fsync every second, fsync at every query. With the default policy of fsync every second write performances are still great (fsync is performed using a background thread and the main thread will try hard to perform writes when no fsync is in progress.) but you can only lose one second worth of writes.

RDB is what I was thinking of. I didn't know they had added a write-ahead log. It seems you can combine RDB and AOF, which is nice.

Yeah, you can. Its quite nice, the only real problem with it is the reliability of the clustering is subpar.

If you are happy with a Master/Slave setup and occasionally having to deal with data loss due to Master failures [e.g. losing a second or two of data that wasn't replicated], it works nicely.

Just realize I wouldn't use Redis as a long term persisting of data because of issues like this:

https://muut.com/blog/news/april-2014-service-failure.html

We've moved most of our data to redis

Redis is neet if your information fits in RAM, but that's not what Cassandra is for.

the dropping prices of RAM lead us to re-evaluate what we consider "data that fits in RAM". at 10Gs it's just more economic, and even if we go up one order of magnitude, the serving speed of redis still makes it economic for a lot of workloads.

Eh...as long as you are ready and able to shard the dataset, fitting the data in RAM is quite possible for TB sized datasets.

You can easily get commodity servers with 256GB of RAM per node x 10 shards. Cluster or not, as per your use case.

If you moved your data off Caasandra to Redis, I am going to assume you must be using a lot of Lua to maintain some relationships in data in Redis. How is the performance? I have been experimenting with Redis and my lua scripts are long and I have been wondering how they will fare under production level loads.

A Redis Hash is similar enough to Casandra's data structure I doubt they'd need that.

row key = key

column = field

I know Lua is "an option" in Redis but I avoid it like the plague because under production loads, Redis hashes perform and are easy to maintain w/o Lua.

More or less this. Row = HASH key, sorted sets for secondary key indexing, and also for iterating primary key entries. I've built an abstraction layer on top of redis to automate all that and it works rather well.

AboutSource Built by g1lg1l

Hackerly is an independent reader for Hacker News, built on the public HN API. Not affiliated with Y Combinator.