CQL In Cassandra 1.0 (and beyond)
-
Upload
eric-evans -
Category
Technology
-
view
4.864 -
download
2
description
Transcript of CQL In Cassandra 1.0 (and beyond)
CQL In Cassandra 1.0 (and beyond)
Big Data DC Meetup #5October 17, 2011
Eric [email protected]
@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 it's 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)
CQL
INSERT 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● It's 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
Drivers
Driver Platform Statuscassandra-jdbc Java Goodcassandra-dbapi2 Python Goodcassandra-ruby Ruby Newcassandra-pdo PHP Newcassandra-node Node.js Good
http://code.google.com/a/apache-extras.org/hosting/search?q=label%3aCassandra
The End