SlideShare una empresa de Scribd logo
1 de 70
Descargar para leer sin conexión
Big Data Grows Up
A (re)introduction to Cassandra
Robbie Strickland
Who am I?
Robbie Strickland
Software Development Manager
The Weather Channel
rostrickland@gmail.com
@dont_use_twitter
Who am I?
●
●
●
●
●

Cassandra user/contributor since 2010
… it was at release 0.5 back then
4 years? Oracle DBA’s aren’t impressed
Done lots of dumb stuff with Cassandra
… and some really awesome stuff too
Cassandra in 2010
Cassandra in 2010
Cassandra in 2014
Why Cassandra?
It’s fast:
●
●
●
●

No locks
Tunable consistency
Sequential R/W
Decentralized
Why Cassandra?
It scales (linearly):
●
●
●
●

Multi data center
No SPOF
DHT
Hadoop integration
Why Cassandra?
It’s fault tolerant:
● Automatic replication
● Masterless
● Failed nodes
replaced with ease
What’s different?
… a lot in the last year (ish)
What’s new?
●
●
●
●
●
●
●

Virtual nodes
O(n) data moved off-heap
CQL3 (and defining schemas)
Native protocol/driver
Collections
Lightweight transactions
Compaction throttling that actually works
What’s gone?
●
●
●
●

Manual token management
Supercolumns
Thrift (if you use the native driver)
Directly managing storage rows
What’s still the same?
●
●
●
●
●

Still not an RDBMS
Still no joins (see above)
Still no ad-hoc queries (see above again)
Still requires a denormalized data model (^^)
Still need to know what the heck you’re
doing
Token Management
Linear scalability without the migraine
The old way
● 1 token per node
● Assigned manually
● Adding nodes ==
reassignment of all
tokens
● Node rebuild
heavily taxes a few
nodes

A
F

B

cluster with
no vnodes
E

C

D
… enter Vnodes
N

A

B
C

M
L

D

cluster with
vnodes

K
J

E
F

I

H

G

● n tokens per node
● Assigned magically
● Adding nodes ==
painless
● Node rebuild
distributed across
many nodes
Node rebuild without Vnodes
Node rebuild with Vnodes
Going Off-heap
because the JVM sometimes sucks
Why go off-heap
●
●
●
●
●

GC overhead
JVM no good with big heap sizes
GC overhead
GC overhead
GC overhead
O(n) data structures
●
●
●
●

Row cache
Bloom filters
Compression offsets
Partition summary

… all these are moved off-heap
New memory allocation
Row cache
Bloom filters
JVM

Compression offsets
Partition summary

native
heap

Partition key cache
Death of a (Thrift)
Salesman
Or, how to build a killer data store
without a crappy interface
Reasons not to ditch Thrift
●
●
●
●

Lots of client libraries still use it
You finally got it installed
You didn’t know there was another choice
It sucks less than many alternatives
… in spite of all those benefits, you
really should ditch Thrift because:
● It requires your entire result set to fit into
RAM on both client and server
● The native protocol is better, faster, and
supports all the new features
● Thrift-based client libraries are always a step
behind
● It’s going away eventually
… and did I mention ...
It requires your entire result set
to fit into RAM
on both client and server!!!
Requesting too much data
Going Native
really catchy tag line here
Native protocol
●
●
●
●
●
●
●

It’s binary, making it lighter weight
It supports cursors (FTW!)
It supports prepared statements
Cluster awareness built-in
Either synchronous or asynchronous ops
Only supports CQL-based operations
Can be used side-by-side with Thrift
Native drivers
from DataStax:
Java
C#
Python
… other community supported drivers available
Native query example
val insert =
session.prepare("INSERT INTO myKsp.myTable (myKey, col1, col2) VALUES (?,?,?)")
val select = session.prepare("SELECT * FROM myKsp.myTable WHERE myKey = ?")
val cluster = Cluster.builder().addContactPoints(host1, host2, host3)
val session = cluster.connect()
session.execute(insert.bind(myKey, col1, col2))
val result = session.execute(select.bind(myKey))
Wait, was that SQL?!!
Or, how to make Cassandra more awesome
while simultaneously irritating early adopters
Introducing CQL3
●
●
●
●
●
●
●

Because the first two attempts sucked
Stands for “Cassandra Query Language”
Looks a heck of a lot like SQL
… but isn’t
Substantially lowers the learning curve
… but also makes it easier to screw up
An abstraction over the storage rows
Storage rows
[default@unknown] create keyspace Library;
[default@unknown] use Library;
[default@Library] create column family Books
...

with comparator=UTF8Type

...

and key_validation_class=UTF8Type

…

and default_validation_class=UTF8Type;

