cassandra day sv 2014: beyond read-modify-write with apache cassandra

33
©2014 DataStax @AlTobey Open Source Mechanic | Datastax Apache Cassandra のオープンソースエバンジェリスト Beyond Read-Modify-Write 1

Upload: planet-cassandra

Post on 15-Jan-2015

514 views

Category:

Technology


0 download

DESCRIPTION

As we move into the world of Big Data and the Internet of Things, the systems architectures and data models we've relied on for decades are becoming a hindrance. At the core of the problem is the read-modify-write cycle. In this session, Al will talk about how to build systems that don't rely on RMW, with a focus on Cassandra. Finally, for those times when RMW is unavoidable, he will cover how and when to use Cassandra's lightweight transactions and collections.

TRANSCRIPT

Page 1: Cassandra Day SV 2014: Beyond Read-Modify-Write with Apache Cassandra

©2014 DataStax

@AlTobey Open Source Mechanic | Datastax Apache Cassandra のオープンソースエバンジェリスト

Beyond Read-Modify-Write

1

Page 2: Cassandra Day SV 2014: Beyond Read-Modify-Write with Apache Cassandra

The Problem

Page 3: Cassandra Day SV 2014: Beyond Read-Modify-Write with Apache Cassandra

The Problem!Users expect their infrastructure to Just Work.

Page 4: Cassandra Day SV 2014: Beyond Read-Modify-Write with Apache Cassandra

The Problem

Page 5: Cassandra Day SV 2014: Beyond Read-Modify-Write with Apache Cassandra

The Problem

Page 6: Cassandra Day SV 2014: Beyond Read-Modify-Write with Apache Cassandra

Evolution

Client/ServerClassic 3-tier

3-tier + read scaled DB + cache

Page 7: Cassandra Day SV 2014: Beyond Read-Modify-Write with Apache Cassandra

Client-server

Page 8: Cassandra Day SV 2014: Beyond Read-Modify-Write with Apache Cassandra

3-tier

Page 9: Cassandra Day SV 2014: Beyond Read-Modify-Write with Apache Cassandra

3-tier master/slave

master slaveslave

Page 10: Cassandra Day SV 2014: Beyond Read-Modify-Write with Apache Cassandra

3-tier + caching

master slaveslave

cache

Page 11: Cassandra Day SV 2014: Beyond Read-Modify-Write with Apache Cassandra

Webscale

Page 12: Cassandra Day SV 2014: Beyond Read-Modify-Write with Apache Cassandra

When it Rains

Page 13: Cassandra Day SV 2014: Beyond Read-Modify-Write with Apache Cassandra

Beyond Read-Modify-Write•Practical Safety •Eventual Consistency •Overwrites •Key / Value •Journal / Logging / Time-series •Content-addressable-storage •Cassandra Collection Types •Cassandra Lightweight Transactions

Page 14: Cassandra Day SV 2014: Beyond Read-Modify-Write with Apache Cassandra

Theory & Practice

In theory there is no difference between theory and practice. In practice there is. !

-Yogi Berra

Page 15: Cassandra Day SV 2014: Beyond Read-Modify-Write with Apache Cassandra

Safety

Page 16: Cassandra Day SV 2014: Beyond Read-Modify-Write with Apache Cassandra

Safety

Page 17: Cassandra Day SV 2014: Beyond Read-Modify-Write with Apache Cassandra

Safety

Page 18: Cassandra Day SV 2014: Beyond Read-Modify-Write with Apache Cassandra

Read-Modify-WriteUPDATE  Employees  SET  Rank=4,  Promoted=2014-­‐01-­‐24  WHERE  EmployeeID=1337;

EmployeeID**1337Name********アルトビーStartDate***2013510501Rank********3Promoted****null

EmployeeID**1337Name********アルトビーStartDate***2013510501Rank********4Promoted****2014501524

Page 19: Cassandra Day SV 2014: Beyond Read-Modify-Write with Apache Cassandra

Read-Modify-WriteUPDATE  Employees  SET  Rank=4,  Promoted=2014-­‐01-­‐24  WHERE  EmployeeID=1337;

TNSTAAFL 無償の昼食なんてものはありません

EmployeeID**1337Name********アルトビーStartDate***2013510501Rank********4Promoted****2014501524

EmployeeID**1337Name********アルトビーStartDate***2013510501Rank********3Promoted****null

RDBMS

Page 20: Cassandra Day SV 2014: Beyond Read-Modify-Write with Apache Cassandra

Eventual ConsistencyUPDATE  Employees  SET  Rank=4,  Promoted=2014-­‐01-­‐24  WHERE  EmployeeID=1337;

EmployeeID**1337Name********アルトビーStartDate***2013510501Rank********4Promoted****2014501524

EmployeeID**1337Name********アルトビーStartDate***2013510501Rank********3Promoted****null

Coordinator

Page 21: Cassandra Day SV 2014: Beyond Read-Modify-Write with Apache Cassandra

Eventual ConsistencyUPDATE  Employees  SET  Rank=4,  Promoted=2014-­‐01-­‐24  WHERE  EmployeeID=1337;

EmployeeID**1337Name********アルトビーStartDate***2013510501Rank********4Promoted****2014501524

EmployeeID**1337Name********アルトビーStartDate***2013510501Rank********3Promoted****null

Coordinator

read

write

Page 22: Cassandra Day SV 2014: Beyond Read-Modify-Write with Apache Cassandra

