• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
Cassandra: Not Just NoSQL, It's MoSQL
 

Cassandra: Not Just NoSQL, It's MoSQL

on

  • 7,492 views

 

Statistics

Views

Total Views
7,492
Views on SlideShare
6,757
Embed Views
735

Actions

Likes
4
Downloads
206
Comments
0

13 Embeds 735

http://nosql.mypopescu.com 581
http://lanyrd.com 58
https://twitter.com 54
url_unknown 13
https://si0.twimg.com 8
http://twitter.com 5
http://a0.twimg.com 5
http://a0.twimg.com 5
http://tweetedtimes.com 2
http://translate.googleusercontent.com 1
http://www.slideshare.net 1
http://www.hanrss.com 1
http://news.google.com 1
More...

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

    Cassandra: Not Just NoSQL, It's MoSQL Cassandra: Not Just NoSQL, It's MoSQL Presentation Transcript

    • Not just NoSQL, It’s MoSQL Cassandra SF July 11, 2011 Eric Evans eevans@rackspace.com @jericevans http://blog.sym-link.com
    • 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.
    • 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 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.
    • “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 (and passing the buck to 3rd-party API maintainers is weak) ● Poor mental fit for query/data models
    • 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 language● Etc, etc
    • Back to the drawing board● RPC (Thrift, Avro, Protobuf, etc) ● Easy to implement ● Performant● REST ● Little need for client abstraction● Query language● Etc, etc
    • 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
    • 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)
    • What about this?UPDATE tableSET firstname=Eric, lastname=EvansWHERE KEY=eevans
    • 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)
    • 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 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)
    • Language● Versioned specification (http://semver.og) ● Major – Breaking changes, (rare to never) ● Minor – Backward compatible changes ● Patch – Bug fixes
    • 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
    • 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)