[default@Library] set Books['Patriot Games']['author'] = 'Tom Clancy';
[default@Library] set Books['Patriot Games']['year'] = '1987';
[default@Library] list Books;
RowKey: Patriot Games
=> (name=author, value=Tom Clancy, timestamp=1393102991499000)
=> (name=year, value=1987, timestamp=1393103015955000)
Storage rows - composites
[default@Library] create column family Authors
...
with key_validation_class=UTF8Type
...
and comparator='CompositeType(LongType,UTF8Type,UTF8Type)'
...
and default_validation_class=UTF8Type;
[default@Library] set Authors['Tom Clancy']['1987:Patriot Games:publisher'] = 'Putnam';
[default@Library] set Authors['Tom Clancy']['1987:Patriot Games:ISBN'] = '0-399-13241-4';
[default@Library] set Authors['Tom Clancy']['1993:Without Remorse:publisher'] = 'Putnam';
[default@Library] set Authors['Tom Clancy']['1993:Without Remorse:ISBN'] = '0-399-13825-0';
[default@Library] list Authors;
RowKey: Tom Clancy
=> (name=1987:Patriot Games:ISBN, value=0-399-13241-4, timestamp=1393104011458000)
=> (name=1987:Patriot Games:publisher, value=Putnam, timestamp=1393103948577000)
=> (name=1993:Without Remorse:ISBN, value=0-399-13825-0, timestamp=1393104109214000)
=> (name=1993:Without Remorse:publisher, value=Putnam, timestamp=1393104083773000)
CQL - simple intro
cqlsh> CREATE KEYSPACE Library WITH REPLICATION = {'class':'SimpleStrategy', 'replication_factor':1};
cqlsh> use Library;
cqlsh:library> CREATE TABLE Books (
...

title varchar,

...

author varchar,

...

year int,

...

PRIMARY KEY (title)

... );
cqlsh:library> INSERT INTO Books (title, author, year) VALUES ('Patriot Games', 'Tom Clancy', 1987);
cqlsh:library> INSERT INTO Books (title, author, year) VALUES ('Without Remorse', 'Tom Clancy', 1993);
CQL - simple intro

Storage rows:
CQL - composite key
CREATE TABLE Authors (
name varchar,
year int,
title varchar,
publisher varchar,
ISBN varchar,
PRIMARY KEY (name, year, title)
)
CQL - composite key

Storage rows:
Keys and Filters
●
●
●
●
●
●

Ad hoc queries are NOT supported
Query by key
Key must include all potential filter columns
Must include partition key in filter
Subsequent filters must be in order
Only last filter can be a range
Example - Books table
CREATE TABLE Books (
title varchar,
author varchar,
year int,
PRIMARY KEY (title)
)
Example - Books table
CREATE TABLE Books (
title varchar,
author varchar,
year int,
PRIMARY KEY (author, title)
)
Example - Books table
CREATE TABLE Books (
title varchar,
author varchar,
year int,
PRIMARY KEY (author, year)
)
Example - Books table
CREATE TABLE Books (
title varchar,
author varchar,
year int,
PRIMARY KEY (year, author)
)
Secondary Indexes
●
●
●
●
●

Allows query-by-value
CREATE INDEX myIdx ON myTable (myCol)
Works well on low cardinality fields
Won’t scale for high cardinality fields
Don’t overuse it -- not a quick fix for a bad
data model
Example - Books table
CREATE TABLE Books (
title varchar,
author varchar,
year int,
PRIMARY KEY (author)
)
CREATE INDEX Books_year ON Books(year)
Composite Partition Keys
● PRIMARY KEY((year, author), title)
● Creates a more granular shard key
● Can be useful to make certain queries more
efficient, or to better distribute data
● Updates sharing a partition key are atomic
and isolated
Example - Books table
CREATE TABLE Books (
title varchar,
author varchar,
year int,
PRIMARY KEY ((year, author), title)
)
Example - Books table
CREATE TABLE Books (
title varchar,
author varchar,
year int,
PRIMARY KEY (year, author, title)
)
Collections
denormalization done well
Supported types
● Sets - ordered naturally
● Lists - ordered by index
● Maps - key/value pairs
Caveats
● Max 64k items in a collection
● Max 64k size per item
● Collections are read in their entirety, so keep
them small
Sets
Sets

Set
name

Item
value
Lists
Lists

List name

Ordering
meta data

List item
value
Maps
Maps

Map
name

Key

Value
TRON
(tracing on)
Using tracing
● In cqlsh, “tracing on”
● … enjoy!
Example
1393126200000
Antipattern
CREATE TABLE WorkQueue (
name varchar,
time bigint,
workItem varchar,
PRIMARY KEY (name, time)
)
… do a bunch of inserts ...
SELECT * FROM WorkQueue WHERE name='ToDo' ORDER BY time ASC;
DELETE FROM WorkQueue WHERE name=’ToDo’ AND time=[some_time]
Antipattern - enqueue
Antipattern - dequeue
Antipattern

20k tombstones!!
13ms of 17ms spent reading tombstones
Lightweight Transactions
(no it’s not ACID)
Primer
●
●
●
●
●
●

Supports basic Compare-and-Set ops
Provides linearizable consistency
… aka serial isolation
Uses “Paxos light” under the hood
Still expensive -- four round trips!
For most cases quorum reads/writes will be
sufficient
Usage
INSERT INTO Users (login, name)
VALUES (‘rs_atl’, ‘Robbie Strickland’)
IF NOT EXISTS;
UPDATE Users
SET password=’super_secure_password’
WHERE login=’rs_atl’
IF reset_token=’some_reset_token’;
Other cool stuff
●
●
●
●
●

