CQL In Cassandra 1.0 (and beyond)       Big Data DC Meetup #5          October 17, 2011                Eric Evans         ...
●   Overview, history, motivation●   Changes in CQL 2.0 (Cassandra 1.0)●   Coming soon (?)●   Drivers status
What?●   Cassandra Query Language    ●   aka CQL    ●   aka /ˈsēkwəl/●   Exactly like SQL (except where its not)●   Introd...
SQL? Almost.–- Inserts or updatesINSERT INTO Standard1 (KEY, col0, col1)VALUES (key, value0, value1)                   vs....
SQL? Almost.–- Get columns for a rowSELECT col0,col1 FROM Standard1 WHERE KEY=key–- Range of columns for a rowSELECT col0....
Why?
Interface Instability
(Un)ease of useColumn col = new Column(ByteBuffer.wrap(“name”.getBytes()));col.setValue(ByteBuffer.wrap(“value”.getBytes()...
CQLINSERT INTO Standard1 (KEY, col0)    VALUES (key, value0)
Why? How about...●   Better stability guarantees●   Easier to use (you already know it)●   Better code readability / maint...
Why? How about...●   Better stability guarantees●   Easier to use (you already know it)●   Better code readability / maint...
Why? How about...●   Better stability guarantees●   Easier to use (you already know it)●   Better code readability / maint...
CQL 2.0
Wait, 2.0? You call that stable?Yes yes, but... ●   We had a few FUBARs in the first pass ●   Not the norm, honest ●   Its...
Changed in 2.0●   SELECT count(...) FROM now returns row,    not column count●   Terms / Types    ●   bytea became blob   ...
Also new (but not breaking)●   Named keys (virtual columns)●   Counters●   Complete DDL support●   Timestamps and TTLs
Named Keys–- An unnamed key uses the KEY keywordCREATE TABLE Standard1    (KEY text PRIMARY KEY)–- But you can also name o...
Counters–- Counter incrementUPDATE Standard1SET acount = acount + 1 WHERE KEY = key–- Counter decrementUPDATE Standard1SET...
Timestamps and TTLs–- Inserts or updatesUPDATE CFam USING TIMESTAMP 131851901600SET col0=value0, col1=value1 WHERE KEY=key...
Coming Soon(ish)
Roadmap●   Prepared statements (CASSANDRA-2475)●   Compound columns (CASSANDRA-2474)●   Custom transport / protocol (CASSA...
Drivers
Drivers●   Hosted on Apache Extras (Google Code)●   Tagged cassandra and cql●   Licensed using Apache License 2.0●   Confo...
DriversDriver                           Platform                 Statuscassandra-jdbc                   Java              ...
The End
CQL In Cassandra 1.0 (and beyond)
Upcoming SlideShare
Loading in …5
×

CQL In Cassandra 1.0 (and beyond)

5,792
-1

Published on

CQL, past, present, and future, presented to Big Data DC on October 17, 2011

Published in: Technology

CQL In Cassandra 1.0 (and beyond)

  1. 1. CQL In Cassandra 1.0 (and beyond) Big Data DC Meetup #5 October 17, 2011 Eric Evans eric@acunu.com @jericevans, @acunu
  2. 2. ● Overview, history, motivation● Changes in CQL 2.0 (Cassandra 1.0)● Coming soon (?)● Drivers status
  3. 3. What?● Cassandra Query Language ● aka CQL ● aka /ˈsēkwəl/● Exactly like SQL (except where its not)● Introduced in Cassandra 0.8.0● Ready for production use
  4. 4. SQL? Almost.–- Inserts or updatesINSERT INTO Standard1 (KEY, col0, col1)VALUES (key, value0, value1) vs.–- Inserts or updatesUPDATE Standard1SET col0=value0, col1=value1 WHERE KEY=key
  5. 5. SQL? Almost.–- Get columns for a rowSELECT col0,col1 FROM Standard1 WHERE KEY=key–- Range of columns for a rowSELECT col0..colN FROM Standard1 WHERE KEY=key–- First 10 results from a range of columnsSELECT FIRST 10 col0..colN FROM Standard1 WHERE KEY=key–- Invert the sorting of resultsSELECT REVERSED col0..colN FROM Standard1 WHERE KEY=key
  6. 6. Why?
  7. 7. Interface Instability
  8. 8. (Un)ease of useColumn col = new Column(ByteBuffer.wrap(“name”.getBytes()));col.setValue(ByteBuffer.wrap(“value”.getBytes()));col.setTimestamp(System.currentTimeMillis());ColumnOrSuperColumn cosc = new ColumnOrSuperColumn();cosc.setColumn(col);Mutation mutation = new Mutation();Mutation.setColumnOrSuperColumn(cosc);List mutations = new ArrayList<Mutation>();mutations.add(mutation);Map mutations_map = new HashMap<ByteBuffer, Map<String, List<Mutation>>>();Map cf_map = new HashMap<String, List<Mutation>>();cf_map.set(“Standard1”, mutations);mutations.put(ByteBuffer.wrap(“key”.getBytes()), cf_map)
  9. 9. CQLINSERT INTO Standard1 (KEY, col0) VALUES (key, value0)
  10. 10. Why? How about...● Better stability guarantees● Easier to use (you already know it)● Better code readability / maintainability
  11. 11. Why? How about...● Better stability guarantees● Easier to use (you already know it)● Better code readability / maintainability● Irritates the NoSQL purists
  12. 12. Why? How about...● Better stability guarantees● Easier to use (you already know it)● Better code readability / maintainability● Irritates the NoSQL purists● (Still )irritates the SQL purists
  13. 13. CQL 2.0
  14. 14. Wait, 2.0? You call that stable?Yes yes, but... ● We had a few FUBARs in the first pass ● Not the norm, honest ● Its a mulligan ● Look, cats!
  15. 15. Changed in 2.0● SELECT count(...) FROM now returns row, not column count● Terms / Types ● bytea became blob ● int became 4-bytes (was arbitrary precision) ● date became timestamp
  16. 16. Also new (but not breaking)● Named keys (virtual columns)● Counters● Complete DDL support● Timestamps and TTLs
  17. 17. Named Keys–- An unnamed key uses the KEY keywordCREATE TABLE Standard1 (KEY text PRIMARY KEY)–- But you can also name one like so...CREATE TABLE Standard1 (username text PRIMARY KEY)–- The name will also be used in results!SELECT email FROM Standard1 WHERE username = jericevans
  18. 18. Counters–- Counter incrementUPDATE Standard1SET acount = acount + 1 WHERE KEY = key–- Counter decrementUPDATE Standard1SET acount = acount - 1 WHERE KEY = key–- 1 not enough? Go nuts.UPDATE Standard1SET acount = acount + 9 WHERE KEY = key
  19. 19. Timestamps and TTLs–- Inserts or updatesUPDATE CFam USING TIMESTAMP 131851901600SET col0=value0, col1=value1 WHERE KEY=key–- Inserts or updatesUPDATE CFam USING TTL 86400SET col0=value0, col1=value1 WHERE KEY=key
  20. 20. Coming Soon(ish)
  21. 21. Roadmap● Prepared statements (CASSANDRA-2475)● Compound columns (CASSANDRA-2474)● Custom transport / protocol (CASSANDRA-2478)● Performance testing (CASSANDRA-2268)● Schema introspection (CASSANDRA-2477)● Multiget support (CASSANDRA-3069)
  22. 22. Drivers
  23. 23. Drivers● Hosted on Apache Extras (Google Code)● Tagged cassandra and cql● Licensed using Apache License 2.0● Conforming to a standard for database connectivity (if applicable)● Coming soon, automated testing and acceptance criteria
  24. 24. DriversDriver Platform Statuscassandra-jdbc Java Goodcassandra-dbapi2 Python Goodcassandra-ruby Ruby Newcassandra-pdo PHP Newcassandra-node Node.js Goodhttp://code.google.com/a/apache-extras.org/hosting/search?q=label%3aCassandra
  25. 25. The End
  1. A particular slide catching your eye?

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

×