SlideShare a Scribd company logo
1 of 63
Download to read offline
Apache Cassandra and Drivers
Overview of Apache Cassandra and DataStax Drivers
Bulat Shakirzyanov
@avalanche123
Sandeep Tamhankar
@stamhankar999
https://goo.gl/cBsRVv
Introduction
Cassandra Overview
© 2015 DataStax, All Rights Reserved.
Datacenter Datacenter
Cassandra Topology
3
Node
NodeNode
Node
Client Client
Node
NodeNode
Node
Client Client
Cluster
© 2015 DataStax, All Rights Reserved.
Datacenter Datacenter
Request Coordinator
4
Node
NodeNode
Node
Client Client
Node
NodeCoordinator
Node
Client Client
Coordinator node:
Forwards requests
to corresponding replicas
© 2015 DataStax, All Rights Reserved.
Datacenter
Row Replica
5
Replica
NodeNode
Replica
Client Client
Datacenter
Node
Node
Replica
Client Client
Coordinator
Replica node:
Stores a slice of total rows
of each keyspace
© 2015 DataStax, All Rights Reserved.
Token Ring
6
12
1
2
3
4
5
6
7
8
9
10
11
© 2015 DataStax, All Rights Reserved.
Token Ring
6
-263 … (+263 - 1)
Murmur3 Partitioner
© 2015 DataStax, All Rights Reserved.
Token Ring
6
Node
11…12
Node
12…1
Node
1…2
Node
2…3
Node
3…4
Node
4…5
Node
5…6
Node
6…7
Node
7…8
Node
8…9
Node
9…10
Node
10…11
-263 … (+263 - 1)
Murmur3 Partitioner
© 2015 DataStax, All Rights Reserved.
Keyspaces
7
CREATE KEYSPACE default WITH replication = {
'class': 'SimpleStrategy',
'replication_factor': 3
}
© 2015 DataStax, All Rights Reserved.
C*
Data Partitioning
8
Keyspace
Row
token(PK) = 1
RF = 3
Partitioner:
Gets a token by hashing
the primary key of a row
© 2015 DataStax, All Rights Reserved.
C*
Replication Strategy
9
Keyspace
1
Row
RF = 3
Replication strategy:
Determines the first
replica for the row
token(PK) = 1
© 2015 DataStax, All Rights Reserved.
C*
Replication Factor
10
Keyspace
Row
RF = 3
Replication factor:
Specifies total number of
replicas for each row
token(PK) = 1
© 2015 DataStax, All Rights Reserved.
Coordinator
Node Replica
Replica
Node
11
ReplicaApplication
Consistency Level
RF = 3, CL = Quorum
© 2015 DataStax, All Rights Reserved.
Coordinator
Node Replica
Replica
Node
11
ReplicaApplication
Consistency Level
RF = 3, CL = Quorum
INSERT
© 2015 DataStax, All Rights Reserved.
Coordinator
Node Replica
Replica
Node
11
ReplicaApplication
Consistency Level
RF = 3, CL = Quorum
INSERT
© 2015 DataStax, All Rights Reserved.
Coordinator
Node Replica
Replica
Node
11
ReplicaApplication
Consistency Level
RF = 3, CL = Quorum
INSERT
© 2015 DataStax, All Rights Reserved.
Coordinator
Node Replica
Replica
Node
11
ReplicaApplication
Consistency Level
RF = 3, CL = Quorum
INSERT
DataStax Drivers
Smart clients for Apache Cassandra
© 2015 DataStax, All Rights Reserved.
Goals of DataStax Drivers
• Consistent set of features across languages
• Asynchronous execution of requests
• Load balancing
• Fault tolerant
• Address Resolution (multi-region!)
• Automatic cluster discovery and reconnection
• Flexible to the core
• Consistent terminology
• Open source
13
© 2015 DataStax, All Rights Reserved. 14
Asynchronous Execution
IO Reactor, Request Pipelining and Future Composition
© 2015 DataStax, All Rights Reserved.
Asynchronous Core
16
Application Thread
Business Logic
Driver
Background Thread
IO Reactor
© 2015 DataStax, All Rights Reserved.
Request Pipelining
17
Client
Without
Request Pipelining
Server
Client Server
With
Request Pipelining
1
2
2
3
1
3
1
2
3
1
2
3
© 2015 DataStax, All Rights Reserved.
What is a Future?
• Represents the result of an asynchronous operation
• Returned by any *_async method in the Ruby driver
• execute_async
• prepare_async
• Will block if asked for the true result
18
© 2015 DataStax, All Rights Reserved.
Future Composition
19
select_user = session.prepare('SELECT * FROM users WHERE id = ?')
select_page = session.prepare('SELECT * FROM pages WHERE slug = ?')
user_ids = [1, 2, 3, 4]
futures = user_ids.map do |id|
future = session.execute_async(select_user, arguments: [id])
future.then do |users|
user = users.first
future = session.execute_async(select_page, arguments: [user['username']])
future.then do |pages|
page = pages.first
User.new(user, Page.new(page))
end
end
end
Cassandra::Future.all(futures).get
© 2015 DataStax, All Rights Reserved.
select_user = session.prepare('SELECT * FROM users WHERE id = ?')
select_page = session.prepare('SELECT * FROM pages WHERE slug = ?')
user_ids = [1, 2, 3, 4]
futures = user_ids.map do |id|
future = session.execute_async(select_user, arguments: [id])
future.then do |users|
user = users.first
future = session.execute_async(select_page, arguments: [user['username']])
future.then do |pages|
page = pages.first
User.new(user, Page.new(page))
end
end
end
Cassandra::Future.all(futures).get
Future Composition
20
© 2015 DataStax, All Rights Reserved.
select_user = session.prepare('SELECT * FROM users WHERE id = ?')
select_page = session.prepare('SELECT * FROM pages WHERE slug = ?')
user_ids = [1, 2, 3, 4]
futures = user_ids.map do |id|
future = session.execute_async(select_user, arguments: [id])
future.then do |users|
user = users.first
future = session.execute_async(select_page, arguments: [user['username']])
future.then do |pages|
page = pages.first
User.new(user, Page.new(page))
end
end
end
Cassandra::Future.all(futures).get
Future Composition
21
© 2015 DataStax, All Rights Reserved.
select_user = session.prepare('SELECT * FROM users WHERE id = ?')
select_page = session.prepare('SELECT * FROM pages WHERE slug = ?')
user_ids = [1, 2, 3, 4]
futures = user_ids.map do |id|
future = session.execute_async(select_user, arguments: [id])
future.then do |users|
user = users.first
future = session.execute_async(select_page, arguments: [user['username']])
future.then do |pages|
page = pages.first
User.new(user, Page.new(page))
end
end
end
Cassandra::Future.all(futures).get
Future Composition
22
© 2015 DataStax, All Rights Reserved.
select_user = session.prepare('SELECT * FROM users WHERE id = ?')
select_page = session.prepare('SELECT * FROM pages WHERE slug = ?')
user_ids = [1, 2, 3, 4]
futures = user_ids.map do |id|
future = session.execute_async(select_user, arguments: [id])
future.then do |users|
user = users.first
future = session.execute_async(select_page, arguments: [user['username']])
future.then do |pages|
page = pages.first
User.new(user, Page.new(page))
end
end
end
Cassandra::Future.all(futures).get
Future Composition
23
© 2015 DataStax, All Rights Reserved.
select_user = session.prepare('SELECT * FROM users WHERE id = ?')
select_page = session.prepare('SELECT * FROM pages WHERE slug = ?')
user_ids = [1, 2, 3, 4]
futures = user_ids.map do |id|
future = session.execute_async(select_user, arguments: [id])
future.then do |users|
user = users.first
future = session.execute_async(select_page, arguments: [user['username']])
future.then do |pages|
page = pages.first
User.new(user, Page.new(page))
end
end
end
Cassandra::Future.all(futures).get
Future Composition
24
© 2015 DataStax, All Rights Reserved.
Future Composition
25
[#<User @id=1 @username="avalanche123"; @page=#<Page @slug="avalanche123" ... > ... >, ... ]
© 2015 DataStax, All Rights Reserved.
Pop Quiz: How to make this faster?
26
select_user = session.prepare('SELECT * FROM users WHERE id = ?')
select_page = session.prepare('SELECT * FROM pages WHERE slug = ?')
user_ids = [1, 2, 3, 4]
futures = user_ids.map do |id|
future = session.execute_async(select_user, arguments: [id])
future.then do |users|
user = users.first
future = session.execute_async(select_page,
arguments: [user['username']])
future.then do |pages|
page = pages.first
User.new(user, Page.new(page))
end
end
end
Cassandra::Future.all(futures).get
© 2015 DataStax, All Rights Reserved.
Pop Quiz: How to make this faster?
27
user_future = session.prepare_async(‘SELECT * FROM users WHERE id = ?')
page_future = session.prepare_async(‘SELECT * FROM pages WHERE slug = ?’)
user_ids = [1, 2, 3, 4]
futures = user_ids.map do |id|
future = session.execute_async(user_future.get, arguments: [id])
future.then do |users|
user = users.first
future = session.execute_async(page_future.get,
arguments: [user['username']])
future.then do |pages|
page = pages.first
User.new(user, Page.new(page))
end
end
end
Cassandra::Future.all(futures).get
Load Balancing
Principles and Implementations
© 2015 DataStax, All Rights Reserved.
Application Driver
Load Balancing
29
Application
Thread
Node
Pool
Session
Pool
Pool
Pool
Application
Thread
Application
Thread
Client Cluster
Node
Node
Node
Load Balancing
Policy
© 2015 DataStax, All Rights Reserved.
Application Driver
Load Balancing
29
Application
Thread
Node
Pool
Session
Pool
Pool
Pool
Application
Thread
Application
Thread
Client Cluster
Node
Node
Node
Load Balancing
Policy
© 2015 DataStax, All Rights Reserved.
Application Driver
Load Balancing
29
Application
Thread
Node
Pool
Session
Pool
Pool
Pool
Application
Thread
Application
Thread
Client Cluster
Node
Node
Node
Load Balancing
Policy
© 2015 DataStax, All Rights Reserved.
Datacenter
Datacenter
DataCenter Aware Balancing
30
Node
Node
NodeClient
Node
Node
Node
Client
Client
Client
Client
Client
Local nodes are queried
first, if none are available,
the request could be
sent to a remote node.
© 2015 DataStax, All Rights Reserved.
Token Aware Balancing
31
Route request
directly to Replicas
Node
Node
Replica
Node
Client
Replica
Replica
Uses prepared statement
metadata to get the token
© 2015 DataStax, All Rights Reserved.
Other built-in policies
• Round Robin Policy
• ignores topology
• White List Policy
• only connect with certain hosts
32
Fault Tolerance
Sources of Failure and Error Handling
© 2015 DataStax, All Rights Reserved.
Fault Tolerance
34
Coordinator
Node Replica
Replica
Replica
Node
Business Logic
Driver
Application
© 2015 DataStax, All Rights Reserved. 35
Coordinator
Node Replica
Replica
Replica
Node
Business Logic
Driver
Application
Invalid Requests
Network Timeouts
Server Errors
Possible Failures
© 2015 DataStax, All Rights Reserved.
Application Driver
Automatic Retry of Server Errors
36
Application
Thread
Node
Pool
Session
Pool
Pool
Pool
Application
Thread
Application
Thread
Client Cluster
Node
Node
Node
Load Balancing
Policy
© 2015 DataStax, All Rights Reserved.
Application Driver
Automatic Retry of Server Errors
36
Application
Thread
Node
Pool
Session
Pool
Pool
Pool
Application
Thread
Application
Thread
Client Cluster
Node
Node
Node
Load Balancing
Policy
© 2015 DataStax, All Rights Reserved.
Application Driver
Automatic Retry of Server Errors
36
Application
Thread
Node
Pool
Session
Pool
Pool
Pool
Application
Thread
Application
Thread
Client Cluster
Node
Node
Node
Load Balancing
Policy
© 2015 DataStax, All Rights Reserved. 37
Coordinator
Node Replica
Replica
Replica
Node
Business Logic
Driver
Application
Unreachable Consistency
© 2015 DataStax, All Rights Reserved.
Coordinator
Node Replica
Replica
Node
38
Replica
Business Logic
Driver
Application
Read / Write Timeout Error
© 2015 DataStax, All Rights Reserved.
Coordinator
Node Replica
Replica
Node
38
Replica
Business Logic
Driver
Application
Read / Write Timeout Error
© 2015 DataStax, All Rights Reserved.
Coordinator
Node Replica
Replica
Node
38
Replica
Business Logic
Driver
Application
Read / Write Timeout Error
read / write timeout
© 2015 DataStax, All Rights Reserved. 39
Coordinator
Node Replica
Replica
Replica
Node
Business Logic
Driver
Application
Unavailable Error
© 2015 DataStax, All Rights Reserved. 39
Coordinator
Node Replica
Replica
Replica
Node
Business Logic
Driver
Application
Unavailable Error
unavailable
© 2015 DataStax, All Rights Reserved. 40
Error Handling
Address Resolution
Topology Aware Client
© 2015 DataStax, All Rights Reserved.
Datacenter Datacenter
Multiple Addresses
42
Node
NodeNode
Node
Client Client
Node
NodeNode
Node
Client Client
Within Datacenter:

Private IPs
Across Datacenters:

Public IPs
© 2015 DataStax, All Rights Reserved.
Application Driver
Address Resolution
43
Application
Thread
Application
Thread
Application
Thread
Client Cluster
© 2015 DataStax, All Rights Reserved.
Application Driver
Address Resolution
43
Application
Thread Node
Cluster
Application
Thread
Application
Thread
Client Cluster
Address
Resolution Policy
© 2015 DataStax, All Rights Reserved.
Application Driver
Address Resolution
43
Application
Thread Node
Cluster
Application
Thread
Application
Thread
Client Cluster
Node
Node
Node
Address
Resolution Policy
Control Connection
© 2015 DataStax, All Rights Reserved.
Application Driver
Address Resolution
43
Application
Thread Node
Cluster
Application
Thread
Application
Thread
Client Cluster
Node
Node
Node
Address
Resolution Policy
Control Connection
© 2015 DataStax, All Rights Reserved.
Application Driver
Address Resolution
43
Application
Thread Node
Pool
Cluster
Pool
Pool
Pool
Application
Thread
Application
Thread
Client Cluster
Node
Node
Node
Address
Resolution Policy
Control Connection
Session
© 2015 DataStax, All Rights Reserved.
EC2 Multi-Region Address Resolution
44
© 2015 DataStax, All Rights Reserved.
More
• Request Tracing
• Execution Information
• which node was used, # retries for query, etc.
• State Listeners
• node goes down/comes up, schema changes, etc.
• Result Paging
• SSL and Authentication
45
Questions

More Related Content

What's hot

Storing time series data with Apache Cassandra
Storing time series data with Apache CassandraStoring time series data with Apache Cassandra
Storing time series data with Apache CassandraPatrick McFadin
 
Real data models of silicon valley
Real data models of silicon valleyReal data models of silicon valley
Real data models of silicon valleyPatrick McFadin
 
How We Used Cassandra/Solr to Build Real-Time Analytics Platform
How We Used Cassandra/Solr to Build Real-Time Analytics PlatformHow We Used Cassandra/Solr to Build Real-Time Analytics Platform
How We Used Cassandra/Solr to Build Real-Time Analytics PlatformDataStax Academy
 
Beyond the Query – Bringing Complex Access Patterns to NoSQL with DataStax - ...
Beyond the Query – Bringing Complex Access Patterns to NoSQL with DataStax - ...Beyond the Query – Bringing Complex Access Patterns to NoSQL with DataStax - ...
Beyond the Query – Bringing Complex Access Patterns to NoSQL with DataStax - ...StampedeCon
 
Cassandra 2.0 and timeseries
Cassandra 2.0 and timeseriesCassandra 2.0 and timeseries
Cassandra 2.0 and timeseriesPatrick McFadin
 
Introduction to data modeling with apache cassandra
Introduction to data modeling with apache cassandraIntroduction to data modeling with apache cassandra
Introduction to data modeling with apache cassandraPatrick McFadin
 
DataStax | Effective Testing in DSE (Lessons Learned) (Predrag Knezevic) | Ca...
DataStax | Effective Testing in DSE (Lessons Learned) (Predrag Knezevic) | Ca...DataStax | Effective Testing in DSE (Lessons Learned) (Predrag Knezevic) | Ca...
DataStax | Effective Testing in DSE (Lessons Learned) (Predrag Knezevic) | Ca...DataStax
 
From Postgres to Cassandra (Rimas Silkaitis, Heroku) | C* Summit 2016
From Postgres to Cassandra (Rimas Silkaitis, Heroku) | C* Summit 2016From Postgres to Cassandra (Rimas Silkaitis, Heroku) | C* Summit 2016
From Postgres to Cassandra (Rimas Silkaitis, Heroku) | C* Summit 2016DataStax
 
Using Spark to Load Oracle Data into Cassandra
Using Spark to Load Oracle Data into CassandraUsing Spark to Load Oracle Data into Cassandra
Using Spark to Load Oracle Data into CassandraJim Hatcher
 
DataStax | Data Science with DataStax Enterprise (Brian Hess) | Cassandra Sum...
DataStax | Data Science with DataStax Enterprise (Brian Hess) | Cassandra Sum...DataStax | Data Science with DataStax Enterprise (Brian Hess) | Cassandra Sum...
DataStax | Data Science with DataStax Enterprise (Brian Hess) | Cassandra Sum...DataStax
 
DataStax | Advanced DSE Analytics Client Configuration (Jacek Lewandowski) | ...
DataStax | Advanced DSE Analytics Client Configuration (Jacek Lewandowski) | ...DataStax | Advanced DSE Analytics Client Configuration (Jacek Lewandowski) | ...
DataStax | Advanced DSE Analytics Client Configuration (Jacek Lewandowski) | ...DataStax
 
Time series with apache cassandra strata
Time series with apache cassandra   strataTime series with apache cassandra   strata
Time series with apache cassandra strataPatrick McFadin
 
Maximum Overdrive: Tuning the Spark Cassandra Connector (Russell Spitzer, Dat...
Maximum Overdrive: Tuning the Spark Cassandra Connector (Russell Spitzer, Dat...Maximum Overdrive: Tuning the Spark Cassandra Connector (Russell Spitzer, Dat...
Maximum Overdrive: Tuning the Spark Cassandra Connector (Russell Spitzer, Dat...DataStax
 
Cassandra Basics, Counters and Time Series Modeling
Cassandra Basics, Counters and Time Series ModelingCassandra Basics, Counters and Time Series Modeling
Cassandra Basics, Counters and Time Series ModelingVassilis Bekiaris
 
How to Bulletproof Your Scylla Deployment
How to Bulletproof Your Scylla DeploymentHow to Bulletproof Your Scylla Deployment
How to Bulletproof Your Scylla DeploymentScyllaDB
 
Time series with Apache Cassandra - Long version
Time series with Apache Cassandra - Long versionTime series with Apache Cassandra - Long version
Time series with Apache Cassandra - Long versionPatrick McFadin
 
DataStax | DSE: Bring Your Own Spark (with Enterprise Security) (Artem Aliev)...
DataStax | DSE: Bring Your Own Spark (with Enterprise Security) (Artem Aliev)...DataStax | DSE: Bring Your Own Spark (with Enterprise Security) (Artem Aliev)...
DataStax | DSE: Bring Your Own Spark (with Enterprise Security) (Artem Aliev)...DataStax
 
Scylla Summit 2018: From SAP to Scylla - Tracking the Fleet at GPS Insight
Scylla Summit 2018: From SAP to Scylla - Tracking the Fleet at GPS InsightScylla Summit 2018: From SAP to Scylla - Tracking the Fleet at GPS Insight
Scylla Summit 2018: From SAP to Scylla - Tracking the Fleet at GPS InsightScyllaDB
 

What's hot (20)

Storing time series data with Apache Cassandra
Storing time series data with Apache CassandraStoring time series data with Apache Cassandra
Storing time series data with Apache Cassandra
 
Coursera Cassandra Driver
Coursera Cassandra DriverCoursera Cassandra Driver
Coursera Cassandra Driver
 
Real data models of silicon valley
Real data models of silicon valleyReal data models of silicon valley
Real data models of silicon valley
 
How We Used Cassandra/Solr to Build Real-Time Analytics Platform
How We Used Cassandra/Solr to Build Real-Time Analytics PlatformHow We Used Cassandra/Solr to Build Real-Time Analytics Platform
How We Used Cassandra/Solr to Build Real-Time Analytics Platform
 
Beyond the Query – Bringing Complex Access Patterns to NoSQL with DataStax - ...
Beyond the Query – Bringing Complex Access Patterns to NoSQL with DataStax - ...Beyond the Query – Bringing Complex Access Patterns to NoSQL with DataStax - ...
Beyond the Query – Bringing Complex Access Patterns to NoSQL with DataStax - ...
 
Cassandra 2.0 and timeseries
Cassandra 2.0 and timeseriesCassandra 2.0 and timeseries
Cassandra 2.0 and timeseries
 
Introduction to data modeling with apache cassandra
Introduction to data modeling with apache cassandraIntroduction to data modeling with apache cassandra
Introduction to data modeling with apache cassandra
 
DataStax | Effective Testing in DSE (Lessons Learned) (Predrag Knezevic) | Ca...
DataStax | Effective Testing in DSE (Lessons Learned) (Predrag Knezevic) | Ca...DataStax | Effective Testing in DSE (Lessons Learned) (Predrag Knezevic) | Ca...
DataStax | Effective Testing in DSE (Lessons Learned) (Predrag Knezevic) | Ca...
 
From Postgres to Cassandra (Rimas Silkaitis, Heroku) | C* Summit 2016
From Postgres to Cassandra (Rimas Silkaitis, Heroku) | C* Summit 2016From Postgres to Cassandra (Rimas Silkaitis, Heroku) | C* Summit 2016
From Postgres to Cassandra (Rimas Silkaitis, Heroku) | C* Summit 2016
 
Using Spark to Load Oracle Data into Cassandra
Using Spark to Load Oracle Data into CassandraUsing Spark to Load Oracle Data into Cassandra
Using Spark to Load Oracle Data into Cassandra
 
DataStax | Data Science with DataStax Enterprise (Brian Hess) | Cassandra Sum...
DataStax | Data Science with DataStax Enterprise (Brian Hess) | Cassandra Sum...DataStax | Data Science with DataStax Enterprise (Brian Hess) | Cassandra Sum...
DataStax | Data Science with DataStax Enterprise (Brian Hess) | Cassandra Sum...
 
DataStax | Advanced DSE Analytics Client Configuration (Jacek Lewandowski) | ...
DataStax | Advanced DSE Analytics Client Configuration (Jacek Lewandowski) | ...DataStax | Advanced DSE Analytics Client Configuration (Jacek Lewandowski) | ...
DataStax | Advanced DSE Analytics Client Configuration (Jacek Lewandowski) | ...
 
Time series with apache cassandra strata
Time series with apache cassandra   strataTime series with apache cassandra   strata
Time series with apache cassandra strata
 
Maximum Overdrive: Tuning the Spark Cassandra Connector (Russell Spitzer, Dat...
Maximum Overdrive: Tuning the Spark Cassandra Connector (Russell Spitzer, Dat...Maximum Overdrive: Tuning the Spark Cassandra Connector (Russell Spitzer, Dat...
Maximum Overdrive: Tuning the Spark Cassandra Connector (Russell Spitzer, Dat...
 
Cassandra Basics, Counters and Time Series Modeling
Cassandra Basics, Counters and Time Series ModelingCassandra Basics, Counters and Time Series Modeling
Cassandra Basics, Counters and Time Series Modeling
 
How to Bulletproof Your Scylla Deployment
How to Bulletproof Your Scylla DeploymentHow to Bulletproof Your Scylla Deployment
How to Bulletproof Your Scylla Deployment
 
Time series with Apache Cassandra - Long version
Time series with Apache Cassandra - Long versionTime series with Apache Cassandra - Long version
Time series with Apache Cassandra - Long version
 
Advanced Operations
Advanced OperationsAdvanced Operations
Advanced Operations
 
DataStax | DSE: Bring Your Own Spark (with Enterprise Security) (Artem Aliev)...
DataStax | DSE: Bring Your Own Spark (with Enterprise Security) (Artem Aliev)...DataStax | DSE: Bring Your Own Spark (with Enterprise Security) (Artem Aliev)...
DataStax | DSE: Bring Your Own Spark (with Enterprise Security) (Artem Aliev)...
 
Scylla Summit 2018: From SAP to Scylla - Tracking the Fleet at GPS Insight
Scylla Summit 2018: From SAP to Scylla - Tracking the Fleet at GPS InsightScylla Summit 2018: From SAP to Scylla - Tracking the Fleet at GPS Insight
Scylla Summit 2018: From SAP to Scylla - Tracking the Fleet at GPS Insight
 

Viewers also liked

Standing Up Your First Cluster
Standing Up Your First ClusterStanding Up Your First Cluster
Standing Up Your First ClusterDataStax Academy
 
Introduction to Data Modeling with Apache Cassandra
Introduction to Data Modeling with Apache CassandraIntroduction to Data Modeling with Apache Cassandra
Introduction to Data Modeling with Apache CassandraDataStax Academy
 
Production Ready Cassandra
Production Ready CassandraProduction Ready Cassandra
Production Ready CassandraDataStax Academy
 
Cassandra Adoption on Cisco UCS & Open stack
Cassandra Adoption on Cisco UCS & Open stackCassandra Adoption on Cisco UCS & Open stack
Cassandra Adoption on Cisco UCS & Open stackDataStax Academy
 
Introduction to DataStax Enterprise Advanced Replication with Apache Cassandra
Introduction to DataStax Enterprise Advanced Replication with Apache CassandraIntroduction to DataStax Enterprise Advanced Replication with Apache Cassandra
Introduction to DataStax Enterprise Advanced Replication with Apache CassandraDataStax Academy
 
Cassandra @ Netflix: Monitoring C* at Scale, Gossip and Tickler & Python
Cassandra @ Netflix: Monitoring C* at Scale, Gossip and Tickler & PythonCassandra @ Netflix: Monitoring C* at Scale, Gossip and Tickler & Python
Cassandra @ Netflix: Monitoring C* at Scale, Gossip and Tickler & PythonDataStax Academy
 
Data Modeling for Apache Cassandra
Data Modeling for Apache CassandraData Modeling for Apache Cassandra
Data Modeling for Apache CassandraDataStax Academy
 
Introduction to DataStax Enterprise Graph Database
Introduction to DataStax Enterprise Graph DatabaseIntroduction to DataStax Enterprise Graph Database
Introduction to DataStax Enterprise Graph DatabaseDataStax Academy
 
Cassandra 3.0 Data Modeling
Cassandra 3.0 Data ModelingCassandra 3.0 Data Modeling
Cassandra 3.0 Data ModelingDataStax Academy
 
Cassandra on Docker @ Walmart Labs
Cassandra on Docker @ Walmart LabsCassandra on Docker @ Walmart Labs
Cassandra on Docker @ Walmart LabsDataStax Academy
 
Cassandra @ Sony: The good, the bad, and the ugly part 1
Cassandra @ Sony: The good, the bad, and the ugly part 1Cassandra @ Sony: The good, the bad, and the ugly part 1
Cassandra @ Sony: The good, the bad, and the ugly part 1DataStax Academy
 
Cassandra @ Sony: The good, the bad, and the ugly part 2
Cassandra @ Sony: The good, the bad, and the ugly part 2Cassandra @ Sony: The good, the bad, and the ugly part 2
Cassandra @ Sony: The good, the bad, and the ugly part 2DataStax Academy
 
C* Summit 2013: Virtual Nodes: Rethinking Topology in Cassandra by Eric Evans
C* Summit 2013: Virtual Nodes: Rethinking Topology in Cassandra by Eric EvansC* Summit 2013: Virtual Nodes: Rethinking Topology in Cassandra by Eric Evans
C* Summit 2013: Virtual Nodes: Rethinking Topology in Cassandra by Eric EvansDataStax Academy
 
Getting Started with Graph Databases
Getting Started with Graph DatabasesGetting Started with Graph Databases
Getting Started with Graph DatabasesDataStax Academy
 
Analytics with Spark and Cassandra
Analytics with Spark and CassandraAnalytics with Spark and Cassandra
Analytics with Spark and CassandraDataStax Academy
 
Cassandra Data Maintenance with Spark
Cassandra Data Maintenance with SparkCassandra Data Maintenance with Spark
Cassandra Data Maintenance with SparkDataStax Academy
 
Client Drivers and Cassandra, the Right Way
Client Drivers and Cassandra, the Right WayClient Drivers and Cassandra, the Right Way
Client Drivers and Cassandra, the Right WayDataStax Academy
 
Cassandra: One (is the loneliest number)
Cassandra: One (is the loneliest number)Cassandra: One (is the loneliest number)
Cassandra: One (is the loneliest number)DataStax Academy
 

Viewers also liked (20)

Bad Habits Die Hard
Bad Habits Die Hard Bad Habits Die Hard
Bad Habits Die Hard
 
Standing Up Your First Cluster
Standing Up Your First ClusterStanding Up Your First Cluster
Standing Up Your First Cluster
 
Cassandra Core Concepts
Cassandra Core ConceptsCassandra Core Concepts
Cassandra Core Concepts
 
Introduction to Data Modeling with Apache Cassandra
Introduction to Data Modeling with Apache CassandraIntroduction to Data Modeling with Apache Cassandra
Introduction to Data Modeling with Apache Cassandra
 
Production Ready Cassandra
Production Ready CassandraProduction Ready Cassandra
Production Ready Cassandra
 
Cassandra Adoption on Cisco UCS & Open stack
Cassandra Adoption on Cisco UCS & Open stackCassandra Adoption on Cisco UCS & Open stack
Cassandra Adoption on Cisco UCS & Open stack
 
Introduction to DataStax Enterprise Advanced Replication with Apache Cassandra
Introduction to DataStax Enterprise Advanced Replication with Apache CassandraIntroduction to DataStax Enterprise Advanced Replication with Apache Cassandra
Introduction to DataStax Enterprise Advanced Replication with Apache Cassandra
 
Cassandra @ Netflix: Monitoring C* at Scale, Gossip and Tickler & Python
Cassandra @ Netflix: Monitoring C* at Scale, Gossip and Tickler & PythonCassandra @ Netflix: Monitoring C* at Scale, Gossip and Tickler & Python
Cassandra @ Netflix: Monitoring C* at Scale, Gossip and Tickler & Python
 
Data Modeling for Apache Cassandra
Data Modeling for Apache CassandraData Modeling for Apache Cassandra
Data Modeling for Apache Cassandra
 
Introduction to DataStax Enterprise Graph Database
Introduction to DataStax Enterprise Graph DatabaseIntroduction to DataStax Enterprise Graph Database
Introduction to DataStax Enterprise Graph Database
 
Cassandra 3.0 Data Modeling
Cassandra 3.0 Data ModelingCassandra 3.0 Data Modeling
Cassandra 3.0 Data Modeling
 
Cassandra on Docker @ Walmart Labs
Cassandra on Docker @ Walmart LabsCassandra on Docker @ Walmart Labs
Cassandra on Docker @ Walmart Labs
 
Cassandra @ Sony: The good, the bad, and the ugly part 1
Cassandra @ Sony: The good, the bad, and the ugly part 1Cassandra @ Sony: The good, the bad, and the ugly part 1
Cassandra @ Sony: The good, the bad, and the ugly part 1
 
Cassandra @ Sony: The good, the bad, and the ugly part 2
Cassandra @ Sony: The good, the bad, and the ugly part 2Cassandra @ Sony: The good, the bad, and the ugly part 2
Cassandra @ Sony: The good, the bad, and the ugly part 2
 
C* Summit 2013: Virtual Nodes: Rethinking Topology in Cassandra by Eric Evans
C* Summit 2013: Virtual Nodes: Rethinking Topology in Cassandra by Eric EvansC* Summit 2013: Virtual Nodes: Rethinking Topology in Cassandra by Eric Evans
C* Summit 2013: Virtual Nodes: Rethinking Topology in Cassandra by Eric Evans
 
Getting Started with Graph Databases
Getting Started with Graph DatabasesGetting Started with Graph Databases
Getting Started with Graph Databases
 
Analytics with Spark and Cassandra
Analytics with Spark and CassandraAnalytics with Spark and Cassandra
Analytics with Spark and Cassandra
 
Cassandra Data Maintenance with Spark
Cassandra Data Maintenance with SparkCassandra Data Maintenance with Spark
Cassandra Data Maintenance with Spark
 
Client Drivers and Cassandra, the Right Way
Client Drivers and Cassandra, the Right WayClient Drivers and Cassandra, the Right Way
Client Drivers and Cassandra, the Right Way
 
Cassandra: One (is the loneliest number)
Cassandra: One (is the loneliest number)Cassandra: One (is the loneliest number)
Cassandra: One (is the loneliest number)
 

Similar to Apache Cassandra and Drivers

Ruby Driver Explained: DataStax Webinar May 5th 2015
Ruby Driver Explained: DataStax Webinar May 5th 2015Ruby Driver Explained: DataStax Webinar May 5th 2015
Ruby Driver Explained: DataStax Webinar May 5th 2015DataStax
 
YaJug - Cassandra for Java Developers
YaJug - Cassandra for Java DevelopersYaJug - Cassandra for Java Developers
YaJug - Cassandra for Java DevelopersMichaël Figuière
 
Geneva JUG - Cassandra for Java Developers
Geneva JUG - Cassandra for Java DevelopersGeneva JUG - Cassandra for Java Developers
Geneva JUG - Cassandra for Java DevelopersMichaël Figuière
 
Paris Cassandra Meetup - Cassandra for Developers
Paris Cassandra Meetup - Cassandra for DevelopersParis Cassandra Meetup - Cassandra for Developers
Paris Cassandra Meetup - Cassandra for DevelopersMichaël Figuière
 
"Micro-frontends from A to Z. How and Why we use Micro-frontends in Namecheap...
"Micro-frontends from A to Z. How and Why we use Micro-frontends in Namecheap..."Micro-frontends from A to Z. How and Why we use Micro-frontends in Namecheap...
"Micro-frontends from A to Z. How and Why we use Micro-frontends in Namecheap...Fwdays
 
Apache Samza 1.0 - What's New, What's Next
Apache Samza 1.0 - What's New, What's NextApache Samza 1.0 - What's New, What's Next
Apache Samza 1.0 - What's New, What's NextPrateek Maheshwari
 
Fabric - Realtime stream processing framework
Fabric - Realtime stream processing frameworkFabric - Realtime stream processing framework
Fabric - Realtime stream processing frameworkShashank Gautam
 
Intro to node and mongodb 1
Intro to node and mongodb   1Intro to node and mongodb   1
Intro to node and mongodb 1Mohammad Qureshi
 
Maciej Treder ''Angular Universal - a medicine for the Angular + SEO/CDN issu...
Maciej Treder ''Angular Universal - a medicine for the Angular + SEO/CDN issu...Maciej Treder ''Angular Universal - a medicine for the Angular + SEO/CDN issu...
Maciej Treder ''Angular Universal - a medicine for the Angular + SEO/CDN issu...OdessaJS Conf
 
DataStax: 0 to App faster with Ruby and NodeJS
DataStax: 0 to App faster with Ruby and NodeJSDataStax: 0 to App faster with Ruby and NodeJS
DataStax: 0 to App faster with Ruby and NodeJSDataStax Academy
 
Advanced kapacitor
Advanced kapacitorAdvanced kapacitor
Advanced kapacitorInfluxData
 
Learn How to Use a Time Series Platform to Monitor All Aspects of Your Kubern...
Learn How to Use a Time Series Platform to Monitor All Aspects of Your Kubern...Learn How to Use a Time Series Platform to Monitor All Aspects of Your Kubern...
Learn How to Use a Time Series Platform to Monitor All Aspects of Your Kubern...DevOps.com
 
Reactive Application Using METEOR
Reactive Application Using METEORReactive Application Using METEOR
Reactive Application Using METEORNodeXperts
 
Think Async: Understanding the Complexity of Multithreading - Avi Kabizon & A...
Think Async: Understanding the Complexity of Multithreading - Avi Kabizon & A...Think Async: Understanding the Complexity of Multithreading - Avi Kabizon & A...
Think Async: Understanding the Complexity of Multithreading - Avi Kabizon & A...DroidConTLV
 
409033670-Presentation-on-online-movie-ticket-booking-system.ppt
409033670-Presentation-on-online-movie-ticket-booking-system.ppt409033670-Presentation-on-online-movie-ticket-booking-system.ppt
409033670-Presentation-on-online-movie-ticket-booking-system.pptShyam910905
 
Using Sinatra to Build REST APIs in Ruby
Using Sinatra to Build REST APIs in RubyUsing Sinatra to Build REST APIs in Ruby
Using Sinatra to Build REST APIs in RubyLaunchAny
 
Kraken
KrakenKraken
KrakenPayPal
 
Building and Scaling Node.js Applications
Building and Scaling Node.js ApplicationsBuilding and Scaling Node.js Applications
Building and Scaling Node.js ApplicationsOhad Kravchick
 
Virtual training Intro to Kapacitor
Virtual training  Intro to Kapacitor Virtual training  Intro to Kapacitor
Virtual training Intro to Kapacitor InfluxData
 

Similar to Apache Cassandra and Drivers (20)

Ruby Driver Explained: DataStax Webinar May 5th 2015
Ruby Driver Explained: DataStax Webinar May 5th 2015Ruby Driver Explained: DataStax Webinar May 5th 2015
Ruby Driver Explained: DataStax Webinar May 5th 2015
 
YaJug - Cassandra for Java Developers
YaJug - Cassandra for Java DevelopersYaJug - Cassandra for Java Developers
YaJug - Cassandra for Java Developers
 
Geneva JUG - Cassandra for Java Developers
Geneva JUG - Cassandra for Java DevelopersGeneva JUG - Cassandra for Java Developers
Geneva JUG - Cassandra for Java Developers
 
Paris Cassandra Meetup - Cassandra for Developers
Paris Cassandra Meetup - Cassandra for DevelopersParis Cassandra Meetup - Cassandra for Developers
Paris Cassandra Meetup - Cassandra for Developers
 
"Micro-frontends from A to Z. How and Why we use Micro-frontends in Namecheap...
"Micro-frontends from A to Z. How and Why we use Micro-frontends in Namecheap..."Micro-frontends from A to Z. How and Why we use Micro-frontends in Namecheap...
"Micro-frontends from A to Z. How and Why we use Micro-frontends in Namecheap...
 
Apache Samza 1.0 - What's New, What's Next
Apache Samza 1.0 - What's New, What's NextApache Samza 1.0 - What's New, What's Next
Apache Samza 1.0 - What's New, What's Next
 
Fabric - Realtime stream processing framework
Fabric - Realtime stream processing frameworkFabric - Realtime stream processing framework
Fabric - Realtime stream processing framework
 
Intro to node and mongodb 1
Intro to node and mongodb   1Intro to node and mongodb   1
Intro to node and mongodb 1
 
Maciej Treder ''Angular Universal - a medicine for the Angular + SEO/CDN issu...
Maciej Treder ''Angular Universal - a medicine for the Angular + SEO/CDN issu...Maciej Treder ''Angular Universal - a medicine for the Angular + SEO/CDN issu...
Maciej Treder ''Angular Universal - a medicine for the Angular + SEO/CDN issu...
 
DataStax: 0 to App faster with Ruby and NodeJS
DataStax: 0 to App faster with Ruby and NodeJSDataStax: 0 to App faster with Ruby and NodeJS
DataStax: 0 to App faster with Ruby and NodeJS
 
Advanced kapacitor
Advanced kapacitorAdvanced kapacitor
Advanced kapacitor
 
Learn How to Use a Time Series Platform to Monitor All Aspects of Your Kubern...
Learn How to Use a Time Series Platform to Monitor All Aspects of Your Kubern...Learn How to Use a Time Series Platform to Monitor All Aspects of Your Kubern...
Learn How to Use a Time Series Platform to Monitor All Aspects of Your Kubern...
 
Reactive Application Using METEOR
Reactive Application Using METEORReactive Application Using METEOR
Reactive Application Using METEOR
 
Think Async: Understanding the Complexity of Multithreading - Avi Kabizon & A...
Think Async: Understanding the Complexity of Multithreading - Avi Kabizon & A...Think Async: Understanding the Complexity of Multithreading - Avi Kabizon & A...
Think Async: Understanding the Complexity of Multithreading - Avi Kabizon & A...
 
409033670-Presentation-on-online-movie-ticket-booking-system.ppt
409033670-Presentation-on-online-movie-ticket-booking-system.ppt409033670-Presentation-on-online-movie-ticket-booking-system.ppt
409033670-Presentation-on-online-movie-ticket-booking-system.ppt
 
Using Sinatra to Build REST APIs in Ruby
Using Sinatra to Build REST APIs in RubyUsing Sinatra to Build REST APIs in Ruby
Using Sinatra to Build REST APIs in Ruby
 
Exploring Relay land
Exploring Relay landExploring Relay land
Exploring Relay land
 
Kraken
KrakenKraken
Kraken
 
Building and Scaling Node.js Applications
Building and Scaling Node.js ApplicationsBuilding and Scaling Node.js Applications
Building and Scaling Node.js Applications
 
Virtual training Intro to Kapacitor
Virtual training  Intro to Kapacitor Virtual training  Intro to Kapacitor
Virtual training Intro to Kapacitor
 

Recently uploaded

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
 
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...Neo4j
 
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin WoodPolkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin WoodJuan lago vázquez
 
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot TakeoffStrategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoffsammart93
 
Artificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : UncertaintyArtificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : UncertaintyKhushali Kathiriya
 
Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businesspanagenda
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)Gabriella Davis
 
🐬 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
 
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024The Digital Insurer
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...Martijn de Jong
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Scriptwesley chun
 
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost SavingRepurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost SavingEdi Saputra
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FMESafe Software
 
AWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAndrey Devyatkin
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationSafe Software
 
Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024The Digital Insurer
 
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...apidays
 
Strategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherStrategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherRemote DBA Services
 
Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...apidays
 
Deploy with confidence: VMware Cloud Foundation 5.1 on next gen Dell PowerEdg...
Deploy with confidence: VMware Cloud Foundation 5.1 on next gen Dell PowerEdg...Deploy with confidence: VMware Cloud Foundation 5.1 on next gen Dell PowerEdg...
Deploy with confidence: VMware Cloud Foundation 5.1 on next gen Dell PowerEdg...Principled Technologies
 

Recently uploaded (20)

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
 
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
 
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin WoodPolkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
 
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot TakeoffStrategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
 
Artificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : UncertaintyArtificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : Uncertainty
 
Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire business
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘
 
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Script
 
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost SavingRepurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
 
AWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of Terraform
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
 
Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024
 
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
 
Strategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherStrategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a Fresher
 
Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...
 
Deploy with confidence: VMware Cloud Foundation 5.1 on next gen Dell PowerEdg...
Deploy with confidence: VMware Cloud Foundation 5.1 on next gen Dell PowerEdg...Deploy with confidence: VMware Cloud Foundation 5.1 on next gen Dell PowerEdg...
Deploy with confidence: VMware Cloud Foundation 5.1 on next gen Dell PowerEdg...
 

Apache Cassandra and Drivers

  • 1. Apache Cassandra and Drivers Overview of Apache Cassandra and DataStax Drivers Bulat Shakirzyanov @avalanche123 Sandeep Tamhankar @stamhankar999 https://goo.gl/cBsRVv
  • 3. © 2015 DataStax, All Rights Reserved. Datacenter Datacenter Cassandra Topology 3 Node NodeNode Node Client Client Node NodeNode Node Client Client Cluster
  • 4. © 2015 DataStax, All Rights Reserved. Datacenter Datacenter Request Coordinator 4 Node NodeNode Node Client Client Node NodeCoordinator Node Client Client Coordinator node: Forwards requests to corresponding replicas
  • 5. © 2015 DataStax, All Rights Reserved. Datacenter Row Replica 5 Replica NodeNode Replica Client Client Datacenter Node Node Replica Client Client Coordinator Replica node: Stores a slice of total rows of each keyspace
  • 6. © 2015 DataStax, All Rights Reserved. Token Ring 6 12 1 2 3 4 5 6 7 8 9 10 11
  • 7. © 2015 DataStax, All Rights Reserved. Token Ring 6 -263 … (+263 - 1) Murmur3 Partitioner
  • 8. © 2015 DataStax, All Rights Reserved. Token Ring 6 Node 11…12 Node 12…1 Node 1…2 Node 2…3 Node 3…4 Node 4…5 Node 5…6 Node 6…7 Node 7…8 Node 8…9 Node 9…10 Node 10…11 -263 … (+263 - 1) Murmur3 Partitioner
  • 9. © 2015 DataStax, All Rights Reserved. Keyspaces 7 CREATE KEYSPACE default WITH replication = { 'class': 'SimpleStrategy', 'replication_factor': 3 }
  • 10. © 2015 DataStax, All Rights Reserved. C* Data Partitioning 8 Keyspace Row token(PK) = 1 RF = 3 Partitioner: Gets a token by hashing the primary key of a row
  • 11. © 2015 DataStax, All Rights Reserved. C* Replication Strategy 9 Keyspace 1 Row RF = 3 Replication strategy: Determines the first replica for the row token(PK) = 1
  • 12. © 2015 DataStax, All Rights Reserved. C* Replication Factor 10 Keyspace Row RF = 3 Replication factor: Specifies total number of replicas for each row token(PK) = 1
  • 13. © 2015 DataStax, All Rights Reserved. Coordinator Node Replica Replica Node 11 ReplicaApplication Consistency Level RF = 3, CL = Quorum
  • 14. © 2015 DataStax, All Rights Reserved. Coordinator Node Replica Replica Node 11 ReplicaApplication Consistency Level RF = 3, CL = Quorum INSERT
  • 15. © 2015 DataStax, All Rights Reserved. Coordinator Node Replica Replica Node 11 ReplicaApplication Consistency Level RF = 3, CL = Quorum INSERT
  • 16. © 2015 DataStax, All Rights Reserved. Coordinator Node Replica Replica Node 11 ReplicaApplication Consistency Level RF = 3, CL = Quorum INSERT
  • 17. © 2015 DataStax, All Rights Reserved. Coordinator Node Replica Replica Node 11 ReplicaApplication Consistency Level RF = 3, CL = Quorum INSERT
  • 18. DataStax Drivers Smart clients for Apache Cassandra
  • 19. © 2015 DataStax, All Rights Reserved. Goals of DataStax Drivers • Consistent set of features across languages • Asynchronous execution of requests • Load balancing • Fault tolerant • Address Resolution (multi-region!) • Automatic cluster discovery and reconnection • Flexible to the core • Consistent terminology • Open source 13
  • 20. © 2015 DataStax, All Rights Reserved. 14
  • 21. Asynchronous Execution IO Reactor, Request Pipelining and Future Composition
  • 22. © 2015 DataStax, All Rights Reserved. Asynchronous Core 16 Application Thread Business Logic Driver Background Thread IO Reactor
  • 23. © 2015 DataStax, All Rights Reserved. Request Pipelining 17 Client Without Request Pipelining Server Client Server With Request Pipelining 1 2 2 3 1 3 1 2 3 1 2 3
  • 24. © 2015 DataStax, All Rights Reserved. What is a Future? • Represents the result of an asynchronous operation • Returned by any *_async method in the Ruby driver • execute_async • prepare_async • Will block if asked for the true result 18
  • 25. © 2015 DataStax, All Rights Reserved. Future Composition 19 select_user = session.prepare('SELECT * FROM users WHERE id = ?') select_page = session.prepare('SELECT * FROM pages WHERE slug = ?') user_ids = [1, 2, 3, 4] futures = user_ids.map do |id| future = session.execute_async(select_user, arguments: [id]) future.then do |users| user = users.first future = session.execute_async(select_page, arguments: [user['username']]) future.then do |pages| page = pages.first User.new(user, Page.new(page)) end end end Cassandra::Future.all(futures).get
  • 26. © 2015 DataStax, All Rights Reserved. select_user = session.prepare('SELECT * FROM users WHERE id = ?') select_page = session.prepare('SELECT * FROM pages WHERE slug = ?') user_ids = [1, 2, 3, 4] futures = user_ids.map do |id| future = session.execute_async(select_user, arguments: [id]) future.then do |users| user = users.first future = session.execute_async(select_page, arguments: [user['username']]) future.then do |pages| page = pages.first User.new(user, Page.new(page)) end end end Cassandra::Future.all(futures).get Future Composition 20
  • 27. © 2015 DataStax, All Rights Reserved. select_user = session.prepare('SELECT * FROM users WHERE id = ?') select_page = session.prepare('SELECT * FROM pages WHERE slug = ?') user_ids = [1, 2, 3, 4] futures = user_ids.map do |id| future = session.execute_async(select_user, arguments: [id]) future.then do |users| user = users.first future = session.execute_async(select_page, arguments: [user['username']]) future.then do |pages| page = pages.first User.new(user, Page.new(page)) end end end Cassandra::Future.all(futures).get Future Composition 21
  • 28. © 2015 DataStax, All Rights Reserved. select_user = session.prepare('SELECT * FROM users WHERE id = ?') select_page = session.prepare('SELECT * FROM pages WHERE slug = ?') user_ids = [1, 2, 3, 4] futures = user_ids.map do |id| future = session.execute_async(select_user, arguments: [id]) future.then do |users| user = users.first future = session.execute_async(select_page, arguments: [user['username']]) future.then do |pages| page = pages.first User.new(user, Page.new(page)) end end end Cassandra::Future.all(futures).get Future Composition 22
  • 29. © 2015 DataStax, All Rights Reserved. select_user = session.prepare('SELECT * FROM users WHERE id = ?') select_page = session.prepare('SELECT * FROM pages WHERE slug = ?') user_ids = [1, 2, 3, 4] futures = user_ids.map do |id| future = session.execute_async(select_user, arguments: [id]) future.then do |users| user = users.first future = session.execute_async(select_page, arguments: [user['username']]) future.then do |pages| page = pages.first User.new(user, Page.new(page)) end end end Cassandra::Future.all(futures).get Future Composition 23
  • 30. © 2015 DataStax, All Rights Reserved. select_user = session.prepare('SELECT * FROM users WHERE id = ?') select_page = session.prepare('SELECT * FROM pages WHERE slug = ?') user_ids = [1, 2, 3, 4] futures = user_ids.map do |id| future = session.execute_async(select_user, arguments: [id]) future.then do |users| user = users.first future = session.execute_async(select_page, arguments: [user['username']]) future.then do |pages| page = pages.first User.new(user, Page.new(page)) end end end Cassandra::Future.all(futures).get Future Composition 24
  • 31. © 2015 DataStax, All Rights Reserved. Future Composition 25 [#<User @id=1 @username="avalanche123"; @page=#<Page @slug="avalanche123" ... > ... >, ... ]
  • 32. © 2015 DataStax, All Rights Reserved. Pop Quiz: How to make this faster? 26 select_user = session.prepare('SELECT * FROM users WHERE id = ?') select_page = session.prepare('SELECT * FROM pages WHERE slug = ?') user_ids = [1, 2, 3, 4] futures = user_ids.map do |id| future = session.execute_async(select_user, arguments: [id]) future.then do |users| user = users.first future = session.execute_async(select_page, arguments: [user['username']]) future.then do |pages| page = pages.first User.new(user, Page.new(page)) end end end Cassandra::Future.all(futures).get
  • 33. © 2015 DataStax, All Rights Reserved. Pop Quiz: How to make this faster? 27 user_future = session.prepare_async(‘SELECT * FROM users WHERE id = ?') page_future = session.prepare_async(‘SELECT * FROM pages WHERE slug = ?’) user_ids = [1, 2, 3, 4] futures = user_ids.map do |id| future = session.execute_async(user_future.get, arguments: [id]) future.then do |users| user = users.first future = session.execute_async(page_future.get, arguments: [user['username']]) future.then do |pages| page = pages.first User.new(user, Page.new(page)) end end end Cassandra::Future.all(futures).get
  • 34. Load Balancing Principles and Implementations
  • 35. © 2015 DataStax, All Rights Reserved. Application Driver Load Balancing 29 Application Thread Node Pool Session Pool Pool Pool Application Thread Application Thread Client Cluster Node Node Node Load Balancing Policy
  • 36. © 2015 DataStax, All Rights Reserved. Application Driver Load Balancing 29 Application Thread Node Pool Session Pool Pool Pool Application Thread Application Thread Client Cluster Node Node Node Load Balancing Policy
  • 37. © 2015 DataStax, All Rights Reserved. Application Driver Load Balancing 29 Application Thread Node Pool Session Pool Pool Pool Application Thread Application Thread Client Cluster Node Node Node Load Balancing Policy
  • 38. © 2015 DataStax, All Rights Reserved. Datacenter Datacenter DataCenter Aware Balancing 30 Node Node NodeClient Node Node Node Client Client Client Client Client Local nodes are queried first, if none are available, the request could be sent to a remote node.
  • 39. © 2015 DataStax, All Rights Reserved. Token Aware Balancing 31 Route request directly to Replicas Node Node Replica Node Client Replica Replica Uses prepared statement metadata to get the token
  • 40. © 2015 DataStax, All Rights Reserved. Other built-in policies • Round Robin Policy • ignores topology • White List Policy • only connect with certain hosts 32
  • 41. Fault Tolerance Sources of Failure and Error Handling
  • 42. © 2015 DataStax, All Rights Reserved. Fault Tolerance 34 Coordinator Node Replica Replica Replica Node Business Logic Driver Application
  • 43. © 2015 DataStax, All Rights Reserved. 35 Coordinator Node Replica Replica Replica Node Business Logic Driver Application Invalid Requests Network Timeouts Server Errors Possible Failures
  • 44. © 2015 DataStax, All Rights Reserved. Application Driver Automatic Retry of Server Errors 36 Application Thread Node Pool Session Pool Pool Pool Application Thread Application Thread Client Cluster Node Node Node Load Balancing Policy
  • 45. © 2015 DataStax, All Rights Reserved. Application Driver Automatic Retry of Server Errors 36 Application Thread Node Pool Session Pool Pool Pool Application Thread Application Thread Client Cluster Node Node Node Load Balancing Policy
  • 46. © 2015 DataStax, All Rights Reserved. Application Driver Automatic Retry of Server Errors 36 Application Thread Node Pool Session Pool Pool Pool Application Thread Application Thread Client Cluster Node Node Node Load Balancing Policy
  • 47. © 2015 DataStax, All Rights Reserved. 37 Coordinator Node Replica Replica Replica Node Business Logic Driver Application Unreachable Consistency
  • 48. © 2015 DataStax, All Rights Reserved. Coordinator Node Replica Replica Node 38 Replica Business Logic Driver Application Read / Write Timeout Error
  • 49. © 2015 DataStax, All Rights Reserved. Coordinator Node Replica Replica Node 38 Replica Business Logic Driver Application Read / Write Timeout Error
  • 50. © 2015 DataStax, All Rights Reserved. Coordinator Node Replica Replica Node 38 Replica Business Logic Driver Application Read / Write Timeout Error read / write timeout
  • 51. © 2015 DataStax, All Rights Reserved. 39 Coordinator Node Replica Replica Replica Node Business Logic Driver Application Unavailable Error
  • 52. © 2015 DataStax, All Rights Reserved. 39 Coordinator Node Replica Replica Replica Node Business Logic Driver Application Unavailable Error unavailable
  • 53. © 2015 DataStax, All Rights Reserved. 40 Error Handling
  • 55. © 2015 DataStax, All Rights Reserved. Datacenter Datacenter Multiple Addresses 42 Node NodeNode Node Client Client Node NodeNode Node Client Client Within Datacenter:
 Private IPs Across Datacenters:
 Public IPs
  • 56. © 2015 DataStax, All Rights Reserved. Application Driver Address Resolution 43 Application Thread Application Thread Application Thread Client Cluster
  • 57. © 2015 DataStax, All Rights Reserved. Application Driver Address Resolution 43 Application Thread Node Cluster Application Thread Application Thread Client Cluster Address Resolution Policy
  • 58. © 2015 DataStax, All Rights Reserved. Application Driver Address Resolution 43 Application Thread Node Cluster Application Thread Application Thread Client Cluster Node Node Node Address Resolution Policy Control Connection
  • 59. © 2015 DataStax, All Rights Reserved. Application Driver Address Resolution 43 Application Thread Node Cluster Application Thread Application Thread Client Cluster Node Node Node Address Resolution Policy Control Connection
  • 60. © 2015 DataStax, All Rights Reserved. Application Driver Address Resolution 43 Application Thread Node Pool Cluster Pool Pool Pool Application Thread Application Thread Client Cluster Node Node Node Address Resolution Policy Control Connection Session
  • 61. © 2015 DataStax, All Rights Reserved. EC2 Multi-Region Address Resolution 44
  • 62. © 2015 DataStax, All Rights Reserved. More • Request Tracing • Execution Information • which node was used, # retries for query, etc. • State Listeners • node goes down/comes up, schema changes, etc. • Result Paging • SSL and Authentication 45