Triggers (experimental)
Batching multiple requests
Leveled compaction
Configuration via CQL
Gossip-based rack/DC configuration
Thank you!
Robbie Strickland
Software Development Manager
The Weather Channel
rostrickland@gmail.com
@dont_use_twitter

Más contenido relacionado

La actualidad más candente

Intro to py spark (and cassandra)
Intro to py spark (and cassandra)Intro to py spark (and cassandra)
Intro to py spark (and cassandra)Jon Haddad
 
Cassandra Presentation for San Antonio JUG
Cassandra Presentation for San Antonio JUGCassandra Presentation for San Antonio JUG
Cassandra Presentation for San Antonio JUGgdusbabek
 
PySpark Cassandra - Amsterdam Spark Meetup
PySpark Cassandra - Amsterdam Spark MeetupPySpark Cassandra - Amsterdam Spark Meetup
PySpark Cassandra - Amsterdam Spark MeetupFrens Jan Rumph
 
PostgreSQL FTS Solutions FOSDEM 2013 - PGDAY
PostgreSQL FTS Solutions FOSDEM 2013 - PGDAYPostgreSQL FTS Solutions FOSDEM 2013 - PGDAY
PostgreSQL FTS Solutions FOSDEM 2013 - PGDAYEmanuel Calvo
 
The Right Data for the Right Job
The Right Data for the Right JobThe Right Data for the Right Job
The Right Data for the Right JobEmily Curtin
 
Cassandra Day Atlanta 2015: Data Modeling In-Depth: A Time Series Example
Cassandra Day Atlanta 2015: Data Modeling In-Depth: A Time Series ExampleCassandra Day Atlanta 2015: Data Modeling In-Depth: A Time Series Example
Cassandra Day Atlanta 2015: Data Modeling In-Depth: A Time Series ExampleDataStax Academy
 
Full Text search in Django with Postgres
Full Text search in Django with PostgresFull Text search in Django with Postgres
Full Text search in Django with Postgressyerram
 
Managing Your Content with Elasticsearch
Managing Your Content with ElasticsearchManaging Your Content with Elasticsearch
Managing Your Content with ElasticsearchSamantha Quiñones
 
Cassandra@Coursera: AWS deploy and MySQL transition
Cassandra@Coursera: AWS deploy and MySQL transitionCassandra@Coursera: AWS deploy and MySQL transition
Cassandra@Coursera: AWS deploy and MySQL transitionDaniel Jin Hao Chia
 
Cassandra 3 new features 2016
Cassandra 3 new features 2016Cassandra 3 new features 2016
Cassandra 3 new features 2016Duyhai Doan
 
Apache Cassandra Developer Training Slide Deck
Apache Cassandra Developer Training Slide DeckApache Cassandra Developer Training Slide Deck
Apache Cassandra Developer Training Slide DeckDataStax Academy
 
Webscale PostgreSQL - JSONB and Horizontal Scaling Strategies
Webscale PostgreSQL - JSONB and Horizontal Scaling StrategiesWebscale PostgreSQL - JSONB and Horizontal Scaling Strategies
Webscale PostgreSQL - JSONB and Horizontal Scaling StrategiesJonathan Katz
 
Streaming ML on Spark: Deprecated, experimental and internal ap is galore!
Streaming ML on Spark: Deprecated, experimental and internal ap is galore!Streaming ML on Spark: Deprecated, experimental and internal ap is galore!
Streaming ML on Spark: Deprecated, experimental and internal ap is galore!Holden Karau
 
