back
22 comments
good stuff... the amazon dynamo paper should be required reading for people contemplating implementing these "eventually consistent" data stores.
The funny thing is we heard all of that in the 90s when object relational databases became popular. More interesting would be to hear how Cassandra scales across machines because that's what's so troublesome with databases, not the datamodel.

And, by the way, it's ironic that users of MySQL complain about the join performance of relational DBMS

Looking for more information on this project, I come across this Wiki entry:

http://en.wikipedia.org/wiki/Cassandra_Project

I thought this was somewhat amusing considering some of the conspiracy theories surrounding FaceBook.

This is great news... At first glance, the Cassandra codebase looks smaller and simpler than HBase. It will be interesting to see how it compares -- I've had data integrity with HBase, but I'm also doing weird stuff to it (storing tons of scientific floating-point data...)
This is implemented in Java, a language I have been told by people who get heavily voted up on this site is a ball and chain.

BigTable is implemented in C++ or Java. Cassandra appears to be most or all Java. But Java and other compiled languages are death for startups and corporations. Error! Error! Does not compute! Why aren't they using Ruby or Lisp?

Java is an excellent language for writing the kinds of programs that were traditionally written in C but where the performance of Java is adequate (and as the performance of well-written Java programs seems to be asymptotically approaching the performance of well-written C programs this set is larger all the time). In fact, treating Java as a garbage-collected C is often a very reasonable thing to do.

People who bitch about how 'Java is dead' are referring (whether they know it or not) to the practice of attempting to write change-prone business logic and other glue in it. This practice was always a bad idea, something that even Sun now seems willing to admit. If the Rails/Django discussion is at the center of someone's programming universe then it is likely that to him or her that this is the only kind of code in the world, and thus Java is of no consequence to those sorts of people.

However, if your project is ambitious enough you'll find that you will need both glue and infrastructure, in which case having a language like Java underneath your dynamic language (people who use JRuby for example, or like me, Rhino) will be a godsend when you need performance or the occasional static-typing guarantee.

If you'll allow me to make the obligatory pg/Viaweb reference then I'll point out that Viaweb contained non-trivial amounts of both C and Perl, in spite of the obvious advantages of using Common Lisp for the store editor proper.

"In fact, treating Java as a garbage-collected C is often a very reasonable thing to do."

That's exactly what I like about Objective-C. It _IS_ C with garbage collection. And with a little bit of Smalltalk thrown in.

I find it disappointing that you feel dynamic typing is incompatible with performance.

Now's the time to rediscover optional static type annotations used for optimizing compilation. Radically innovative!

Addressing someone like a tardy child (I'm not mad, just disappointed) is a reliable way to inflame the discussion. I don't think I will respond if you phrase any further replies like that.

The claim that "dynamic typing is incompatible with performance" is considerably stronger than what I said (and I would contend belies an imprecise if not misguided notion of "dynamic typing"). That being said, for people interested in using a mainstream platform to develop their applications, the JVM offers a number of extremely productive "dynamic" languages none of which perform as well as Java across a broad spectrum of activities. I think you will find it telling that the engineers at Facebook (who are world-class) chose to implement this system in Java.

Optional type annotations are a wonderful idea and I am optimistic that someday the tradeoffs we mark around performance and convenience can be granular and addressable at a lexical level in a single file. Until then, the mix of a JVM scripting language and code written in native Java calling each other trivially is pretty damn close.

Now I invite you to write a similar system using SBCL, if you enjoy debugging inexplicable concurrency failures. Or maybe you'll use Actionscript 3? I hear it has optional type annotations. Now if you'll excuse me, I need to go work for the Man on dreary accounting software.

Fail.

An excellent point. Far more useful to focus on knowing something's strengths and when it is relevant than dismiss it entirely.
Right tool for the job and all that. Linux is mostly C. So is MySQL, PostgreSQL, Oracle and what not because these are foundational pieces of software. For foundational pieces, it can be worth it to concentrate on performance. Youtube uses a combination of python and C for example.
err, that doesn't square very well with the usual chorus of "java is dead" that prevails on sites like this.

disagreeing by downmodding is the death of reddit-like sites, by the way.

"""This is implemented in Java, a language I have been told by people who get heavily voted up on this site is a ball and chain."""

They were simply wrong. Java is a powerful and productive environment. Even for startups.

S.

What's wrong with compilation? It's just transforming a program from one representation to another, right?
Ruby/Web 2.0 snob opinion on compilers is that they are lame. See, e.g., http://www.jroller.com/obie/entry/top_10_reasons_why_java and
My feeling is that they're really talking about static typing not about compilation.
Ning's backend data store is also in Java.
:-)
I can't hear the name Cassandra without thinking of Woody Allen's "Mighty Aphrodite."
In France, she'd be called la renard. Hunted, with only her cunning to protect her.
I hope I'll need to deploy this in a couple of years. :)