SlideShare a Scribd company logo
1 of 89
Download to read offline
CASSANDRA-SF 2014 
SUCCESSFUL SOFTWARE 
DEVELOPMENT WITH 
CASSANDRA 
Nate McCall 
@zznate 
#CassandraSummit 
Co-Founder & Sr. Technical Consultant 
Licensed under a Creative Commons Attribution-NonCommercial 3.0 New Zealand License
About The Last Pickle. 
! 
Work with clients to deliver and improve 
Apache Cassandra based solutions. 
! 
Based in New Zealand & USA.
OVERVIEW
Overview: 
What makes 
a software development 
project successful?
Overview: Successful Software Development 
- it ships 
- maintainable 
- good test coverage 
- check out and build
Overview: 
Impedance mismatch: 
distributed systems 
development 
on a laptop.
GETTING STARTED: 
FOLLOW THE PATH OF LEAST 
RESISTANCE
Getting Started: 
! 
JVM-Based 
if at all Possible.
Getting Started: 
! 
Python Otherwise. 
https://github.com/datastax/python-driver
Getting Started: 
! 
C#? 
https://github.com/datastax/csharp-driver
Getting Started: 
! 
Ruby? 
https://github.com/datastax/ruby-driver
Getting Started: 
! 
ORM? 
maybe - only if it’s very simple 
more later… 
http://www.datastax.com/documentation/developer/java-driver/2.1/java-driver/reference/crudOperations.html
DATA MODELING
Data Modeling: 
! 
… a topic unto itself. 
But quickly:
Data Modeling - Quickly 
! 
• It’s Hard 
• Do research 
• #1 performance problem 
• Tip: don’t “port” your schema
DEVELOPER PRODUCTIVITY
Productivity: 
! 
use CQL
Productivity - Using CQL: 
! 
• tools support 
• easy tracing (and trace discovery) 
• documentation* 
*Maintained in-tree: 
https://github.com/apache/cassandra/blob/cassandra-1.2/doc/cql3/CQL.textile 
https://github.com/apache/cassandra/blob/cassandra-2.0/doc/cql3/CQL.textile 
https://github.com/apache/cassandra/blob/cassandra-2.1/doc/cql3/CQL.textile
Productivity: 
! 
Use the Java Driver
Productivity - Java Driver: 
! 
• Reference implementation 
• Well written, extensive coverage 
• open source 
https://github.com/datastax/java-driver/
Productivity - Java Driver: 
! 
Existing Spring Users: 
Spring Data 
Integration 
http://projects.spring.io/spring-data-cassandra/
Productivity - Java Driver: 
! 
Guice Users: 
“GuicyFig:” 
Archaius + Guice 
https://stash.safehaus.org/projects/GFIG/repos/main/browse
Productivity - Java Driver: 
! 
Configuration is Similar to 
Other DB Drivers 
(with caveats**) 
http://www.datastax.com/documentation/developer/java-driver/2.1/common/drivers/reference/clusterConfiguration_c.html
Productivity - Java Driver - Configuration: 
! 
Major Difference: 
it’s a Cluster!
Productivity - Java Driver - Configuration: 
! 
Two groups of configurations 
! 
• policies 
• connections
Productivity - Java Driver - Configuration: 
! 
Three Policy Types: 
• load balancing 
• connection 
• retry
Productivity - Java Driver - Configuration: 
! 
Connection Options: 
• protocol* 
• pooling 
• socket 
*https://github.com/apache/cassandra/blob/cassandra-2.1/doc/native_protocol_v3.spec
Productivity - Java Driver: 
! 
Embrace Asynchronicity 
(but use RxJava) 
https://github.com/ReactiveX/RxJava
Productivity - Java Driver: 
! 
A note about 
User Defined Types (UTDs)
Productivity - Java Driver - Using UDTs: 
! 
Wait. 
- serialized as blobs !!?! 
- new version already being discussed* 
- will be a painful migration path 
* https://issues.apache.org/jira/browse/CASSANDRA-7423
Productivity: 
! 
Tools: 
DataStax DevCenter 
http://www.datastax.com/what-we-offer/products-services/devcenter
Productivity: 
! 
Metrics API 
for your own code 
https://github.com/apache/cassandra/blob/cassandra-2.1/src/java/org/apache/cassandra/metrics/ColumnFamilyMetrics.java 
https://dropwizard.github.io/metrics/3.1.0/
Productivity - Instrumentation via Metrics API: 
! 
Run Riemann 
locally 
http://riemann.io/
Productivity: 
! 
Trace Frequently
Productivity - Tracing: 
! 
Trace per query 
via cqlsh 
http://www.datastax.com/documentation/cql/3.0/cql/cql_reference/tracing_r.html
cqlsh> tracing on; 
Now tracing requests. 
cqlsh> SELECT doc_version FROM data.documents_by_version 
... WHERE application_id = myapp 
... AND document_id = foo 
... AND chunk_index = 0 
... ORDER BY doc_version ASC 
... LIMIT 1; 
! 
doc_version 
------------- 
65856 
! 
! 
Tracing session: 46211ab0-2702-11e4-9bcf-8d157d448e6b
Preparing statement | 18:05:44,845 | 192.168.1.197 | 22337 
Enqueuing data request to /192.168.1.204 | 18:05:44,845 | 192.168.1.197 | 22504 
Sending message to /192.168.1.204 | 18:05:44,847 | 192.168.1.197 | 24498 
Message received from /192.168.1.197 | 18:05:44,854 | 192.168.1.204 | 872 
Executing single-partition query on documents_by_version | 18:05:44,888 | 192.168.1.204 | 35183 
Acquiring sstable references | 18:05:44,888 | 192.168.1.204 | 35459 
Merging memtable tombstones | 18:05:44,889 | 192.168.1.204 | 35675 
Key cache hit for sstable 2867 | 18:05:44,889 | 192.168.1.204 | 35792 
Seeking to partition beginning in data file | 18:05:44,889 | 192.168.1.204 | 35817 
…
Preparing statement | 18:05:44,845 | 192.168.1.197 | 22337 
Enqueuing data request to /192.168.1.204 | 18:05:44,845 | 192.168.1.197 | 22504 
Sending message to /192.168.1.204 | 18:05:44,847 | 192.168.1.197 | 24498 
Message received from /192.168.1.197 | 18:05:44,854 | 192.168.1.204 | 872 
Executing single-partition query on documents_by_version | 18:05:44,888 | 192.168.1.204 | 35183 
Acquiring sstable references | 18:05:44,888 | 192.168.1.204 | 35459 
Merging memtable tombstones | 18:05:44,889 | 192.168.1.204 | 35675 
Key cache hit for sstable 2867 | 18:05:44,889 | 192.168.1.204 | 35792 
Seeking to partition beginning in data file | 18:05:44,889 | 192.168.1.204 | 35817 
…
… 
Merging data from memtables and 8 sstables | 18:05:44,892 | 192.168.1.204 | 38605 
Read 1 live and 2667 tombstoned cells | 18:05:54,135 | 192.168.1.204 | 9282428 
Enqueuing response to /192.168.1.197 | 18:05:54,136 | 192.168.1.204 | 9283423 
Sending message to /192.168.1.197 | 18:05:54,138 | 192.168.1.204 | 9284753 
Message received from /192.168.1.204 | 18:05:54,155 | 192.168.1.197 | 9332505 
Processing response from /192.168.1.204 | 18:05:54,158 | 192.168.1.197 | 9335372 
Request complete | 18:05:54,158 | 192.168.1.197 | 9335592
… 
Merging data from memtables and 8 sstables | 18:05:44,892 | 192.168.1.204 | 38605 
Read 1 live and 2667 tombstoned cells | 18:05:54,135 | 192.168.1.204 | 9282428 
Enqueuing response to /192.168.1.197 | 18:05:54,136 | 192.168.1.204 | 9283423 
Sending message to /192.168.1.197 | 18:05:54,138 | 192.168.1.204 | 9284753 
Message received from /192.168.1.204 | 18:05:54,155 | 192.168.1.197 | 9332505 
Processing response from /192.168.1.204 | 18:05:54,158 | 192.168.1.197 | 9335372 
Request complete | 18:05:54,158 | 192.168.1.197 | 9335592 
!!?!
… 
Merging data from memtables and 8 sstables | 18:05:44,892 | 192.168.1.204 | 38605 
Read 1 live and 2667 tombstoned cells | 18:05:54,135 | 192.168.1.204 | 9282428 
Enqueuing response to /192.168.1.197 | 18:05:54,136 | 192.168.1.204 | 9283423 
Sending message to /192.168.1.197 | 18:05:54,138 | 192.168.1.204 | 9284753 
Message received from /192.168.1.204 | 18:05:54,155 | 192.168.1.197 | 9332505 
Processing response from /192.168.1.204 | 18:05:54,158 | 192.168.1.197 | 9335372 
Request complete | 18:05:54,158 | 192.168.1.197 | 9335592
Productivity - Tracing: 
! 
Enable traces 
in the driver 
http://www.datastax.com/documentation/developer/java-driver/2.0/java-driver/tracing_t.html
Productivity - Tracing: 
! 
`nodetool settraceprobability`
Productivity - Tracing: 
! 
…then make sure 
you try it again 
with a node down!
Productivity - Tracing: 
! 
Final note on tracing: 
do it sparingly
Productivity: 
! 
Logging Verbosity 
can be changed 
dynamically** 
! 
! 
** since 0.4rc1 
http://www.datastax.com/documentation/cassandra/2.0/cassandra/configuration/configLoggingLevels_r.html
Productivity: 
! 
nodetool for developers 
• cfstats 
• cfshistograms 
• proxyhistograms
Productivity - nodetool - cfstats: 
cfstats: 
per-table statistics about size 
and performance 
(single most useful command)
Productivity - nodetool - cfhistograms: 
cfhistograms: 
column count and partition 
size vs. latency distribution
Productivity - nodetool - proxyhistograms: 
proxyhistograms: 
performance of inter-cluster 
requests
Productivity: 
! 
Running Cassandra 
during development
Productivity - Running Cassandra: 
! 
Local Cassandra 
• easy to setup 
• you control it 
• but then you control it!
Productivity - Running Cassandra: 
! 
CCM 
• supports multiple versions 
• clusters and datacenters 
• up/down individual nodes 
https://github.com/pcmanus/ccm
Productivity - Running Cassandra: 
! 
Vagrant 
• isolated, controlled environment 
• configuration mgmt integration 
• same CM for production! 
http://www.vagrantup.com/
server_count = 3 
network = '192.168.2.' 
first_ip = 10 
! 
servers = [] 
seeds = [] 
cassandra_tokens = [] 
(0..server_count-1).each do |i| 
name = 'node' + (i + 1).to_s 
ip = network + (first_ip + i).to_s 
seeds << ip 
servers << {'name' => name, 
'ip' => ip, 
'initial_token' => (2**64 / server_count * i) - 2**63} 
end
server_count = 3 
network = '192.168.2.' 
first_ip = 10 
! 
servers = [] 
seeds = [] 
cassandra_tokens = [] 
(0..server_count-1).each do |i| 
name = 'node' + (i + 1).to_s 
ip = network + (first_ip + i).to_s 
seeds << ip 
servers << {'name' => name, 
'ip' => ip, 
'initial_token' => (2**64 / server_count * i) - 2**63} 
end
server_count = 3 
network = '192.168.2.' 
first_ip = 10 
! 
servers = [] 
seeds = [] 
cassandra_tokens = [] 
(0..server_count-1).each do |i| 
name = 'node' + (i + 1).to_s 
ip = network + (first_ip + i).to_s 
seeds << ip 
servers << {'name' => name, 
'ip' => ip, 
'initial_token' => (2**64 / server_count * i) - 2**63} 
end
chef.json = { 
:cassandra => {'cluster_name' => 'VerifyCluster', 
'version' => '2.0.8', 
'setup_jna' => false, 
'max_heap_size' => '512M', 
'heap_new_size' => '100M', 
'initial_token' => server['initial_token'], 
'seeds' => "192.168.2.10", 
'listen_address' => server['ip'], 
'broadcast_address' => server['ip'], 
'rpc_address' => server['ip'], 
'conconcurrent_reads' => "2", 
'concurrent_writes' => "2", 
'memtable_flush_queue_size' => "2", 
'compaction_throughput_mb_per_sec' => "8", 
'key_cache_size_in_mb' => "4", 
'key_cache_save_period' => "0", 
'native_transport_min_threads' => "2", 
'native_transport_max_threads' => "4" 
}, 
}
ENCAPSULATE ENVIRONMENTS
Environments: 
! 
Configuration Management 
is Essential
Environments: 
! 
Laptop to Production 
with NO 
Manual Modifications!
TESTING
Testing: 
Use a Naming Scheme 
! 
• *UnitTest.java: no external resources 
• *ITest.java: uses external resources 
• *PITest.java: safely parallel “ITest”
Testing: 
Tip: 
wildcards on the CLI 
are not 
a naming schema.
Testing: 
Group tests 
into 
logical units 
(“suites”)
Testing - Suites: 
Benefits of Suites: 
• share test data 
• share Cassandra instance(s) 
• build profiles
<profile> 
<id>short</id> 
<properties> 
<env>default</env> 
</properties> 
<build> 
<plugins> 
<plugin> 
<groupId>org.apache.maven.plugins</groupId> 
<artifactId>maven-surefire-plugin</artifactId> 
<version>2.16</version> 
<configuration> 
<groups>unit,short</groups> 
<useFile>false</useFile> 
<systemPropertyVariables> 
<cassandra.version>${cassandra.version}</cassandra.version> 
<ipprefix>${ipprefix}</ipprefix> 
</systemPropertyVariables> 
</configuration> 
</plugin> 
</plugins> 
</build> 
</profile>
<profile> 
<id>short</id> 
<properties> 
<env>default</env> 
</properties> 
<build> 
<plugins> 
<plugin> 
<groupId>org.apache.maven.plugins</groupId> 
<artifactId>maven-surefire-plugin</artifactId> 
<version>2.16</version> 
<configuration> 
<groups>unit,short</groups> 
<useFile>false</useFile> 
<systemPropertyVariables> 
<cassandra.version>${cassandra.version}</cassandra.version> 
<ipprefix>${ipprefix}</ipprefix> 
</systemPropertyVariables> 
</configuration> 
</plugin> 
</plugins> 
</build> 
</profile>
Testing - Suites: 
Using annotations 
for suites in code
Testing: 
! 
Use Mocks 
where possible
Testing: 
! 
Unit Integration Testing
Testing: 
Verify Assumptions: 
test failure scenarios 
explicitly
Testing - Integration: 
Runtime Integrations: 
• local 
• in-process 
• forked-process
Testing - Integration - Runtime: 
EmbeddedCassandra
Testing - Integration - Runtime: 
ProcessBuilder to 
fork Cassandra(s)
Testing - Integration - Runtime: 
CCMBridge: 
delegate to CCM 
https://github.com/datastax/java-driver/blob/2.1/driver-core/src/test/java/com/datastax/driver/core/CCMBridge.java
Testing - Integration - Runtime: 
Vagrant: 
delegate to vagrant cli
Testing - Integration: 
Best Practice: 
Jenkins should be able to 
manage your cluster
Testing - Integration - Best Practices: 
Vagrant vs. CCMBridge? 
! 
• choice of style, really 
• developer integration with CM 
• what else is in the architecture?
Testing: 
! 
Load Testing Goals 
• reproducible metrics 
• catch regressions 
• test to breakage point
Testing - Load Testing: 
! 
Stress.java 
(lot’s of changes recently)
Testing - Load Testing: 
! 
CassandraJMeter 
https://github.com/Netflix/CassJMeter
Testing - Load Testing: 
! 
Workload recording 
and playback coming soon 
https://issues.apache.org/jira/browse/CASSANDRA-6572
Testing: 
! 
Primary testing goal: 
Don’t let 
cluster behavior 
surprise you.
Summary: 
• Go slowly with bite sized chunks 
• Segment your tests and use build profiles 
• Monitor and Instrument 
• Use reference implementation drivers 
• Control your environments 
• Verify any assumptions about failures
Thanks. 
!
Nate McCall 
@zznate 
! 
Co-Founder & Sr. Technical Consultant 
www.thelastpickle.com 
#CassandraSummit

