CQL In Cassandra 1.0 (and beyond)
Upcoming SlideShare
Loading in...5
×
 

CQL In Cassandra 1.0 (and beyond)

on

  • 5,106 views

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

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

Statistics

Views

Total Views
5,106
Views on SlideShare
4,683
Embed Views
423

Actions

Likes
4
Downloads
37
Comments
0

4 Embeds 423

http://digitalboys.wordpress.com 417
http://paper.li 4
http://a0.twimg.com 1
https://twitter.com 1

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

CQL In Cassandra 1.0 (and beyond) CQL In Cassandra 1.0 (and beyond) Presentation Transcript

  • CQL In Cassandra 1.0 (and beyond) Big Data DC Meetup #5 October 17, 2011 Eric Evans eric@acunu.com @jericevans, @acunu
  • ● 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)● Introduced in Cassandra 0.8.0● Ready for production use
  • 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
  • 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
  • Why?
  • Interface Instability
  • (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)
  • CQLINSERT INTO Standard1 (KEY, col0) VALUES (key, value0)
  • Why? How about...● Better stability guarantees● Easier to use (you already know it)● Better code readability / maintainability
  • Why? How about...● Better stability guarantees● Easier to use (you already know it)● Better code readability / maintainability● Irritates the NoSQL purists
  • 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
  • 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 a mulligan ● Look, cats!
  • 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
  • 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 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
  • 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
  • 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
  • Coming Soon(ish)
  • 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)
  • Drivers
  • 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
  • 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
  • The End