OverwritingCREATE TABLE host_lookup ( name varchar, id uuid, PRIMARY KEY(name) ); !INSERT INTO host_uuid (name,id) VALUES (“www.tobert.org”, “463b03ec-fcc1-4428-bac8-80ccee1c2f77”); !INSERT INTO host_uuid (name,id) VALUES (“tobert.org”, “463b03ec-fcc1-4428-bac8-80ccee1c2f77”); !INSERT INTO host_uuid (name,id) VALUES (“www.tobert.org”, “463b03ec-fcc1-4428-bac8-80ccee1c2f77”); !SELECT id FROM host_lookup WHERE name=“tobert.org”;

Page 23: Cassandra Day SV 2014: Beyond Read-Modify-Write with Apache Cassandra

Key/ValueCREATE TABLE keyval ( key VARCHAR, value blob, PRIMARY KEY(key) ); !INSERT INTO keyval (key,value) VALUES (?, ?); !SELECT value FROM keyval WHERE key=?;

Page 24: Cassandra Day SV 2014: Beyond Read-Modify-Write with Apache Cassandra

Journaling / Logging / Time-seriesCREATE TABLE tsdb ( time_bucket timestamp, time timestamp, value blob, PRIMARY KEY(time_bucket, time) ); !INSERT INTO tsdb (time_bucket, time, value) VALUES ( “2014-10-24”, -- 1-day bucket (UTC) “2014-10-24T12:12:12Z”, -- ALWAYS USE UTC ‘{“foo”: “bar”}’ );

Page 25: Cassandra Day SV 2014: Beyond Read-Modify-Write with Apache Cassandra

Journaling / Logging / Time-series

{"“2014(01(24”"=>"{""""“2014(01(24T12:12:12Z”"=>"{""""""""‘{“foo”:"“bar”}’""""}}

2014(01(24 2014(01(24T12:12:12Z{“key”:"“value”}

2014(01(25 2014(01(25T13:13:13Z{“key”:"“value”}

2014(01(24T21:21:21Z{“key”:"“value”}

Page 26: Cassandra Day SV 2014: Beyond Read-Modify-Write with Apache Cassandra

Content Addressable StorageCREATE TABLE objects ( cid varchar, content blob, PRIMARY KEY(cid) ); !INSERT INTO objects (cid,content) VALUES (?, ?); !SELECT content FROM objects WHERE cid=?;

Page 27: Cassandra Day SV 2014: Beyond Read-Modify-Write with Apache Cassandra

Content Addressable Storagerequire  'cql'  require  ‘digest/sha1'  !dbh  =  Cql::Client.connect(hosts:  ['127.0.0.1'])  dbh.use('cas')  !data  =  {  :timestamp  =>  1390436043,  :value  =>  1234  }  !cid  =  Digest::SHA1.new.digest(data.to_s).unpack(‘H*’)  !sth  =  dbh.prepare(     'SELECT  content  FROM  objects  WHERE  cid=?')  !sth.execute(root_cid).first[‘content’]

Page 28: Cassandra Day SV 2014: Beyond Read-Modify-Write with Apache Cassandra

In Practice• In practice, RMW is sometimes unavoidable

• Recent versions of Cassandra support RMW

• Use them only when necessary

• Or when performance hit is mitigated elsewhere or irrelevant

Page 29: Cassandra Day SV 2014: Beyond Read-Modify-Write with Apache Cassandra

Cassandra CollectionsCREATE TABLE posts ( id uuid, body varchar, created timestamp, authors set<varchar>, tags set<varchar>, PRIMARY KEY(id) ); !INSERT INTO posts (id,body,created,authors,tags) VALUES ( ea4aba7d-9344-4d08-8ca5-873aa1214068, ‘アルトビーの犬はばかね’, ‘now', [‘アルトビー’, ’ィオートビー’], [‘dog’, ‘silly’, ’犬’, ‘ばか’] );

Page 30: Cassandra Day SV 2014: Beyond Read-Modify-Write with Apache Cassandra

Cassandra CollectionsCREATE TABLE metrics ( bucket timestamp, time timestamp, value blob, labels map<varchar,varchar>, PRIMARY KEY(bucket) );

Page 31: Cassandra Day SV 2014: Beyond Read-Modify-Write with Apache Cassandra

Lightweight Transactions• Cassandra 2.0 and on support LWT based on PAXOS

• PAXOS is a distributed consensus protocol

• Given a constraint, Cassandra ensures correct ordering

Page 32: Cassandra Day SV 2014: Beyond Read-Modify-Write with Apache Cassandra

Lightweight TransactionsUPDATE  users          SET  username=‘tobert’    WHERE  id=68021e8a-­‐9eb0-­‐436c-­‐8cdd-­‐aac629788383          IF  username=‘renice’;  !INSERT  INTO  users  (id,  username)  VALUES  (68021e8a-­‐9eb0-­‐436c-­‐8cdd-­‐aac629788383,  ‘renice’)  IF  NOT  EXISTS;  !!

Page 33: Cassandra Day SV 2014: Beyond Read-Modify-Write with Apache Cassandra

Conclusion• Businesses are scaling further and faster than ever

• Assume you have to provide utility-grade service

• Data models and application architectures need to change to keep up

• Avoiding Read/Modify/Write makes high-performance easier

• Cassandra provides tools for safe RMW when you need it

!

• Questions?