More Related Content

What's hot

How To Set Up SQL Load Balancing with HAProxy - Slides
How To Set Up SQL Load Balancing with HAProxy - SlidesHow To Set Up SQL Load Balancing with HAProxy - Slides
How To Set Up SQL Load Balancing with HAProxy - SlidesSeveralnines
 
Multi Source Replication With MySQL 5.7 @ Verisure
Multi Source Replication With MySQL 5.7 @ VerisureMulti Source Replication With MySQL 5.7 @ Verisure
Multi Source Replication With MySQL 5.7 @ VerisureKenny Gryp
 
Webinar Slides : Migrating to MySQL, MariaDB Galera and/or Percona XtraDB Clu...
Webinar Slides : Migrating to MySQL, MariaDB Galera and/or Percona XtraDB Clu...Webinar Slides : Migrating to MySQL, MariaDB Galera and/or Percona XtraDB Clu...
Webinar Slides : Migrating to MySQL, MariaDB Galera and/or Percona XtraDB Clu...Severalnines
 
Varnish http accelerator
Varnish http acceleratorVarnish http accelerator
Varnish http acceleratorno no
 
InnoDB Cluster Experience (MySQL User Camp)
InnoDB Cluster Experience (MySQL User Camp)InnoDB Cluster Experience (MySQL User Camp)
InnoDB Cluster Experience (MySQL User Camp)Mydbops
 
