
Redis: the AK-47 of databases - flazzarino
http://flazz.me/redis-the-ak-47-of-databases
======
ErrantX
The title randomly reminded me of the AK-47 quote from Lord of War (an
actually decent Cage film, and definitely a good bit of monologue):

 _Of all the weapons in the vast soviet arsenal, nothing was more profitable
than Avtomat Kalashnikova model of 1947. More commonly known as the AK-47, or
Kalashnikov. It's the world's most popular assault rifle. A weapon all
fighters love. An elegantly simple 9 pound amalgamation of forged steel and
plywood. It doesn't break, jam, or overheat. It'll shoot whether it's covered
in mud or filled with sand. It's so easy, even a child can use it; and they
do. The Soviets put the gun on a coin. Mozambique put it on their flag. Since
the end of the Cold War, the Kalashnikov has become the Russian people's
greatest export. After that comes vodka, caviar, and suicidal novelists. One
thing is for sure, no one was lining up to buy their cars._

Only tangentially related :) but I thought worth sharing. Anyone care to write
a redis version?

~~~
nickpinkston
I'll only be pedantic about them rarely being forged (mostly stamped) and
definitely still having problems of overheating. Try firing one on full auto
for more than one clip - better have gloves...

They are great weapons though. I've never cleaned mine or had a jam. I hope
this database is that good!

~~~
tsycho
You actually own a AK-47? Out of curiosity, why?

~~~
nickpinkston
Well, few people own true AK47's, most own copies of the Russian AKM which is
made from stamped parts (as opposed to machined on the true AK47 [1]. I own a
semi-auto Romanian WASR 10 - which is very common in the US (PA). They go for
~$300 at a sporting goods store.

It's a lot of fun to shoot, the AK is cheap reliable, historical and can be
used for fun, hunting (yes) and in survival situations. I actually do a
"StartupGuns" [2] event in Pittsburgh where a bunch of us go shooting like
OpenCoffee or similar.

[1] <http://en.wikipedia.org/wiki/Akm> ("Features") [2]
<http://www.facebook.com/group.php?gid=207534415228>

------
apl

      > In the spirit of full disclosure, I’m a newb to Redis. My
      > knowledge is basically the contents of this post (at the
      > time of writing). I don’t use it in production (yet).
      > Likewise I’m no expert in AK-47s (I’ve never even fired
      > one) or guns in general. I’m aware via notoriety alone.
    

Fantastic quote. So you're hardly familiar with either component of your
simile, but you'll post it anyway? I really don't expect _New Yorker_ -esque
editing from bloggers, but that's simply not very substantial writing.

No wonder people make fun of the so-called "NoSQL movement."

~~~
dschobel
It still has value according to the two-step HN algorithm of fact-finding.

step 1. Someone posts something (anything will do) on a blog

step 2. HN tears it apart and reconstitutes it with some decent approximation
of truth and usually a fair bit of insight.

Basically, the source content is just the jumping off point. The blogs serve
as a focal point for directing the HN hive's attention for a while.

You could post a story titled "Sarah Palin is more influential than the Pope
but less influential than the iPhone" and fill it with lolcat pictures and
still get an interesting discussion here.

Why? Because smart people are awesome.

~~~
__Joker
Very true, thats why most of the time I spent time reading the hacker news
discussion rather than the original link.

------
zeteo
"According to AK-47 legend, assault rifles were not popular because of their
tendency to consume large amounts of ammo. The Soviets embraced the idea and
simply supplied their troops with more ammo. Kinda like Redis and RAM."

That's obviously just a legend. This debate was actually carried out in the
2nd half of the 19th century, starting with the Civil War. (Many repeating
rifle designs were offered to the Union. Quartermasters repeatedly shut them
down on account of expected difficulties with ammo supply. After much time and
effort, a few repeating rifles made it through, particularly to the cavalry,
where they proved quite decisive in the last year of the war. See Five Forks,
for instance.)

~~~
iujyhgftrgh
The British army only just relented - the new SA80 is the first fully
automatic rifle to be standard issue.

~~~
icegreentea
That's not exactly true. The SA80 isn't exactly new. It was in use during the
Falklands for example. And the British Army used a version of FN FALs before
the SA80s were adopted, and those were also automatic rifles.

Now, I'm pretty sure 'automatic' fire was burst limited. But that's pretty
much nearly universally accepted as a good idea in main infantry rifles.

~~~
iujyhgftrgh
It was standard issue from about 1985/1986 - before that they used self
loading rifles ie. one trigger - one round.

------
jacquesm
Being the AK-47 of databases is not a bad way to be known.

That said I hope the author will revisit the topic when he has more knowledge
of the subject matter, such as when using it in production for a while on a
fair sized project with a lot of users. That's where the rubber meets the
road, first impressions tend to gloss over the areas where the meat is.

~~~
regularfry
> That's where the rubber meets the road, first impressions tend to gloss over
> the areas where the meat is.

One hopes the meat is not between the rubber and the road. That would be
unfortunate.

------
IgorPartola
Eek. Locking the entire data set to perform transactions? Isn't that so...
MyISAM? Does rolling the transaction back work? The optimistic lock is not a
great solution either: instead of deadlocking while waiting for a lock to be
released, you are now stuck in a while (!saved) loop. Imagine two web pages
trying to update the same resource at the same time.

Also this part of the config:

    
    
      save 900 1
      save 300 10
      save 60 10000
    

is not at all obvious. Maybe it's better documented in the sample config.

~~~
code_duck
According to the first comment, the part about locking the whole data set for
MULTI is not accurate. Only the connection calling that is stalled, which
makes perfect sense.

~~~
IgorPartola
Ah: <http://redis.io/commands/multi>. So the problem with this approach is
that there are no consistent reads. If I say:

    
    
      MULTI
      get foo # Returns 'abc'
      set foo 'abcd' # (as in application code said foo += 'd')
      EXEC
    

while another process sets foo to 'xyz' between my get and set, I just
overwrote that value. No serializable transactions.

~~~
antirez
MULTI/EXEC is completely atomic and transactional.

You can perform just writes inside the block. If you want atomicity with reads
in the middle, you need to use WATCH/MULTI/EXEC that uses an optimistic
locking algorithm.

~~~
IgorPartola
Ah, that makes sense. I imagine allowing atomic reads without WATCH would
complicate the code quite a bit.

~~~
antirez
Indeed, not very Redis-ish :)

