Not just NoSQL, It’s MoSQL        Cassandra SF        July 11, 2011              Eric Evans      eevans@rackspace.com     ...
Cassandra Query Language●   Structured query language for Apache    Cassandra.●   CQL for short (pronounced /siːkw əl/).● ...
Wait, arent you the guy...?
So, is this a troll?
Problem?
Naw.(not a troll, honest)
But, why?
Because the API sucks.
“Thrift sucks, ergo the API sucks”●   Generated code (C++ compiler).●   Loads of languages, but varying levels of    suppo...
“Avro Does Not Suck, so...”1. Avro2. Something, something, something3. Profit!
And the API still sucks.
Brass Tacks●   Unstable    ●   Too tightly coupled to internal APIs●   Too difficult to use    ●   Not enough abstraction ...
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...
Back to the drawing board●   RPC (Thrift, Avro, Protobuf, etc)    ●   Easy to implement    ●   Performant●   REST    ●   L...
Back to the drawing board●   RPC (Thrift, Avro, Protobuf, etc)    ●   Easy to implement    ●   Performant●   REST    ●   L...
Grok Thisfirstname = Column(name="firstname", value="Eric", timestamp=time)firstcosc = ColumnOrSuperColumn(column=firstnam...
What about this?UPDATE tableSET firstname=Eric, lastname=EvansWHERE KEY=eevans
Grok Thisparent = ColumnParent(column_family="table")colnames = ["firstname", "lastname"]predicate = SlicePredicate(column...
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 cons...
Language●   Versioned specification (http://semver.og)    ●   Major – Breaking changes, (rare to never)    ●   Minor – Bac...
Drivers●   Maintained and distributed by us●   Separate development cycles; Separately    versioned●   Support a language ...
More Info●   Docs (doc/cql/CQL.html)●   http://www.datastax.com/docs/0.8/api/using_cql●   http://caqel.deadcafe.org (live ...
Cassandra: Not Just NoSQL, It's MoSQL
Cassandra: Not Just NoSQL, It's MoSQL
Upcoming SlideShare
Loading in...5
×

Cassandra: Not Just NoSQL, It's MoSQL

7,379

Published on

Published in: Technology
0 Comments
4 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
7,379
On Slideshare
0
From Embeds
0
Number of Embeds
4
Actions
Shares
0
Downloads
215
Comments
0
Likes
4
Embeds 0
No embeds

No notes for slide

Cassandra: Not Just NoSQL, It's MoSQL

  1. 1. Not just NoSQL, It’s MoSQL Cassandra SF July 11, 2011 Eric Evans eevans@rackspace.com @jericevans http://blog.sym-link.com
  2. 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.
  3. 3. Wait, arent you the guy...?
  4. 4. So, is this a troll?
  5. 5. Problem?
  6. 6. Naw.(not a troll, honest)
  7. 7. But, why?
  8. 8. Because the API sucks.
  9. 9. “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.
  10. 10. “Avro Does Not Suck, so...”1. Avro2. Something, something, something3. Profit!
  11. 11. And the API still sucks.
  12. 12. 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
  13. 13. Back to the drawing board● RPC (Thrift, Avro, Protobuf, etc)● REST● Query language● Etc, etc
  14. 14. Back to the drawing board● RPC (Thrift, Avro, Protobuf, etc) ● Easy to implement ● Performant● REST● Query language● Etc, etc
  15. 15. Back to the drawing board● RPC (Thrift, Avro, Protobuf, etc) ● Easy to implement ● Performant● REST ● Little need for client abstraction● Query language● Etc, etc
  16. 16. 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
  17. 17. Grok Thisfirstname = Column(name="firstname", value="Eric", timestamp=time)firstcosc = ColumnOrSuperColumn(column=firstname)lastname = Column(name="lastname", value="Evans", timestamp=time)lastcosc = ColumnOrSuperColumn(column=lastname)mutations = []mutations.append(Mutation(column_or_supercolumn=firstcosc))mutations.append(Mutation(column_or_supercolumn=lastcosc))client.batch_mutate(mutation_map={"eevans": {"table": mutations}}, consistency_level=ConsistencyLevel.ONE)
  18. 18. What about this?UPDATE tableSET firstname=Eric, lastname=EvansWHERE KEY=eevans
  19. 19. Grok Thisparent = ColumnParent(column_family="table")colnames = ["firstname", "lastname"]predicate = SlicePredicate(column_names=colnames)row = client.get_slice(key="eevans", column_parent=parent, predicate=predicate, consistency_level=CL.ONE)
  20. 20. And this?SELECT firstname, lastnameFROM tableWHERE KEY = eevans
  21. 21. 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)
  22. 22. Language● Versioned specification (http://semver.og) ● Major – Breaking changes, (rare to never) ● Minor – Backward compatible changes ● Patch – Bug fixes
  23. 23. 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
  24. 24. 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)
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×