MySQL Multi-Source Replication for PL2016
MySQL Multi-Source Replication for PL2016MySQL Multi-Source Replication for PL2016
MySQL Multi-Source Replication for PL2016Wagner Bianchi
 
MyDUMPER : Faster logical backups and restores
MyDUMPER : Faster logical backups and restores MyDUMPER : Faster logical backups and restores
MyDUMPER : Faster logical backups and restores Mydbops
 
Highly Available MySQL/PHP Applications with mysqlnd
Highly Available MySQL/PHP Applications with mysqlndHighly Available MySQL/PHP Applications with mysqlnd
Highly Available MySQL/PHP Applications with mysqlndJervin Real
 
Using HAProxy to Scale MySQL
Using HAProxy to Scale MySQLUsing HAProxy to Scale MySQL
Using HAProxy to Scale MySQLBill Sickles
 
MySQL 5.7 innodb_enhance_partii_20160527
MySQL 5.7 innodb_enhance_partii_20160527MySQL 5.7 innodb_enhance_partii_20160527
MySQL 5.7 innodb_enhance_partii_20160527Saewoong Lee
 
MySQL Storage Engines - which do you use? TokuDB? MyRocks? InnoDB?
MySQL Storage Engines - which do you use? TokuDB? MyRocks? InnoDB?MySQL Storage Engines - which do you use? TokuDB? MyRocks? InnoDB?
MySQL Storage Engines - which do you use? TokuDB? MyRocks? InnoDB?Sveta Smirnova
 
Advanced Percona XtraDB Cluster in a nutshell... la suite
Advanced Percona XtraDB Cluster in a nutshell... la suiteAdvanced Percona XtraDB Cluster in a nutshell... la suite
Advanced Percona XtraDB Cluster in a nutshell... la suiteKenny Gryp
 
MySQL Replication Overview -- PHPTek 2016
MySQL Replication Overview -- PHPTek 2016MySQL Replication Overview -- PHPTek 2016
MySQL Replication Overview -- PHPTek 2016Dave Stokes
 
Using advanced options in MariaDB Connector/J
Using advanced options in MariaDB Connector/JUsing advanced options in MariaDB Connector/J
Using advanced options in MariaDB Connector/JMariaDB plc
 
Percona Xtrabackup Best Practices
Percona Xtrabackup Best PracticesPercona Xtrabackup Best Practices
Percona Xtrabackup Best PracticesMarcelo Altmann
 
Highly efficient backups with percona xtrabackup
Highly efficient backups with percona xtrabackupHighly efficient backups with percona xtrabackup
Highly efficient backups with percona xtrabackupNilnandan Joshi
 
DATABASE AUTOMATION with Thousands of database, monitoring and backup
DATABASE AUTOMATION with Thousands of database, monitoring and backupDATABASE AUTOMATION with Thousands of database, monitoring and backup
DATABASE AUTOMATION with Thousands of database, monitoring and backupSaewoong Lee
 
Mysql 57-upcoming-changes
Mysql 57-upcoming-changesMysql 57-upcoming-changes
Mysql 57-upcoming-changesMorgan Tocker
 

What's hot (20)

How To Set Up SQL Load Balancing with HAProxy - Slides
How To Set Up SQL Load Balancing with HAProxy - SlidesHow To Set Up SQL Load Balancing with HAProxy - Slides
How To Set Up SQL Load Balancing with HAProxy - Slides
 
Multi Source Replication With MySQL 5.7 @ Verisure
Multi Source Replication With MySQL 5.7 @ VerisureMulti Source Replication With MySQL 5.7 @ Verisure
Multi Source Replication With MySQL 5.7 @ Verisure
 
Webinar Slides : Migrating to MySQL, MariaDB Galera and/or Percona XtraDB Clu...
Webinar Slides : Migrating to MySQL, MariaDB Galera and/or Percona XtraDB Clu...Webinar Slides : Migrating to MySQL, MariaDB Galera and/or Percona XtraDB Clu...
Webinar Slides : Migrating to MySQL, MariaDB Galera and/or Percona XtraDB Clu...
 
Ansible MySQL MHA
Ansible MySQL MHAAnsible MySQL MHA
Ansible MySQL MHA
 
Varnish http accelerator
Varnish http acceleratorVarnish http accelerator
Varnish http accelerator
 
