CQL is a structured query language for Apache Cassandra that is similar to SQL. It provides an alternative interface to the existing Thrift API, with the goals of being more stable, easier to use, and providing a better mental model for querying and data. The document outlines the motivations for developing CQL, including limitations of the existing Thrift API, and provides details on CQL specification, drivers, and additional resources.
1. Not just NoSQL, It’s MoSQL
Cassandra SF
July 11, 2011
Eric Evans
eevans@rackspace.com
@jericevans
http://blog.sym-link.com
2. 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.
10. “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.
11. “Avro Does Not Suck, so...”
1. Avro
2. Something, something, something
3. Profit!
13. 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
14. Back to the drawing board
● RPC (Thrift, Avro, Protobuf, etc)
● REST
● Query language
● Etc, etc
15. Back to the drawing board
● RPC (Thrift, Avro, Protobuf, etc)
● Easy to implement
● Performant
● REST
● Query language
● Etc, etc
16. Back to the drawing board
● RPC (Thrift, Avro, Protobuf, etc)
● Easy to implement
● Performant
● REST
● Little need for client abstraction
● Query language
● Etc, etc
17. 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
22. Lessons Learned
● Know when to take a step back
● Listen to your users; Read between the lines
● Beware quick/easy consensus
● Just because it's old doesn't mean it's bad
● Just because it's the brunt of jokes, doesn't
make it wrong (works for Thrift and SQL)
23. Language
● Versioned specification (http://semver.og)
● Major – Breaking changes, (rare to never)
● Minor – Backward compatible changes
● Patch – Bug fixes
24. 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
● client-dev@cassandra.apache.org
25. More Info
● Docs (doc/cql/CQL.html)
● http://www.datastax.com/docs/0.8/api/using_cql
● http://caqel.deadcafe.org (live demo!)
● cqlsh (interactive shell shipped w/ Python
driver)