With WATCH is very easy. WATCH this keys. Perform your reads. Prepare to write
in a transaction. If at least one key was modified in the meantime the
transaction will fail.

------
draebek
Factual incorrectness aside, and even speaking as a person that doesn't have
much to do with anything other than SQL RDBMSes: this style of presentation
piqued my interest in Redis. Seeing how fast and easy it was to get up and
running, seeing how simple the protocol was, and getting a smattering of its
features in this very terse format was effective on me.

------
jamesli
The author needs to know more about databases before claiming something is the
AK-47 of the subject. It kinds of reminds me of those guys who think they are
gurus just because they know some rarely used Linux commands, while in fact
they don't have good understanding of OS. :)

~~~
simonw
What do you think he's missing? The comparison seems rather apt to me - Redis
is shockingly simple and surprisingly effective compared to other persistence
options.

------
jwr
The information about transactions in this article is wrong. Read the redis
docs he actually points to for an accurate description.

This article should not get upvoted.

~~~
fedd
and the title?

------
adamtj
"The entire dataset is in RAM."

How can they guarantee that, when RAM is little more than a disk cache on
modern operating systems? Is there a syscall that prevents specified pages of
virtual memory from being paged out to disk? Or is Redis implemented as a
kernel module?

~~~
antirez
Redis uses a memory layout that, unless the instance is completely idle, will
make it very easy to touch every page even if there are just a few queries per
second.

So fare in two years we never saw an instance where there was a latency
problem because part of the dataset was swapped on disk by the OS. This is why
we currently don't use mlockall().

------
Periodic
In another comment, someone compared the PUB/SUB feature of Redis to ZeroMQ.
Can the PUB/SUB feature of Redis function as a queue system for many common
uses, or is there another significant difference that sets a full queue
implementation apart? I ask because I am not particularly familiar with Redis,
my queue usage has been fairly simple so far and I would enjoy simplifying my
technology stack by combining the two if it makes sense.

------
dorkitude
Redis is great for small things. Massive scale players in the write-heavy
owrld can rarely consider it in its current form.

------
X-Istence
"Pub/Sub is a unique and useful feature."

Pub/sub exists in a multitude of different pieces of software. ZeroMQ has a
pub/sub feature. PostgreSQL has the NOTIFY/LISTEN command which is also a
Pub/Sub channel allowing all those listening to be notified of certain events.

This is by no means unique to Redis. It is very useful, so I'll agree with
that!

------
malkia
I served in the bulgarian army with this weapon, and it was very easy to
handle. That's all I can say

But every weapon was a bit off, so you had to get used to it (I guess that
might be the same for all weapons).

------
mono
The total number of the AK-type rifles made worldwide during the last 50 years
is estimated at 90+ millions. Does the title implies that Redis will handle
this amount of values too?

------
mjgoins
This one of very few google hits for the phrase "get the juxt".

------
fedd
AK of DBs should be used for some Russian DB! or Chinese...

okay okay. i hereby patent the definition 'an iPhone of databases' :)