InnoDB Cluster Experience (MySQL User Camp)
InnoDB Cluster Experience (MySQL User Camp)InnoDB Cluster Experience (MySQL User Camp)
InnoDB Cluster Experience (MySQL User Camp)
 
MySQL Multi-Source Replication for PL2016
MySQL Multi-Source Replication for PL2016MySQL Multi-Source Replication for PL2016
MySQL Multi-Source Replication for PL2016
 
Varnish - PLNOG 4
Varnish - PLNOG 4Varnish - PLNOG 4
Varnish - PLNOG 4
 
MyDUMPER : Faster logical backups and restores
MyDUMPER : Faster logical backups and restores MyDUMPER : Faster logical backups and restores
MyDUMPER : Faster logical backups and restores
 
Highly Available MySQL/PHP Applications with mysqlnd
Highly Available MySQL/PHP Applications with mysqlndHighly Available MySQL/PHP Applications with mysqlnd
Highly Available MySQL/PHP Applications with mysqlnd
 
Using HAProxy to Scale MySQL
Using HAProxy to Scale MySQLUsing HAProxy to Scale MySQL
Using HAProxy to Scale MySQL
 
MySQL 5.7 innodb_enhance_partii_20160527
MySQL 5.7 innodb_enhance_partii_20160527MySQL 5.7 innodb_enhance_partii_20160527
MySQL 5.7 innodb_enhance_partii_20160527
 
MySQL Storage Engines - which do you use? TokuDB? MyRocks? InnoDB?
MySQL Storage Engines - which do you use? TokuDB? MyRocks? InnoDB?MySQL Storage Engines - which do you use? TokuDB? MyRocks? InnoDB?
MySQL Storage Engines - which do you use? TokuDB? MyRocks? InnoDB?
 
Advanced Percona XtraDB Cluster in a nutshell... la suite
Advanced Percona XtraDB Cluster in a nutshell... la suiteAdvanced Percona XtraDB Cluster in a nutshell... la suite
Advanced Percona XtraDB Cluster in a nutshell... la suite
 
MySQL Replication Overview -- PHPTek 2016
MySQL Replication Overview -- PHPTek 2016MySQL Replication Overview -- PHPTek 2016
MySQL Replication Overview -- PHPTek 2016
 
Using advanced options in MariaDB Connector/J
Using advanced options in MariaDB Connector/JUsing advanced options in MariaDB Connector/J
Using advanced options in MariaDB Connector/J
 
Percona Xtrabackup Best Practices
Percona Xtrabackup Best PracticesPercona Xtrabackup Best Practices
Percona Xtrabackup Best Practices
 
Highly efficient backups with percona xtrabackup
Highly efficient backups with percona xtrabackupHighly efficient backups with percona xtrabackup
Highly efficient backups with percona xtrabackup
 
DATABASE AUTOMATION with Thousands of database, monitoring and backup
DATABASE AUTOMATION with Thousands of database, monitoring and backupDATABASE AUTOMATION with Thousands of database, monitoring and backup
DATABASE AUTOMATION with Thousands of database, monitoring and backup
 
Mysql 57-upcoming-changes
Mysql 57-upcoming-changesMysql 57-upcoming-changes
Mysql 57-upcoming-changes
 

Viewers also liked

Boardmaker Powerpoint - My Experience
Boardmaker Powerpoint - My ExperienceBoardmaker Powerpoint - My Experience
Boardmaker Powerpoint - My Experience1JJH
 
Boardmaker song
Boardmaker songBoardmaker song
Boardmaker songstreaks
 
Boardmaker pwrpt
Boardmaker pwrptBoardmaker pwrpt
Boardmaker pwrptdonlisa
 
Boardmaker project
Boardmaker projectBoardmaker project
Boardmaker projectlizzyconroy
 
Boardmaker presentation
Boardmaker presentationBoardmaker presentation
Boardmaker presentationsarahlfeng
 
Boardmaker Presentation
Boardmaker PresentationBoardmaker Presentation
Boardmaker Presentationlindseya09
 
Literacy for All
Literacy for AllLiteracy for All
Literacy for AllPatti Porto
 
Boardmaker Studio for Literacy Support
Boardmaker Studio for Literacy SupportBoardmaker Studio for Literacy Support
Boardmaker Studio for Literacy SupportSpectronics
 
Edu 614 Boardmaker Project
Edu 614 Boardmaker ProjectEdu 614 Boardmaker Project
Edu 614 Boardmaker ProjectJessie Lorton
 
Story Board for Borreguita and the Coyote
Story Board for Borreguita and the CoyoteStory Board for Borreguita and the Coyote
Story Board for Borreguita and the CoyoteShaye
 
Boardmaker Presentation
Boardmaker PresentationBoardmaker Presentation
Boardmaker Presentationandrewhofmann
 

Viewers also liked (15)

Boardmaker Powerpoint - My Experience
Boardmaker Powerpoint - My ExperienceBoardmaker Powerpoint - My Experience
Boardmaker Powerpoint - My Experience
 
Boardmaker song
Boardmaker songBoardmaker song
Boardmaker song
 
Boardmaker pwrpt
Boardmaker pwrptBoardmaker pwrpt
Boardmaker pwrpt
 
Boardmaker project
Boardmaker projectBoardmaker project
Boardmaker project
 
Boardmaker presentation
Boardmaker presentationBoardmaker presentation
Boardmaker presentation
 
Boardmaker
BoardmakerBoardmaker
Boardmaker
 
Boardmaker Presentation
Boardmaker PresentationBoardmaker Presentation
Boardmaker Presentation
 
Literacy for All
Literacy for AllLiteracy for All
Literacy for All
 
Boardmaker Studio for Literacy Support
Boardmaker Studio for Literacy SupportBoardmaker Studio for Literacy Support
Boardmaker Studio for Literacy Support
 
Edu 614 Boardmaker Project
Edu 614 Boardmaker ProjectEdu 614 Boardmaker Project
Edu 614 Boardmaker Project
 
Story Board for Borreguita and the Coyote
Story Board for Borreguita and the CoyoteStory Board for Borreguita and the Coyote
Story Board for Borreguita and the Coyote
 
Boardmaker Presentation
Boardmaker PresentationBoardmaker Presentation
Boardmaker Presentation
 
Nym S
Nym SNym S
Nym S
 
Bodyparts 110818013605-phpapp02
Bodyparts 110818013605-phpapp02Bodyparts 110818013605-phpapp02
Bodyparts 110818013605-phpapp02
 
Occupational therapy
Occupational therapyOccupational therapy
Occupational therapy
 

Similar to Cassandra Summit 2014: Successful Software Development with Apache Cassandra

Cassandra Day Atlanta 2015: Software Development with Apache Cassandra: A Wal...
Cassandra Day Atlanta 2015: Software Development with Apache Cassandra: A Wal...Cassandra Day Atlanta 2015: Software Development with Apache Cassandra: A Wal...
Cassandra Day Atlanta 2015: Software Development with Apache Cassandra: A Wal...DataStax Academy
 
Percona XtraDB 集群文档
Percona XtraDB 集群文档Percona XtraDB 集群文档
Percona XtraDB 集群文档YUCHENG HU
 
Open stack pike-devstack-tutorial
Open stack pike-devstack-tutorialOpen stack pike-devstack-tutorial
Open stack pike-devstack-tutorialEueung Mulyana
 
How (not) to kill your MySQL infrastructure
How (not) to kill your MySQL infrastructureHow (not) to kill your MySQL infrastructure
How (not) to kill your MySQL infrastructureMiklos Szel
 
