A lot of people, when first learning about Cassandra, wonder why there isn't any easier (say, RESTful) way to perform operations. I did. It didn't take someone very long to point out that it mainly has to do with performance. Cassandra spends a significant amount of resources marshaling data and Thrift currently does that very efficiently.



So I put away my RESTlessness.

I've heard more people lately clamoring for the feature, so I gave some thought about how I'd go about it. One approach would be to wrap Thrift. That would be nice from a coupling standpoint, but I think performance would be pretty crappy. After all, it is just adding another layer of marshaling that needs to be done; nobody needs that.

I eventually arrived at the decision that an HTTP Cassandra Daemon/Server pair similar to the existing Avro and Thrift versions would do the trick. It would basically be a straight port, with a few minor caveats. One big thing is that HTTP uses a new connection for each request, so storing Cassandra session information in threadlocals is gone out the window. This means that authentication needs to be abandoned, done with every request, or we need to use HTTP sessions. Punt.