Not just NoSQL, It’s MoSQL Cassandra SF July 11, 2011 Eric Evans firstname.lastname@example.org @jericevans http://blog.sym-link.com
Cassandra Query Language● Structured query language for Apache Cassandra.● CQL for short (pronounced /siːkw əl/).● SQL alike (best effort).● An alternative to the existing API, not a replacement (not yet).● Available for use in Cassandra 0.8.0.
“Thrift sucks, ergo the API sucks”● Generated code (C++ compiler).● Loads of languages, but varying levels of support. ● PHP anyone?● Upstream alternating between extremes of combativeness and apathy. ● Patches ignored, (or refused). ● Loads of (serious )bugs ignored for long periods. ● Infrequent releases.
“Avro Does Not Suck, so...”1. Avro2. Something, something, something3. Profit!
Brass Tacks● Unstable ● Too tightly coupled to internal APIs● Too difficult to use ● Not enough abstraction (and passing the buck to 3rd-party API maintainers is weak) ● Poor mental fit for query/data models
Back to the drawing board● RPC (Thrift, Avro, Protobuf, etc)● REST● Query language● Etc, etc
Back to the drawing board● RPC (Thrift, Avro, Protobuf, etc) ● Easy to implement ● Performant● REST● Query language● Etc, etc
Back to the drawing board● RPC (Thrift, Avro, Protobuf, etc) ● Easy to implement ● Performant● REST ● Little need for client abstraction● Query language● Etc, etc
Back to the drawing board● RPC (Thrift, Avro, Protobuf, etc) ● Easy to implement ● Performant● REST ● Little need for client abstraction● Query language ● Little need for client abstraction! ● Reads well; What you see is what you get ● The Devil we all know● Etc, etc
And this?SELECT firstname, lastnameFROM tableWHERE KEY = eevans
Lessons Learned● Know when to take a step back● Listen to your users; Read between the lines● Beware quick/easy consensus● Just because its old doesnt mean its bad● Just because its the brunt of jokes, doesnt make it wrong (works for Thrift and SQL)
Language● Versioned specification (http://semver.og) ● Major – Breaking changes, (rare to never) ● Minor – Backward compatible changes ● Patch – Bug fixes
Drivers● Maintained and distributed by us● Separate development cycles; Separately versioned● Support a language version, not a Cassandra version!● Minimal, low-level (not the place for an ORM)● Idiomatic● email@example.com