Lonestar php scalingmagento
Lonestar php scalingmagentoLonestar php scalingmagento
Lonestar php scalingmagentoMathew Beane
 
Azure VM 101 - HomeGen by CloudGen Verona - Marco Obinu
Azure VM 101 - HomeGen by CloudGen Verona - Marco ObinuAzure VM 101 - HomeGen by CloudGen Verona - Marco Obinu
Azure VM 101 - HomeGen by CloudGen Verona - Marco ObinuMarco Obinu
 
Bdc from bare metal to k8s
Bdc   from bare metal to k8sBdc   from bare metal to k8s
Bdc from bare metal to k8sChris Adkin
 
Caching and tuning fun for high scalability
Caching and tuning fun for high scalabilityCaching and tuning fun for high scalability
Caching and tuning fun for high scalabilityWim Godden
 
Provisioning Windows instances at scale on Azure, AWS and OpenStack - Adrian ...
Provisioning Windows instances at scale on Azure, AWS and OpenStack - Adrian ...Provisioning Windows instances at scale on Azure, AWS and OpenStack - Adrian ...
Provisioning Windows instances at scale on Azure, AWS and OpenStack - Adrian ...ITCamp
 
Scaling Docker Containers using Kubernetes and Azure Container Service
Scaling Docker Containers using Kubernetes and Azure Container ServiceScaling Docker Containers using Kubernetes and Azure Container Service
Scaling Docker Containers using Kubernetes and Azure Container ServiceBen Hall
 
Using the Command Line: Bash and WP-CLI
Using the Command Line: Bash and WP-CLIUsing the Command Line: Bash and WP-CLI
Using the Command Line: Bash and WP-CLIMarc Gratch
 
Nethserver
NethserverNethserver
NethserverUfjf
 
Apache Spark At Scale in the Cloud
Apache Spark At Scale in the CloudApache Spark At Scale in the Cloud
Apache Spark At Scale in the CloudRose Toomey
 
Apache Spark At Scale in the Cloud
Apache Spark At Scale in the CloudApache Spark At Scale in the Cloud
Apache Spark At Scale in the CloudDatabricks
 
MySQL Scalability and Reliability for Replicated Environment
MySQL Scalability and Reliability for Replicated EnvironmentMySQL Scalability and Reliability for Replicated Environment
MySQL Scalability and Reliability for Replicated EnvironmentJean-François Gagné
 
Routed Provider Networks on OpenStack
Routed Provider Networks on OpenStack Routed Provider Networks on OpenStack
Routed Provider Networks on OpenStack Romana Project
 
DPDK in Containers Hands-on Lab
DPDK in Containers Hands-on LabDPDK in Containers Hands-on Lab
DPDK in Containers Hands-on LabMichelle Holley
 
Openstack Summit Vancouver 2018 - Multicloud Networking
Openstack Summit Vancouver 2018 - Multicloud NetworkingOpenstack Summit Vancouver 2018 - Multicloud Networking
Openstack Summit Vancouver 2018 - Multicloud NetworkingShannon McFarland
 
Habitat talk at CodeMonsters Sofia, Bulgaria Nov 27 2018
Habitat talk at CodeMonsters Sofia, Bulgaria Nov 27 2018Habitat talk at CodeMonsters Sofia, Bulgaria Nov 27 2018
Habitat talk at CodeMonsters Sofia, Bulgaria Nov 27 2018Mandi Walls
 

Similar to Cassandra Summit 2014: Successful Software Development with Apache Cassandra (20)

Cassandra Day Atlanta 2015: Software Development with Apache Cassandra: A Wal...
Cassandra Day Atlanta 2015: Software Development with Apache Cassandra: A Wal...Cassandra Day Atlanta 2015: Software Development with Apache Cassandra: A Wal...
Cassandra Day Atlanta 2015: Software Development with Apache Cassandra: A Wal...
 
Percona XtraDB 集群文档
Percona XtraDB 集群文档Percona XtraDB 集群文档
Percona XtraDB 集群文档
 
Open stack pike-devstack-tutorial
Open stack pike-devstack-tutorialOpen stack pike-devstack-tutorial
Open stack pike-devstack-tutorial
 
Securing Hadoop @eBay
Securing Hadoop @eBaySecuring Hadoop @eBay
Securing Hadoop @eBay
 
How (not) to kill your MySQL infrastructure
How (not) to kill your MySQL infrastructureHow (not) to kill your MySQL infrastructure
How (not) to kill your MySQL infrastructure
 
Lonestar php scalingmagento
Lonestar php scalingmagentoLonestar php scalingmagento
Lonestar php scalingmagento
 
Azure VM 101 - HomeGen by CloudGen Verona - Marco Obinu
Azure VM 101 - HomeGen by CloudGen Verona - Marco ObinuAzure VM 101 - HomeGen by CloudGen Verona - Marco Obinu
Azure VM 101 - HomeGen by CloudGen Verona - Marco Obinu
 
Bdc from bare metal to k8s
Bdc   from bare metal to k8sBdc   from bare metal to k8s
Bdc from bare metal to k8s
 
Caching and tuning fun for high scalability
Caching and tuning fun for high scalabilityCaching and tuning fun for high scalability
Caching and tuning fun for high scalability
 
Provisioning Windows instances at scale on Azure, AWS and OpenStack - Adrian ...
Provisioning Windows instances at scale on Azure, AWS and OpenStack - Adrian ...Provisioning Windows instances at scale on Azure, AWS and OpenStack - Adrian ...
Provisioning Windows instances at scale on Azure, AWS and OpenStack - Adrian ...
 
Scaling Docker Containers using Kubernetes and Azure Container Service
Scaling Docker Containers using Kubernetes and Azure Container ServiceScaling Docker Containers using Kubernetes and Azure Container Service
Scaling Docker Containers using Kubernetes and Azure Container Service
 
Using the Command Line: Bash and WP-CLI
Using the Command Line: Bash and WP-CLIUsing the Command Line: Bash and WP-CLI
Using the Command Line: Bash and WP-CLI
 
Nethserver
NethserverNethserver
Nethserver
 
Apache Spark At Scale in the Cloud
Apache Spark At Scale in the CloudApache Spark At Scale in the Cloud
Apache Spark At Scale in the Cloud
 
Apache Spark At Scale in the Cloud
Apache Spark At Scale in the CloudApache Spark At Scale in the Cloud
Apache Spark At Scale in the Cloud
 
MySQL Scalability and Reliability for Replicated Environment
MySQL Scalability and Reliability for Replicated EnvironmentMySQL Scalability and Reliability for Replicated Environment
MySQL Scalability and Reliability for Replicated Environment
 
Routed Provider Networks on OpenStack
Routed Provider Networks on OpenStack Routed Provider Networks on OpenStack
Routed Provider Networks on OpenStack
 
DPDK in Containers Hands-on Lab
DPDK in Containers Hands-on LabDPDK in Containers Hands-on Lab
DPDK in Containers Hands-on Lab
 
Openstack Summit Vancouver 2018 - Multicloud Networking
Openstack Summit Vancouver 2018 - Multicloud NetworkingOpenstack Summit Vancouver 2018 - Multicloud Networking
Openstack Summit Vancouver 2018 - Multicloud Networking
 