Beyond Shuffling - Effective Tips and Tricks for Scaling Spark (Vancouver Sp...
Beyond Shuffling  - Effective Tips and Tricks for Scaling Spark (Vancouver Sp...Beyond Shuffling  - Effective Tips and Tricks for Scaling Spark (Vancouver Sp...
Beyond Shuffling - Effective Tips and Tricks for Scaling Spark (Vancouver Sp...Holden Karau
 
Extending Cassandra with Doradus OLAP for High Performance Analytics
Extending Cassandra with Doradus OLAP for High Performance AnalyticsExtending Cassandra with Doradus OLAP for High Performance Analytics
Extending Cassandra with Doradus OLAP for High Performance Analyticsrandyguck
 
Cassandra Data Model
Cassandra Data ModelCassandra Data Model
Cassandra Data Modelebenhewitt
 
You know, for search. Querying 24 Billion Documents in 900ms
You know, for search. Querying 24 Billion Documents in 900msYou know, for search. Querying 24 Billion Documents in 900ms
You know, for search. Querying 24 Billion Documents in 900msJodok Batlogg
 

La actualidad más candente (20)

Intro to py spark (and cassandra)
Intro to py spark (and cassandra)Intro to py spark (and cassandra)
Intro to py spark (and cassandra)
 
Cassandra Presentation for San Antonio JUG
Cassandra Presentation for San Antonio JUGCassandra Presentation for San Antonio JUG
Cassandra Presentation for San Antonio JUG
 
PySpark Cassandra - Amsterdam Spark Meetup
PySpark Cassandra - Amsterdam Spark MeetupPySpark Cassandra - Amsterdam Spark Meetup
PySpark Cassandra - Amsterdam Spark Meetup
 
PostgreSQL FTS Solutions FOSDEM 2013 - PGDAY
PostgreSQL FTS Solutions FOSDEM 2013 - PGDAYPostgreSQL FTS Solutions FOSDEM 2013 - PGDAY
PostgreSQL FTS Solutions FOSDEM 2013 - PGDAY
 
Pgbr 2013 fts
Pgbr 2013 ftsPgbr 2013 fts
Pgbr 2013 fts
 
The Right Data for the Right Job
The Right Data for the Right JobThe Right Data for the Right Job
The Right Data for the Right Job
 
Cassandra 3.0
Cassandra 3.0Cassandra 3.0
Cassandra 3.0
 
Cassandra Day Atlanta 2015: Data Modeling In-Depth: A Time Series Example
Cassandra Day Atlanta 2015: Data Modeling In-Depth: A Time Series ExampleCassandra Day Atlanta 2015: Data Modeling In-Depth: A Time Series Example
Cassandra Day Atlanta 2015: Data Modeling In-Depth: A Time Series Example
 
Full Text search in Django with Postgres
Full Text search in Django with PostgresFull Text search in Django with Postgres
Full Text search in Django with Postgres
 
Managing Your Content with Elasticsearch
Managing Your Content with ElasticsearchManaging Your Content with Elasticsearch
Managing Your Content with Elasticsearch
 
Cassandra@Coursera: AWS deploy and MySQL transition
Cassandra@Coursera: AWS deploy and MySQL transitionCassandra@Coursera: AWS deploy and MySQL transition
Cassandra@Coursera: AWS deploy and MySQL transition
 
Cassandra 3 new features 2016
Cassandra 3 new features 2016Cassandra 3 new features 2016
Cassandra 3 new features 2016
 
Apache Cassandra Developer Training Slide Deck
Apache Cassandra Developer Training Slide DeckApache Cassandra Developer Training Slide Deck
Apache Cassandra Developer Training Slide Deck
 
Webscale PostgreSQL - JSONB and Horizontal Scaling Strategies
Webscale PostgreSQL - JSONB and Horizontal Scaling StrategiesWebscale PostgreSQL - JSONB and Horizontal Scaling Strategies
Webscale PostgreSQL - JSONB and Horizontal Scaling Strategies
 
Streaming ML on Spark: Deprecated, experimental and internal ap is galore!
Streaming ML on Spark: Deprecated, experimental and internal ap is galore!Streaming ML on Spark: Deprecated, experimental and internal ap is galore!
Streaming ML on Spark: Deprecated, experimental and internal ap is galore!
 
Beyond Shuffling - Effective Tips and Tricks for Scaling Spark (Vancouver Sp...
Beyond Shuffling  - Effective Tips and Tricks for Scaling Spark (Vancouver Sp...Beyond Shuffling  - Effective Tips and Tricks for Scaling Spark (Vancouver Sp...
Beyond Shuffling - Effective Tips and Tricks for Scaling Spark (Vancouver Sp...
 
Extending Cassandra with Doradus OLAP for High Performance Analytics
Extending Cassandra with Doradus OLAP for High Performance AnalyticsExtending Cassandra with Doradus OLAP for High Performance Analytics
Extending Cassandra with Doradus OLAP for High Performance Analytics
 
Deep Dive on Amazon DynamoDB
Deep Dive on Amazon DynamoDB Deep Dive on Amazon DynamoDB
Deep Dive on Amazon DynamoDB
 
Cassandra Data Model
Cassandra Data ModelCassandra Data Model
Cassandra Data Model
 
You know, for search. Querying 24 Billion Documents in 900ms
You know, for search. Querying 24 Billion Documents in 900msYou know, for search. Querying 24 Billion Documents in 900ms
You know, for search. Querying 24 Billion Documents in 900ms
 

Similar a Big Data Grows Up - A (re)introduction to Cassandra

Beyond Wordcount with spark datasets (and scalaing) - Nide PDX Jan 2018
Beyond Wordcount  with spark datasets (and scalaing) - Nide PDX Jan 2018Beyond Wordcount  with spark datasets (and scalaing) - Nide PDX Jan 2018
Beyond Wordcount with spark datasets (and scalaing) - Nide PDX Jan 2018Holden Karau
 
Big data analytics with Spark & Cassandra
Big data analytics with Spark & Cassandra Big data analytics with Spark & Cassandra
Big data analytics with Spark & Cassandra Matthias Niehoff
 
A fast introduction to PySpark with a quick look at Arrow based UDFs
A fast introduction to PySpark with a quick look at Arrow based UDFsA fast introduction to PySpark with a quick look at Arrow based UDFs
A fast introduction to PySpark with a quick look at Arrow based UDFsHolden Karau
 
Database 101
Database 101Database 101
Database 101thehoagie
 
SnappyData Overview Slidedeck for Big Data Bellevue
SnappyData Overview Slidedeck for Big Data Bellevue SnappyData Overview Slidedeck for Big Data Bellevue
SnappyData Overview Slidedeck for Big Data Bellevue SnappyData
 
Building Real-Time BI Systems with Kafka, Spark, and Kudu: Spark Summit East ...
Building Real-Time BI Systems with Kafka, Spark, and Kudu: Spark Summit East ...Building Real-Time BI Systems with Kafka, Spark, and Kudu: Spark Summit East ...
Building Real-Time BI Systems with Kafka, Spark, and Kudu: Spark Summit East ...Spark Summit
 
Spark Summit EU talk by Ross Lawley
Spark Summit EU talk by Ross LawleySpark Summit EU talk by Ross Lawley
Spark Summit EU talk by Ross LawleySpark Summit
 
How To Connect Spark To Your Own Datasource
How To Connect Spark To Your Own DatasourceHow To Connect Spark To Your Own Datasource
How To Connect Spark To Your Own DatasourceMongoDB
 
Introduction to Spark Datasets - Functional and relational together at last
Introduction to Spark Datasets - Functional and relational together at lastIntroduction to Spark Datasets - Functional and relational together at last
Introduction to Spark Datasets - Functional and relational together at lastHolden Karau
 
Ledingkart Meetup #2: Scaling Search @Lendingkart
Ledingkart Meetup #2: Scaling Search @LendingkartLedingkart Meetup #2: Scaling Search @Lendingkart
Ledingkart Meetup #2: Scaling Search @LendingkartMukesh Singh
 
Data engineering Stl Big Data IDEA user group
Data engineering   Stl Big Data IDEA user groupData engineering   Stl Big Data IDEA user group
Data engineering Stl Big Data IDEA user groupAdam Doyle
 
mongodb-aggregation-may-2012
mongodb-aggregation-may-2012mongodb-aggregation-may-2012
mongodb-aggregation-may-2012Chris Westin
 
Cassandra overview
Cassandra overviewCassandra overview
Cassandra overviewSean Murphy
 
MongoDB's New Aggregation framework
MongoDB's New Aggregation frameworkMongoDB's New Aggregation framework
MongoDB's New Aggregation frameworkChris Westin
 
An Introduction to Apache Cassandra
An Introduction to Apache CassandraAn Introduction to Apache Cassandra
An Introduction to Apache CassandraSaeid Zebardast
 
Introducing Apache Spark's Data Frames and Dataset APIs workshop series
Introducing Apache Spark's Data Frames and Dataset APIs workshop seriesIntroducing Apache Spark's Data Frames and Dataset APIs workshop series
Introducing Apache Spark's Data Frames and Dataset APIs workshop seriesHolden Karau
 
Avoiding Pitfalls for Cassandra.pdf
Avoiding Pitfalls for Cassandra.pdfAvoiding Pitfalls for Cassandra.pdf
Avoiding Pitfalls for Cassandra.pdfCédrick Lunven
 
Use Your MySQL Knowledge to Become an Instant Cassandra Guru
Use Your MySQL Knowledge to Become an Instant Cassandra GuruUse Your MySQL Knowledge to Become an Instant Cassandra Guru
Use Your MySQL Knowledge to Become an Instant Cassandra GuruTim Callaghan
 

Similar a Big Data Grows Up - A (re)introduction to Cassandra (20)

Beyond Wordcount with spark datasets (and scalaing) - Nide PDX Jan 2018
Beyond Wordcount  with spark datasets (and scalaing) - Nide PDX Jan 2018Beyond Wordcount  with spark datasets (and scalaing) - Nide PDX Jan 2018
Beyond Wordcount with spark datasets (and scalaing) - Nide PDX Jan 2018
 
Cassandra
CassandraCassandra
Cassandra
 
Big data analytics with Spark & Cassandra
Big data analytics with Spark & Cassandra Big data analytics with Spark & Cassandra
Big data analytics with Spark & Cassandra
 
A fast introduction to PySpark with a quick look at Arrow based UDFs
A fast introduction to PySpark with a quick look at Arrow based UDFsA fast introduction to PySpark with a quick look at Arrow based UDFs
A fast introduction to PySpark with a quick look at Arrow based UDFs
 
Database 101
Database 101Database 101
Database 101
 
SnappyData Overview Slidedeck for Big Data Bellevue
SnappyData Overview Slidedeck for Big Data Bellevue SnappyData Overview Slidedeck for Big Data Bellevue
SnappyData Overview Slidedeck for Big Data Bellevue
 
Building Real-Time BI Systems with Kafka, Spark, and Kudu: Spark Summit East ...
Building Real-Time BI Systems with Kafka, Spark, and Kudu: Spark Summit East ...Building Real-Time BI Systems with Kafka, Spark, and Kudu: Spark Summit East ...
Building Real-Time BI Systems with Kafka, Spark, and Kudu: Spark Summit East ...
 
Spark Summit EU talk by Ross Lawley
Spark Summit EU talk by Ross LawleySpark Summit EU talk by Ross Lawley
Spark Summit EU talk by Ross Lawley
 
How To Connect Spark To Your Own Datasource
How To Connect Spark To Your Own DatasourceHow To Connect Spark To Your Own Datasource
How To Connect Spark To Your Own Datasource
 
Introduction to Spark Datasets - Functional and relational together at last
Introduction to Spark Datasets - Functional and relational together at lastIntroduction to Spark Datasets - Functional and relational together at last
Introduction to Spark Datasets - Functional and relational together at last
 
Ledingkart Meetup #2: Scaling Search @Lendingkart
Ledingkart Meetup #2: Scaling Search @LendingkartLedingkart Meetup #2: Scaling Search @Lendingkart
Ledingkart Meetup #2: Scaling Search @Lendingkart
 
Data engineering Stl Big Data IDEA user group
Data engineering   Stl Big Data IDEA user groupData engineering   Stl Big Data IDEA user group
Data engineering Stl Big Data IDEA user group
 
mongodb-aggregation-may-2012
mongodb-aggregation-may-2012mongodb-aggregation-may-2012
mongodb-aggregation-may-2012
 
Cassandra overview
Cassandra overviewCassandra overview
Cassandra overview
 
MongoDB's New Aggregation framework
MongoDB's New Aggregation frameworkMongoDB's New Aggregation framework
MongoDB's New Aggregation framework
 
An Introduction to Apache Cassandra
An Introduction to Apache CassandraAn Introduction to Apache Cassandra
An Introduction to Apache Cassandra
 
Introducing Apache Spark's Data Frames and Dataset APIs workshop series
Introducing Apache Spark's Data Frames and Dataset APIs workshop seriesIntroducing Apache Spark's Data Frames and Dataset APIs workshop series
Introducing Apache Spark's Data Frames and Dataset APIs workshop series
 
Cassandra training
Cassandra trainingCassandra training
Cassandra training
 
Avoiding Pitfalls for Cassandra.pdf
Avoiding Pitfalls for Cassandra.pdfAvoiding Pitfalls for Cassandra.pdf
Avoiding Pitfalls for Cassandra.pdf
 
Use Your MySQL Knowledge to Become an Instant Cassandra Guru
Use Your MySQL Knowledge to Become an Instant Cassandra GuruUse Your MySQL Knowledge to Become an Instant Cassandra Guru
Use Your MySQL Knowledge to Become an Instant Cassandra Guru
 

Más de Robbie Strickland

Always On: Building Highly Available Applications on Cassandra
Always On: Building Highly Available Applications on CassandraAlways On: Building Highly Available Applications on Cassandra
Always On: Building Highly Available Applications on CassandraRobbie Strickland
 
Lambda at Weather Scale - Cassandra Summit 2015
Lambda at Weather Scale - Cassandra Summit 2015Lambda at Weather Scale - Cassandra Summit 2015
Lambda at Weather Scale - Cassandra Summit 2015Robbie Strickland
 
New Analytics Toolbox DevNexus 2015
New Analytics Toolbox DevNexus 2015New Analytics Toolbox DevNexus 2015
New Analytics Toolbox DevNexus 2015Robbie Strickland
 
Online Analytics with Hadoop and Cassandra
Online Analytics with Hadoop and CassandraOnline Analytics with Hadoop and Cassandra
Online Analytics with Hadoop and CassandraRobbie Strickland
 

Más de Robbie Strickland (6)

Always On: Building Highly Available Applications on Cassandra
Always On: Building Highly Available Applications on CassandraAlways On: Building Highly Available Applications on Cassandra
Always On: Building Highly Available Applications on Cassandra
 
Lambda at Weather Scale - Cassandra Summit 2015
Lambda at Weather Scale - Cassandra Summit 2015Lambda at Weather Scale - Cassandra Summit 2015
Lambda at Weather Scale - Cassandra Summit 2015
 
New Analytics Toolbox DevNexus 2015
New Analytics Toolbox DevNexus 2015New Analytics Toolbox DevNexus 2015
New Analytics Toolbox DevNexus 2015
 
CQL Under the Hood
CQL Under the HoodCQL Under the Hood
CQL Under the Hood
 
New Analytics Toolbox
New Analytics ToolboxNew Analytics Toolbox
New Analytics Toolbox
 
Online Analytics with Hadoop and Cassandra
Online Analytics with Hadoop and CassandraOnline Analytics with Hadoop and Cassandra
Online Analytics with Hadoop and Cassandra
 

Último

Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationRadu Cotescu
 
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...HostedbyConfluent
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsMaria Levchenko
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘RTylerCroy
 
Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)Allon Mureinik
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreternaman860154
 
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking MenDelhi Call girls
 
Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...Alan Dix
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking MenDelhi Call girls
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonAnna Loughnan Colquhoun
 
My Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationMy Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationRidwan Fadjar
 
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...shyamraj55
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerThousandEyes
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024Rafal Los
 
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | DelhiFULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhisoniya singh
 
Maximizing Board Effectiveness 2024 Webinar.pptx
Maximizing Board Effectiveness 2024 Webinar.pptxMaximizing Board Effectiveness 2024 Webinar.pptx
Maximizing Board Effectiveness 2024 Webinar.pptxOnBoard
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdfhans926745
 
The Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxThe Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxMalak Abu Hammad
 
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024BookNet Canada
 
Breaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountBreaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountPuma Security, LLC
 

Último (20)

Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organization
 
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed texts
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘
 
Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreter
 
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
 
Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt Robison
 
My Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationMy Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 Presentation
 
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024
 
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | DelhiFULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
 
Maximizing Board Effectiveness 2024 Webinar.pptx
Maximizing Board Effectiveness 2024 Webinar.pptxMaximizing Board Effectiveness 2024 Webinar.pptx
Maximizing Board Effectiveness 2024 Webinar.pptx
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf
 
The Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxThe Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptx
 
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
 
Breaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountBreaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path Mount
 

Big Data Grows Up - A (re)introduction to Cassandra

  • 1. Big Data Grows Up A (re)introduction to Cassandra Robbie Strickland
  • 2. Who am I? Robbie Strickland Software Development Manager The Weather Channel rostrickland@gmail.com @dont_use_twitter
  • 3. Who am I? ● ● ● ● ● Cassandra user/contributor since 2010 … it was at release 0.5 back then 4 years? Oracle DBA’s aren’t impressed Done lots of dumb stuff with Cassandra … and some really awesome stuff too
  • 7. Why Cassandra? It’s fast: ● ● ● ● No locks Tunable consistency Sequential R/W Decentralized
  • 8. Why Cassandra? It scales (linearly): ● ● ● ● Multi data center No SPOF DHT Hadoop integration
  • 9. Why Cassandra? It’s fault tolerant: ● Automatic replication ● Masterless ● Failed nodes replaced with ease
  • 10. What’s different? … a lot in the last year (ish)
  • 11. What’s new? ● ● ● ● ● ● ● Virtual nodes O(n) data moved off-heap CQL3 (and defining schemas) Native protocol/driver Collections Lightweight transactions Compaction throttling that actually works
  • 12. What’s gone? ● ● ● ● Manual token management Supercolumns Thrift (if you use the native driver) Directly managing storage rows
  • 13. What’s still the same? ● ● ● ● ● Still not an RDBMS Still no joins (see above) Still no ad-hoc queries (see above again) Still requires a denormalized data model (^^) Still need to know what the heck you’re doing
  • 14. Token Management Linear scalability without the migraine
  • 15. The old way ● 1 token per node ● Assigned manually ● Adding nodes == reassignment of all tokens ● Node rebuild heavily taxes a few nodes A F B cluster with no vnodes E C D
  • 16. … enter Vnodes N A B C M L D cluster with vnodes K J E F I H G ● n tokens per node ● Assigned magically ● Adding nodes == painless ● Node rebuild distributed across many nodes
  • 19. Going Off-heap because the JVM sometimes sucks
  • 20. Why go off-heap ● ● ● ● ● GC overhead JVM no good with big heap sizes GC overhead GC overhead GC overhead
  • 21. O(n) data structures ● ● ● ● Row cache Bloom filters Compression offsets Partition summary … all these are moved off-heap
  • 22. New memory allocation Row cache Bloom filters JVM Compression offsets Partition summary native heap Partition key cache
  • 23. Death of a (Thrift) Salesman Or, how to build a killer data store without a crappy interface
  • 24. Reasons not to ditch Thrift ● ● ● ● Lots of client libraries still use it You finally got it installed You didn’t know there was another choice It sucks less than many alternatives
  • 25. … in spite of all those benefits, you really should ditch Thrift because: ● It requires your entire result set to fit into RAM on both client and server ● The native protocol is better, faster, and supports all the new features ● Thrift-based client libraries are always a step behind ● It’s going away eventually
  • 26. … and did I mention ... It requires your entire result set to fit into RAM on both client and server!!!
  • 28. Going Native really catchy tag line here
  • 29. Native protocol ● ● ● ● ● ● ● It’s binary, making it lighter weight It supports cursors (FTW!) It supports prepared statements Cluster awareness built-in Either synchronous or asynchronous ops Only supports CQL-based operations Can be used side-by-side with Thrift
  • 30. Native drivers from DataStax: Java C# Python … other community supported drivers available
  • 31. Native query example val insert = session.prepare("INSERT INTO myKsp.myTable (myKey, col1, col2) VALUES (?,?,?)") val select = session.prepare("SELECT * FROM myKsp.myTable WHERE myKey = ?") val cluster = Cluster.builder().addContactPoints(host1, host2, host3) val session = cluster.connect() session.execute(insert.bind(myKey, col1, col2)) val result = session.execute(select.bind(myKey))
  • 32. Wait, was that SQL?!! Or, how to make Cassandra more awesome while simultaneously irritating early adopters
  • 33. Introducing CQL3 ● ● ● ● ● ● ● Because the first two attempts sucked Stands for “Cassandra Query Language” Looks a heck of a lot like SQL … but isn’t Substantially lowers the learning curve … but also makes it easier to screw up An abstraction over the storage rows
  • 34. Storage rows [default@unknown] create keyspace Library; [default@unknown] use Library; [default@Library] create column family Books ... with comparator=UTF8Type ... and key_validation_class=UTF8Type … and default_validation_class=UTF8Type; [default@Library] set Books['Patriot Games']['author'] = 'Tom Clancy'; [default@Library] set Books['Patriot Games']['year'] = '1987'; [default@Library] list Books; RowKey: Patriot Games => (name=author, value=Tom Clancy, timestamp=1393102991499000) => (name=year, value=1987, timestamp=1393103015955000)
  • 35. Storage rows - composites [default@Library] create column family Authors ... with key_validation_class=UTF8Type ... and comparator='CompositeType(LongType,UTF8Type,UTF8Type)' ... and default_validation_class=UTF8Type; [default@Library] set Authors['Tom Clancy']['1987:Patriot Games:publisher'] = 'Putnam'; [default@Library] set Authors['Tom Clancy']['1987:Patriot Games:ISBN'] = '0-399-13241-4'; [default@Library] set Authors['Tom Clancy']['1993:Without Remorse:publisher'] = 'Putnam'; [default@Library] set Authors['Tom Clancy']['1993:Without Remorse:ISBN'] = '0-399-13825-0'; [default@Library] list Authors; RowKey: Tom Clancy => (name=1987:Patriot Games:ISBN, value=0-399-13241-4, timestamp=1393104011458000) => (name=1987:Patriot Games:publisher, value=Putnam, timestamp=1393103948577000) => (name=1993:Without Remorse:ISBN, value=0-399-13825-0, timestamp=1393104109214000) => (name=1993:Without Remorse:publisher, value=Putnam, timestamp=1393104083773000)
  • 36. CQL - simple intro cqlsh> CREATE KEYSPACE Library WITH REPLICATION = {'class':'SimpleStrategy', 'replication_factor':1}; cqlsh> use Library; cqlsh:library> CREATE TABLE Books ( ... title varchar, ... author varchar, ... year int, ... PRIMARY KEY (title) ... ); cqlsh:library> INSERT INTO Books (title, author, year) VALUES ('Patriot Games', 'Tom Clancy', 1987); cqlsh:library> INSERT INTO Books (title, author, year) VALUES ('Without Remorse', 'Tom Clancy', 1993);
  • 37. CQL - simple intro Storage rows:
  • 38. CQL - composite key CREATE TABLE Authors ( name varchar, year int, title varchar, publisher varchar, ISBN varchar, PRIMARY KEY (name, year, title) )
  • 39. CQL - composite key Storage rows:
  • 40. Keys and Filters ● ● ● ● ● ● Ad hoc queries are NOT supported Query by key Key must include all potential filter columns Must include partition key in filter Subsequent filters must be in order Only last filter can be a range
  • 41. Example - Books table CREATE TABLE Books ( title varchar, author varchar, year int, PRIMARY KEY (title) )
  • 42. Example - Books table CREATE TABLE Books ( title varchar, author varchar, year int, PRIMARY KEY (author, title) )
  • 43. Example - Books table CREATE TABLE Books ( title varchar, author varchar, year int, PRIMARY KEY (author, year) )
  • 44. Example - Books table CREATE TABLE Books ( title varchar, author varchar, year int, PRIMARY KEY (year, author) )
  • 45. Secondary Indexes ● ● ● ● ● Allows query-by-value CREATE INDEX myIdx ON myTable (myCol) Works well on low cardinality fields Won’t scale for high cardinality fields Don’t overuse it -- not a quick fix for a bad data model
  • 46. Example - Books table CREATE TABLE Books ( title varchar, author varchar, year int, PRIMARY KEY (author) ) CREATE INDEX Books_year ON Books(year)
  • 47. Composite Partition Keys ● PRIMARY KEY((year, author), title) ● Creates a more granular shard key ● Can be useful to make certain queries more efficient, or to better distribute data ● Updates sharing a partition key are atomic and isolated
  • 48. Example - Books table CREATE TABLE Books ( title varchar, author varchar, year int, PRIMARY KEY ((year, author), title) )
  • 49. Example - Books table CREATE TABLE Books ( title varchar, author varchar, year int, PRIMARY KEY (year, author, title) )
  • 51. Supported types ● Sets - ordered naturally ● Lists - ordered by index ● Maps - key/value pairs
  • 52. Caveats ● Max 64k items in a collection ● Max 64k size per item ● Collections are read in their entirety, so keep them small
  • 53. Sets
  • 55. Lists
  • 57. Maps
  • 60. Using tracing ● In cqlsh, “tracing on” ● … enjoy!
  • 62. Antipattern CREATE TABLE WorkQueue ( name varchar, time bigint, workItem varchar, PRIMARY KEY (name, time) ) … do a bunch of inserts ... SELECT * FROM WorkQueue WHERE name='ToDo' ORDER BY time ASC; DELETE FROM WorkQueue WHERE name=’ToDo’ AND time=[some_time]
  • 65. Antipattern 20k tombstones!! 13ms of 17ms spent reading tombstones
  • 67. Primer ● ● ● ● ● ● Supports basic Compare-and-Set ops Provides linearizable consistency … aka serial isolation Uses “Paxos light” under the hood Still expensive -- four round trips! For most cases quorum reads/writes will be sufficient
  • 68. Usage INSERT INTO Users (login, name) VALUES (‘rs_atl’, ‘Robbie Strickland’) IF NOT EXISTS; UPDATE Users SET password=’super_secure_password’ WHERE login=’rs_atl’ IF reset_token=’some_reset_token’;
  • 69. Other cool stuff ● ● ● ● ● Triggers (experimental) Batching multiple requests Leveled compaction Configuration via CQL Gossip-based rack/DC configuration
  • 70. Thank you! Robbie Strickland Software Development Manager The Weather Channel rostrickland@gmail.com @dont_use_twitter