Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

NoSQL Yes, But YesCQL, No?

5,080 views

Published on

Published in: Technology
  • Be the first to comment

NoSQL Yes, But YesCQL, No?

  1. 1. NoSQL Yes, But YesCQL, No? Berlin Buzzwords June 7, 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. Gonna Give You Up. Never.
  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 ● Very little abstraction (forces clients to abstract) ● 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. Official(?) Drivers● Java (JDBC)● Python (DBAPI2)● Node.js● Twisted● PHP (coming soon?)● Ruby (coming soon?)
  22. 22. 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)

×