Habitat talk at CodeMonsters Sofia, Bulgaria Nov 27 2018
Habitat talk at CodeMonsters Sofia, Bulgaria Nov 27 2018Habitat talk at CodeMonsters Sofia, Bulgaria Nov 27 2018
Habitat talk at CodeMonsters Sofia, Bulgaria Nov 27 2018
 

More from DataStax Academy

Forrester CXNYC 2017 - Delivering great real-time cx is a true craft
Forrester CXNYC 2017 - Delivering great real-time cx is a true craftForrester CXNYC 2017 - Delivering great real-time cx is a true craft
Forrester CXNYC 2017 - Delivering great real-time cx is a true craftDataStax 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
 
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 on Docker @ Walmart Labs
Cassandra on Docker @ Walmart LabsCassandra on Docker @ Walmart Labs
Cassandra on Docker @ Walmart LabsDataStax Academy
 
Cassandra 3.0 Data Modeling
Cassandra 3.0 Data ModelingCassandra 3.0 Data Modeling
Cassandra 3.0 Data ModelingDataStax 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
 
Data Modeling for Apache Cassandra
Data Modeling for Apache CassandraData Modeling for Apache Cassandra
Data Modeling for Apache CassandraDataStax Academy
 
Production Ready Cassandra
Production Ready CassandraProduction Ready Cassandra
Production Ready 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
 
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
 
Standing Up Your First Cluster
Standing Up Your First ClusterStanding Up Your First Cluster
Standing Up Your First ClusterDataStax Academy
 
Real Time Analytics with Dse
Real Time Analytics with DseReal Time Analytics with Dse
Real Time Analytics with DseDataStax 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
 
Enabling Search in your Cassandra Application with DataStax Enterprise
Enabling Search in your Cassandra Application with DataStax EnterpriseEnabling Search in your Cassandra Application with DataStax Enterprise
Enabling Search in your Cassandra Application with DataStax EnterpriseDataStax Academy
 
Advanced Data Modeling with Apache Cassandra
Advanced Data Modeling with Apache CassandraAdvanced Data Modeling with Apache Cassandra
Advanced Data Modeling with Apache CassandraDataStax Academy
 

More from DataStax Academy (20)

Forrester CXNYC 2017 - Delivering great real-time cx is a true craft
Forrester CXNYC 2017 - Delivering great real-time cx is a true craftForrester CXNYC 2017 - Delivering great real-time cx is a true craft
Forrester CXNYC 2017 - Delivering great real-time cx is a true craft
 
Introduction to DataStax Enterprise Graph Database
Introduction to DataStax Enterprise Graph DatabaseIntroduction to DataStax Enterprise Graph Database
Introduction to DataStax Enterprise Graph Database
 
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 on Docker @ Walmart Labs
Cassandra on Docker @ Walmart LabsCassandra on Docker @ Walmart Labs
Cassandra on Docker @ Walmart Labs
 
Cassandra 3.0 Data Modeling
Cassandra 3.0 Data ModelingCassandra 3.0 Data Modeling
Cassandra 3.0 Data Modeling
 
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
 
Data Modeling for Apache Cassandra
Data Modeling for Apache CassandraData Modeling for Apache Cassandra
Data Modeling for Apache Cassandra
 
Coursera Cassandra Driver
Coursera Cassandra DriverCoursera Cassandra Driver
Coursera Cassandra Driver
 
Production Ready Cassandra
Production Ready CassandraProduction Ready Cassandra
Production Ready 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
 
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
 
Standing Up Your First Cluster
Standing Up Your First ClusterStanding Up Your First Cluster
Standing Up Your First Cluster
 
Real Time Analytics with Dse
Real Time Analytics with DseReal Time Analytics with Dse
Real Time Analytics with Dse
 
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
 
Cassandra Core Concepts
Cassandra Core ConceptsCassandra Core Concepts
Cassandra Core Concepts
 
Enabling Search in your Cassandra Application with DataStax Enterprise
Enabling Search in your Cassandra Application with DataStax EnterpriseEnabling Search in your Cassandra Application with DataStax Enterprise
Enabling Search in your Cassandra Application with DataStax Enterprise
 
Bad Habits Die Hard
Bad Habits Die Hard Bad Habits Die Hard
Bad Habits Die Hard
 
Advanced Data Modeling with Apache Cassandra
Advanced Data Modeling with Apache CassandraAdvanced Data Modeling with Apache Cassandra
Advanced Data Modeling with Apache Cassandra
 
Advanced Cassandra
Advanced CassandraAdvanced Cassandra
Advanced Cassandra
 

Recently uploaded

Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Mark Simos
 
TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024Lonnie McRorey
 
Take control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteTake control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteDianaGray10
 
Streamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupStreamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupFlorian Wilhelm
 
Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Scott Keck-Warren
 
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024BookNet Canada
 
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdfHyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdfPrecisely
 
Developer Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLDeveloper Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLScyllaDB
 
H2O.ai CEO/Founder: Sri Ambati Keynote at Wells Fargo Day
H2O.ai CEO/Founder: Sri Ambati Keynote at Wells Fargo DayH2O.ai CEO/Founder: Sri Ambati Keynote at Wells Fargo Day
H2O.ai CEO/Founder: Sri Ambati Keynote at Wells Fargo DaySri Ambati
 
Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!Manik S Magar
 
WordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your BrandWordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your Brandgvaughan
 
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxMerck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxLoriGlavin3
 
How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.Curtis Poe
 
CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):comworks
 
DSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine TuningDSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine TuningLars Bell
 
Advanced Computer Architecture – An Introduction
Advanced Computer Architecture – An IntroductionAdvanced Computer Architecture – An Introduction
Advanced Computer Architecture – An IntroductionDilum Bandara
 
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage CostLeverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage CostZilliz
 
Scanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsScanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsRizwan Syed
 
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks..."LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...Fwdays
 

Recently uploaded (20)

Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
 
TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024
 
Take control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteTake control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test Suite
 
Streamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupStreamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project Setup
 
Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024
 
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
 
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdfHyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
 
Developer Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLDeveloper Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQL
 
H2O.ai CEO/Founder: Sri Ambati Keynote at Wells Fargo Day
H2O.ai CEO/Founder: Sri Ambati Keynote at Wells Fargo DayH2O.ai CEO/Founder: Sri Ambati Keynote at Wells Fargo Day
H2O.ai CEO/Founder: Sri Ambati Keynote at Wells Fargo Day
 
Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!
 
WordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your BrandWordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your Brand
 
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxMerck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
 
How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.
 
CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):
 
DSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine TuningDSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine Tuning
 
Advanced Computer Architecture – An Introduction
Advanced Computer Architecture – An IntroductionAdvanced Computer Architecture – An Introduction
Advanced Computer Architecture – An Introduction
 
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage CostLeverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
 
Scanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsScanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL Certs
 
DMCC Future of Trade Web3 - Special Edition
DMCC Future of Trade Web3 - Special EditionDMCC Future of Trade Web3 - Special Edition
DMCC Future of Trade Web3 - Special Edition
 
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks..."LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
 

Cassandra Summit 2014: Successful Software Development with Apache Cassandra

  • 1. CASSANDRA-SF 2014 SUCCESSFUL SOFTWARE DEVELOPMENT WITH CASSANDRA Nate McCall @zznate #CassandraSummit Co-Founder & Sr. Technical Consultant Licensed under a Creative Commons Attribution-NonCommercial 3.0 New Zealand License
  • 2. About The Last Pickle. ! Work with clients to deliver and improve Apache Cassandra based solutions. ! Based in New Zealand & USA.
  • 4. Overview: What makes a software development project successful?
  • 5. Overview: Successful Software Development - it ships - maintainable - good test coverage - check out and build
  • 6. Overview: Impedance mismatch: distributed systems development on a laptop.
  • 7. GETTING STARTED: FOLLOW THE PATH OF LEAST RESISTANCE
  • 8. Getting Started: ! JVM-Based if at all Possible.
  • 9. Getting Started: ! Python Otherwise. https://github.com/datastax/python-driver
  • 10. Getting Started: ! C#? https://github.com/datastax/csharp-driver
  • 11. Getting Started: ! Ruby? https://github.com/datastax/ruby-driver
  • 12. Getting Started: ! ORM? maybe - only if it’s very simple more later… http://www.datastax.com/documentation/developer/java-driver/2.1/java-driver/reference/crudOperations.html
  • 14. Data Modeling: ! … a topic unto itself. But quickly:
  • 15. Data Modeling - Quickly ! • It’s Hard • Do research • #1 performance problem • Tip: don’t “port” your schema
  • 18. Productivity - Using CQL: ! • tools support • easy tracing (and trace discovery) • documentation* *Maintained in-tree: https://github.com/apache/cassandra/blob/cassandra-1.2/doc/cql3/CQL.textile https://github.com/apache/cassandra/blob/cassandra-2.0/doc/cql3/CQL.textile https://github.com/apache/cassandra/blob/cassandra-2.1/doc/cql3/CQL.textile
  • 19. Productivity: ! Use the Java Driver
  • 20. Productivity - Java Driver: ! • Reference implementation • Well written, extensive coverage • open source https://github.com/datastax/java-driver/
  • 21. Productivity - Java Driver: ! Existing Spring Users: Spring Data Integration http://projects.spring.io/spring-data-cassandra/
  • 22. Productivity - Java Driver: ! Guice Users: “GuicyFig:” Archaius + Guice https://stash.safehaus.org/projects/GFIG/repos/main/browse
  • 23. Productivity - Java Driver: ! Configuration is Similar to Other DB Drivers (with caveats**) http://www.datastax.com/documentation/developer/java-driver/2.1/common/drivers/reference/clusterConfiguration_c.html
  • 24. Productivity - Java Driver - Configuration: ! Major Difference: it’s a Cluster!
  • 25. Productivity - Java Driver - Configuration: ! Two groups of configurations ! • policies • connections
  • 26. Productivity - Java Driver - Configuration: ! Three Policy Types: • load balancing • connection • retry
  • 27. Productivity - Java Driver - Configuration: ! Connection Options: • protocol* • pooling • socket *https://github.com/apache/cassandra/blob/cassandra-2.1/doc/native_protocol_v3.spec
  • 28. Productivity - Java Driver: ! Embrace Asynchronicity (but use RxJava) https://github.com/ReactiveX/RxJava
  • 29. Productivity - Java Driver: ! A note about User Defined Types (UTDs)
  • 30. Productivity - Java Driver - Using UDTs: ! Wait. - serialized as blobs !!?! - new version already being discussed* - will be a painful migration path * https://issues.apache.org/jira/browse/CASSANDRA-7423
  • 31. Productivity: ! Tools: DataStax DevCenter http://www.datastax.com/what-we-offer/products-services/devcenter
  • 32. Productivity: ! Metrics API for your own code https://github.com/apache/cassandra/blob/cassandra-2.1/src/java/org/apache/cassandra/metrics/ColumnFamilyMetrics.java https://dropwizard.github.io/metrics/3.1.0/
  • 33. Productivity - Instrumentation via Metrics API: ! Run Riemann locally http://riemann.io/
  • 34.
  • 35. Productivity: ! Trace Frequently
  • 36. Productivity - Tracing: ! Trace per query via cqlsh http://www.datastax.com/documentation/cql/3.0/cql/cql_reference/tracing_r.html
  • 37. cqlsh> tracing on; Now tracing requests. cqlsh> SELECT doc_version FROM data.documents_by_version ... WHERE application_id = myapp ... AND document_id = foo ... AND chunk_index = 0 ... ORDER BY doc_version ASC ... LIMIT 1; ! doc_version ------------- 65856 ! ! Tracing session: 46211ab0-2702-11e4-9bcf-8d157d448e6b
  • 38. Preparing statement | 18:05:44,845 | 192.168.1.197 | 22337 Enqueuing data request to /192.168.1.204 | 18:05:44,845 | 192.168.1.197 | 22504 Sending message to /192.168.1.204 | 18:05:44,847 | 192.168.1.197 | 24498 Message received from /192.168.1.197 | 18:05:44,854 | 192.168.1.204 | 872 Executing single-partition query on documents_by_version | 18:05:44,888 | 192.168.1.204 | 35183 Acquiring sstable references | 18:05:44,888 | 192.168.1.204 | 35459 Merging memtable tombstones | 18:05:44,889 | 192.168.1.204 | 35675 Key cache hit for sstable 2867 | 18:05:44,889 | 192.168.1.204 | 35792 Seeking to partition beginning in data file | 18:05:44,889 | 192.168.1.204 | 35817 …
  • 39. Preparing statement | 18:05:44,845 | 192.168.1.197 | 22337 Enqueuing data request to /192.168.1.204 | 18:05:44,845 | 192.168.1.197 | 22504 Sending message to /192.168.1.204 | 18:05:44,847 | 192.168.1.197 | 24498 Message received from /192.168.1.197 | 18:05:44,854 | 192.168.1.204 | 872 Executing single-partition query on documents_by_version | 18:05:44,888 | 192.168.1.204 | 35183 Acquiring sstable references | 18:05:44,888 | 192.168.1.204 | 35459 Merging memtable tombstones | 18:05:44,889 | 192.168.1.204 | 35675 Key cache hit for sstable 2867 | 18:05:44,889 | 192.168.1.204 | 35792 Seeking to partition beginning in data file | 18:05:44,889 | 192.168.1.204 | 35817 …
  • 40. … Merging data from memtables and 8 sstables | 18:05:44,892 | 192.168.1.204 | 38605 Read 1 live and 2667 tombstoned cells | 18:05:54,135 | 192.168.1.204 | 9282428 Enqueuing response to /192.168.1.197 | 18:05:54,136 | 192.168.1.204 | 9283423 Sending message to /192.168.1.197 | 18:05:54,138 | 192.168.1.204 | 9284753 Message received from /192.168.1.204 | 18:05:54,155 | 192.168.1.197 | 9332505 Processing response from /192.168.1.204 | 18:05:54,158 | 192.168.1.197 | 9335372 Request complete | 18:05:54,158 | 192.168.1.197 | 9335592
  • 41. … Merging data from memtables and 8 sstables | 18:05:44,892 | 192.168.1.204 | 38605 Read 1 live and 2667 tombstoned cells | 18:05:54,135 | 192.168.1.204 | 9282428 Enqueuing response to /192.168.1.197 | 18:05:54,136 | 192.168.1.204 | 9283423 Sending message to /192.168.1.197 | 18:05:54,138 | 192.168.1.204 | 9284753 Message received from /192.168.1.204 | 18:05:54,155 | 192.168.1.197 | 9332505 Processing response from /192.168.1.204 | 18:05:54,158 | 192.168.1.197 | 9335372 Request complete | 18:05:54,158 | 192.168.1.197 | 9335592 !!?!
  • 42. … Merging data from memtables and 8 sstables | 18:05:44,892 | 192.168.1.204 | 38605 Read 1 live and 2667 tombstoned cells | 18:05:54,135 | 192.168.1.204 | 9282428 Enqueuing response to /192.168.1.197 | 18:05:54,136 | 192.168.1.204 | 9283423 Sending message to /192.168.1.197 | 18:05:54,138 | 192.168.1.204 | 9284753 Message received from /192.168.1.204 | 18:05:54,155 | 192.168.1.197 | 9332505 Processing response from /192.168.1.204 | 18:05:54,158 | 192.168.1.197 | 9335372 Request complete | 18:05:54,158 | 192.168.1.197 | 9335592
  • 43. Productivity - Tracing: ! Enable traces in the driver http://www.datastax.com/documentation/developer/java-driver/2.0/java-driver/tracing_t.html
  • 44. Productivity - Tracing: ! `nodetool settraceprobability`
  • 45. Productivity - Tracing: ! …then make sure you try it again with a node down!
  • 46. Productivity - Tracing: ! Final note on tracing: do it sparingly
  • 47. Productivity: ! Logging Verbosity can be changed dynamically** ! ! ** since 0.4rc1 http://www.datastax.com/documentation/cassandra/2.0/cassandra/configuration/configLoggingLevels_r.html
  • 48. Productivity: ! nodetool for developers • cfstats • cfshistograms • proxyhistograms
  • 49. Productivity - nodetool - cfstats: cfstats: per-table statistics about size and performance (single most useful command)
  • 50. Productivity - nodetool - cfhistograms: cfhistograms: column count and partition size vs. latency distribution
  • 51. Productivity - nodetool - proxyhistograms: proxyhistograms: performance of inter-cluster requests
  • 52. Productivity: ! Running Cassandra during development
  • 53. Productivity - Running Cassandra: ! Local Cassandra • easy to setup • you control it • but then you control it!
  • 54. Productivity - Running Cassandra: ! CCM • supports multiple versions • clusters and datacenters • up/down individual nodes https://github.com/pcmanus/ccm
  • 55. Productivity - Running Cassandra: ! Vagrant • isolated, controlled environment • configuration mgmt integration • same CM for production! http://www.vagrantup.com/
  • 56. server_count = 3 network = '192.168.2.' first_ip = 10 ! servers = [] seeds = [] cassandra_tokens = [] (0..server_count-1).each do |i| name = 'node' + (i + 1).to_s ip = network + (first_ip + i).to_s seeds << ip servers << {'name' => name, 'ip' => ip, 'initial_token' => (2**64 / server_count * i) - 2**63} end
  • 57. server_count = 3 network = '192.168.2.' first_ip = 10 ! servers = [] seeds = [] cassandra_tokens = [] (0..server_count-1).each do |i| name = 'node' + (i + 1).to_s ip = network + (first_ip + i).to_s seeds << ip servers << {'name' => name, 'ip' => ip, 'initial_token' => (2**64 / server_count * i) - 2**63} end
  • 58. server_count = 3 network = '192.168.2.' first_ip = 10 ! servers = [] seeds = [] cassandra_tokens = [] (0..server_count-1).each do |i| name = 'node' + (i + 1).to_s ip = network + (first_ip + i).to_s seeds << ip servers << {'name' => name, 'ip' => ip, 'initial_token' => (2**64 / server_count * i) - 2**63} end
  • 59. chef.json = { :cassandra => {'cluster_name' => 'VerifyCluster', 'version' => '2.0.8', 'setup_jna' => false, 'max_heap_size' => '512M', 'heap_new_size' => '100M', 'initial_token' => server['initial_token'], 'seeds' => "192.168.2.10", 'listen_address' => server['ip'], 'broadcast_address' => server['ip'], 'rpc_address' => server['ip'], 'conconcurrent_reads' => "2", 'concurrent_writes' => "2", 'memtable_flush_queue_size' => "2", 'compaction_throughput_mb_per_sec' => "8", 'key_cache_size_in_mb' => "4", 'key_cache_save_period' => "0", 'native_transport_min_threads' => "2", 'native_transport_max_threads' => "4" }, }
  • 61. Environments: ! Configuration Management is Essential
  • 62. Environments: ! Laptop to Production with NO Manual Modifications!
  • 64. Testing: Use a Naming Scheme ! • *UnitTest.java: no external resources • *ITest.java: uses external resources • *PITest.java: safely parallel “ITest”
  • 65. Testing: Tip: wildcards on the CLI are not a naming schema.
  • 66. Testing: Group tests into logical units (“suites”)
  • 67. Testing - Suites: Benefits of Suites: • share test data • share Cassandra instance(s) • build profiles
  • 68. <profile> <id>short</id> <properties> <env>default</env> </properties> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <version>2.16</version> <configuration> <groups>unit,short</groups> <useFile>false</useFile> <systemPropertyVariables> <cassandra.version>${cassandra.version}</cassandra.version> <ipprefix>${ipprefix}</ipprefix> </systemPropertyVariables> </configuration> </plugin> </plugins> </build> </profile>
  • 69. <profile> <id>short</id> <properties> <env>default</env> </properties> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <version>2.16</version> <configuration> <groups>unit,short</groups> <useFile>false</useFile> <systemPropertyVariables> <cassandra.version>${cassandra.version}</cassandra.version> <ipprefix>${ipprefix}</ipprefix> </systemPropertyVariables> </configuration> </plugin> </plugins> </build> </profile>
  • 70. Testing - Suites: Using annotations for suites in code
  • 71.
  • 72. Testing: ! Use Mocks where possible
  • 73. Testing: ! Unit Integration Testing
  • 74. Testing: Verify Assumptions: test failure scenarios explicitly
  • 75. Testing - Integration: Runtime Integrations: • local • in-process • forked-process
  • 76. Testing - Integration - Runtime: EmbeddedCassandra
  • 77. Testing - Integration - Runtime: ProcessBuilder to fork Cassandra(s)
  • 78. Testing - Integration - Runtime: CCMBridge: delegate to CCM https://github.com/datastax/java-driver/blob/2.1/driver-core/src/test/java/com/datastax/driver/core/CCMBridge.java
  • 79. Testing - Integration - Runtime: Vagrant: delegate to vagrant cli
  • 80. Testing - Integration: Best Practice: Jenkins should be able to manage your cluster
  • 81. Testing - Integration - Best Practices: Vagrant vs. CCMBridge? ! • choice of style, really • developer integration with CM • what else is in the architecture?
  • 82. Testing: ! Load Testing Goals • reproducible metrics • catch regressions • test to breakage point
  • 83. Testing - Load Testing: ! Stress.java (lot’s of changes recently)
  • 84. Testing - Load Testing: ! CassandraJMeter https://github.com/Netflix/CassJMeter
  • 85. Testing - Load Testing: ! Workload recording and playback coming soon https://issues.apache.org/jira/browse/CASSANDRA-6572
  • 86. Testing: ! Primary testing goal: Don’t let cluster behavior surprise you.
  • 87. Summary: • Go slowly with bite sized chunks • Segment your tests and use build profiles • Monitor and Instrument • Use reference implementation drivers • Control your environments • Verify any assumptions about failures
  • 89. Nate McCall @zznate ! Co-Founder & Sr. Technical Consultant www.thelastpickle.com #CassandraSummit