SlideShare a Scribd company logo
Staying Ahead of the Curve
with Spring and Cassandra 4
2020-09-02 @ SpringOne
Alex Dutra, DataStax @alexdut
Mark Paluch, VMware @mp911de
Latest & Greatest in the Spring + Cassandra Ecosystem
What's new in...
1. Apache Cassandra™ 4.0 & DataStax Astra
2. Cassandra Driver 4.x
3. Spring Data Cassandra 3.0
4. Spring Boot 2.3
2 © 2020 Datastax, Inc. All rights reserved.
Apache Cassandra™ &
DataStax Astra
Latest & Greatest
3 © 2020 Datastax, Inc. All rights reserved.
Apache Cassandra™ 4.0 in a Nutshell
• Introducing Apache Cassandra 4.0 Beta
• Approaching GA
• First major release since 2016
• Large cross-industry effort
• Most stable Apache Cassandra version in history
© 2020 Datastax, Inc. All rights reserved.4
Apache Cassandra 4.0 Highlights
• Zero Copy Streaming
• Audit Logging
• Improved incremental repair
• Virtual tables
• Support for Java 11 and ZGC (experimental)
• Configurable ports per node
© 2020 Datastax, Inc. All rights reserved.5
Try It Out!
• 4.0-beta2 released in September 2020
• No more API changes expected
• Already stable
© 2020 Datastax, Inc. All rights reserved.6
docker run cassandra:4.0
cassandra.apache.org/download
or
DataStax Astra in a Nutshell
• Cloud-Native Cassandra as a Service
• Zero Lock-In: deploy on AWS or GCP
• REST and GraphQL endpoints
• Fully managed
• Auto-scaling
• Easy data modeling
© 2020 Datastax, Inc. All rights reserved.7
Try It Out!
• astra.datastax.com/register
• 10GB free tier!!
• Spring Boot + Spring Data + Docker example app:
github.com/DataStax-Examples/spring-data-starter
• Try it on GitPod!
© 2020 Datastax, Inc. All rights reserved.8
Cassandra Driver
Latest & Greatest
9 © 2020 Datastax, Inc. All rights reserved.
Cassandra Driver 4 in a Nutshell
• 4.0 released in 2019, latest release 4.9.0
• Major rewrite from 3.x
• Asynchronous, non-blocking engine
• Execution profiles
• Global timeouts
• Improved load balancing policy
• Improved metrics
• Improved Object Mapper
• Support for Cassandra 4 and DataStax Astra
www.datastax.com/blog/2019/03/introducing-java-driver-4
© 2020 Datastax, Inc. All rights reserved.10
Upgrading to Cassandra Driver 4
• Maven coordinates changed
• Package names changed
com.datastax.driver -> com.datastax.oss.driver
• Having trouble migrating to driver 4? We can help!
• Follow the Upgrade guide:
docs.datastax.com/en/developer/java-driver/latest/upgrade_guide
• Ask questions at community.datastax.com
• Driver mailing list:
groups.google.com/a/lists.datastax.com/g/java-driver-user
© 2020 Datastax, Inc. All rights reserved.11
New:
<dependency>
<groupId>com.datastax.oss</groupId>
<artifactId>java-driver-core</artifactId>
<version>4.8.0</version>
</dependency>
Old:
<dependency>
<groupId>com.datastax.cassandra</groupId>
<artifactId>cassandra-driver-core</artifactId>
<version>3.10.1</version>
</dependency>
Upgrading to Cassandra Driver 4
• Cluster + Session = CqlSession
© 2020 Datastax, Inc. All rights reserved.12
Cluster cluster = null;
try {
cluster = Cluster.builder()
.addContactPoints(...)
.build();
Session session = cluster.connect();
session.execute(...);
} finally {
if (cluster != null) cluster.close();
}
try (CqlSession session =
CqlSession
.builder()
.addContactPoint(...)
.build()) {
session.execute(...);
}
Old: New:
Upgrading to Cassandra Driver 4
• No more Guava!
© 2020 Datastax, Inc. All rights reserved.13
Futures.addCallback(
session.executeAsync(...), // Guava future
new FutureCallback<ResultSet>() {
public void onSuccess(ResultSet rs) {
Row row = rs.one();
process(row);
}
public void onFailure(Throwable t) {
t.printStackTrace();
}
});
session
.executeAsync(...) // Java 8 future
.thenApply(rs -> rs.one())
.whenComplete(
(row, error) -> {
if (error == null) {
process(row);
} else {
error.printStackTrace();
}
});
Old: New:
�� ��
Upgrading to Cassandra Driver 4
• Immutability by default, except for builders
© 2020 Datastax, Inc. All rights reserved.14
PreparedStatement ps = ...;
BoundStatement bs = ps.bind();
bs.setInt("k", 42);
PreparedStatement ps = ...;
BoundStatement bs = ps.bind();
bs = bs.setInt("k", 42); // bs is immutable!!
Old: New:
⚠
BoundStatementBuilder builder =
ps.boundStatementBuilder();
builder.setInt("k", 42); // OK, mutable
bs = builder.build();
Alternatively, switch to builders (new):
Upgrading to Cassandra Driver 4
• Configure your IDE to detect @CheckReturnValue!
© 2020 Datastax, Inc. All rights reserved.15
Upgrading to Cassandra Driver 4
• New asynchronous pagination API
© 2020 Datastax, Inc. All rights reserved.16
ResultSetFuture rs = session.executeAsync(...);
ListenableFuture<Void> done =
Futures.transform(rs, process(1));
AsyncFunction<ResultSet, Void> process(int page) {
return rs -> {
// process current page
int remaining = rs.getAvailableWithoutFetching();
for (Row row : rs) {
...; if (--remaining == 0) break;
}
// process next page, if any
boolean hasMorePages =
rs.getExecutionInfo().getPagingState() != null;
return hasMorePages
? Futures.transform(
rs.fetchMoreResults(), process(page + 1))
: Futures.immediateFuture(null);
};
}
��
��
��
CompletionStage<AsyncResultSet> rs =
session.executeAsync(...);
CompletionStage<Void> done =
rs.thenCompose(this::process);
CompletionStage<Void> process(AsyncResultSet rs) {
// process current page
rs.currentPage().forEach(row -> ...);
// process next page, if any
return rs.hasMorePages()
? rs.fetchNextPage().thenCompose(this::process)
: CompletableFuture.completedFuture(null);
}
Old: New:
��
��
��
Cassandra Driver 4 Highlights
• New Reactive API
© 2020 Datastax, Inc. All rights reserved.17
// ReactiveResultSet extends Publisher<ReactiveRow>
ReactiveResultSet rs = session.executeReactive("SELECT ...");
// Wrap with Reactor (or RxJava)
Flux.from(rs)
.doOnNext(System.out::println)
.blockLast(); // query execution happens here
docs.datastax.com/en/developer/java-driver/latest/manual/core/reactive
Cassandra 4 Support
• Multiple ports per node
• Contact points now must be entered with a port number
• Virtual tables
• Can be queried like normal tables
• New methods:
KeyspaceMetadata.isVirtual()
TableMetadata.isVirtual()
© 2020 Datastax, Inc. All rights reserved.18
Spring Data Cassandra 3.0
19 © 2020 Datastax, Inc. All rights reserved.
Spring Data Cassandra 3.0
• Upgraded to Cassandra driver 4 in Neumann release train (3.0)
• Embedded Objects (@Embedded(prefix = …))
• @Value support for object creation
• Customizable NamingStrategy API
© 2020 Datastax, Inc. All rights reserved.20
Upgrading to Spring Data Cassandra 3.0
• Your mileage varies depending on level of data access abstraction,
meaning:
• Repository vs. CassandraOperations usage
• Usage of CqlOperations and async CqlOperations Statement
API requires special attention
• Driver Statement objects are now immutable
• Migration guide shipped with reference documentation
• Lots of internal changes as consequence of driver design
© 2020 Datastax, Inc. All rights reserved.21
Upgrade Tasks
• Dependency Upgrades (Driver, Spring Data)
• Adapt mapped entities to
• changed DATE type (com.datastax.driver.core.LocalDate ->
java.time.LocalDate)
• Changes in @CassandraType (CassandraType.Name enum)
• forceQuote in annotations deprecated now
• Review and adapt configuration
© 2020 Datastax, Inc. All rights reserved.22
Configuration
• Recommended: Use Spring Boot
• Still using XML: cassandra:cluster and cassandra:session now
cassandra:session and cassandra:session-factory namespace
elements
• Programmatic configuration mostly remains the same (YMMV!)
© 2020 Datastax, Inc. All rights reserved.23
Execution Profiles
© 2020 Datastax, Inc. All rights reserved.24
datastax-java-driver {
profiles {
oltp {
basic.request.timeout = 100 milliseconds
basic.request.consistency = ONE
}
olap {
basic.request.timeout = 5 seconds
basic.request.consistency = QUORUM
}
}
• Associate Statement with settings
• Driver configuration referenced by Statement API objects
Execution Profiles (Code)
© 2020 Datastax, Inc. All rights reserved.25
CqlTemplate template = new CqlTemplate();
SimpleStatement simpleStatement = QueryBuilder.….build();
SimpleStatement newStatement = simpleStatement.setExecutionProfileName("olap");
template.queryForList(newStatement);
CqlTemplate olapTemplate = new CqlTemplate();
olapTemplate.setExecutionProfile("olap");
CassandraTemplate cassandraTemplate = …
InsertOptions options = InsertOptions.builder().executionProfile("oltp").build();
cassandraTemplate.insert(person, options);
Embedded Objects
© 2020 Datastax, Inc. All rights reserved.26
public class Customer {
@Id
UUID id;
@Embedded.Nullable(prefix = "billing_")
Address billing;
@Embedded.Nullable(prefix = "shipping_")
Address shipping;
static class Address {
String street;
String city;
String zip;
}
}
Embedded Objects
• Flattened when persisted
• Materialized as nested object
• Allow for namespacing through prefix
• Can be null or empty
© 2020 Datastax, Inc. All rights reserved.27
Spring Boot 2.3
28 © 2020 Datastax, Inc. All rights reserved.
Spring Boot 2.3
• Upgraded to Cassandra driver 4 in 2.3
• Configuration must be done either:
• In application.properties or application.yaml
• Under spring.data.cassandra prefix
• Or programmatically
• Changes to spring.data.cassandra properties:
• Some properties were renamed
• Contact points must now contain a port (host:port)
• Local datacenter is now required
• Except for Astra
© 2020 Datastax, Inc. All rights reserved.29
Configuration Upgrade Example
Old:
spring.data.cassandra:
cluster-name: prod1
contact-points: 127.0.0.1
port: 9042
keyspace-name: ks1
read-timeout: 10s
consistency-level: LOCAL_QUORUM
fetch-size: 1000
30 © 2020 Datastax, Inc. All rights reserved.
New:
spring.data.cassandra:
session-name: prod1
contact-points: 127.0.0.1:9042
local-datacenter: dc1
keyspace-name: ks1
request:
timeout: 10s
consistency: LOCAL_QUORUM
page-size: 1000
Upgrading Application Properties
31 © 2020 Datastax, Inc. All rights reserved.
docs.spring.io/spring-boot/docs/current/reference/html/appendix-application-properties.html
Old property New property
spring.data.cassandra.cluster-name spring.data.cassandra.session-name
N/A spring.data.cassandra.local-datacenter
spring.data.cassandra.read-timeout
spring.data.cassandra.connect-timeout
spring.data.cassandra.request.timeout
spring.data.cassandra.connection.connect-timeout
spring.data.cassandra.connection.init-query-timeout
spring.data.cassandra.consistency-level
spring.data.cassandra.serial-consistency-level
spring.data.cassandra.request.consistency
spring.data.cassandra.request.serial-consistency
spring.data.cassandra.fetch-size spring.data.cassandra.request.page-size
spring.data.cassandra.jmx-enabled N/A (driver JMX config)
Customizing the Cassandra Session
• Avoid declaring your own CqlSession bean!
• You would lose Spring Boot's auto-configuration support
• Customizers FTW!
• Callbacks that can be easily implemented by users
• Spring Boot 2.3+ customizers:
• SessionBuilderCustomizer (High-level)
• DriverConfigLoaderBuilderCustomizer (Low-level,
execution profiles)
• Declare as regular beans
© 2020 Datastax, Inc. All rights reserved.32
Customizing the Cassandra Session
• Session customization examples
© 2020 Datastax, Inc. All rights reserved.33
@Bean
public CqlSessionBuilderCustomizer sslCustomizer() {
return builder -> builder.withSslContext(…);
}
@Bean
public CqlSessionBuilderCustomizer credentialsCustomizer() {
return builder -> builder.withAuthCredentials(…);
}
@Bean
public DriverConfigLoaderBuilderCustomizer oltpProfile() {
return builder -> builder.startProfile("oltp"). … .endProfile();
}
Connecting to Astra
• Typical configuration
© 2020 Datastax, Inc. All rights reserved.34
spring.data.cassandra:
username: <astra user>
password: <astra password>
keyspace-name: <astra keyspace>
# no contact-points and no local-datacenter for Astra!
datastax.astra:
secure-connect-bundle: </path/to/secure-connect-bundle.zip>
docs.datastax.com/en/developer/java-driver/latest/manual/cloud
Connecting to Astra
• Passing the secure connect bundle: with a customizer bean
© 2020 Datastax, Inc. All rights reserved.35
@Value("${datastax.astra.secure-connect-bundle}")
private String astraBundle;
@Bean
public CqlSessionBuilderCustomizer sessionBuilderCustomizer() {
return builder ->
builder.withCloudSecureConnectBundle(Paths.get(astraBundle));
}
docs.datastax.com/en/developer/java-driver/latest/manual/cloud
Compatibility Matrix
36 © 2020 Datastax, Inc. All rights reserved.
Your driver version works with...
Cassandra Driver Spring Data Cassandra Spring Boot
3.x 2.2 and older 2.2 and older
4.x 3.0 and newer 2.3 and newer
• Can't mix versions from different lines
Thank You!
37 © 2020 Datastax, Inc. All rights reserved.
Ad

More Related Content

What's hot (20)

Apache Spark Architecture | Apache Spark Architecture Explained | Apache Spar...
Apache Spark Architecture | Apache Spark Architecture Explained | Apache Spar...Apache Spark Architecture | Apache Spark Architecture Explained | Apache Spar...
Apache Spark Architecture | Apache Spark Architecture Explained | Apache Spar...
Simplilearn
 
PySpark dataframe
PySpark dataframePySpark dataframe
PySpark dataframe
Jaemun Jung
 
Introduction to apache spark
Introduction to apache spark Introduction to apache spark
Introduction to apache spark
Aakashdata
 
Top NoSQL Data Modeling Mistakes
Top NoSQL Data Modeling MistakesTop NoSQL Data Modeling Mistakes
Top NoSQL Data Modeling Mistakes
ScyllaDB
 
Hive 3 - a new horizon
Hive 3 - a new horizonHive 3 - a new horizon
Hive 3 - a new horizon
Thejas Nair
 
The roadmap for sql server 2019
The roadmap for sql server 2019The roadmap for sql server 2019
The roadmap for sql server 2019
Javier Villegas
 
Why does my choice of storage matter with cassandra?
Why does my choice of storage matter with cassandra?Why does my choice of storage matter with cassandra?
Why does my choice of storage matter with cassandra?
Johnny Miller
 
Iceberg + Alluxio for Fast Data Analytics
Iceberg + Alluxio for Fast Data AnalyticsIceberg + Alluxio for Fast Data Analytics
Iceberg + Alluxio for Fast Data Analytics
Alluxio, Inc.
 
A Graph is a Graph is a Graph: Equivalence, Transformation, and Composition o...
A Graph is a Graph is a Graph: Equivalence, Transformation, and Composition o...A Graph is a Graph is a Graph: Equivalence, Transformation, and Composition o...
A Graph is a Graph is a Graph: Equivalence, Transformation, and Composition o...
Joshua Shinavier
 
Apache Spark overview
Apache Spark overviewApache Spark overview
Apache Spark overview
DataArt
 
Deep-Dive into Big Data ETL with ODI12c and Oracle Big Data Connectors
Deep-Dive into Big Data ETL with ODI12c and Oracle Big Data ConnectorsDeep-Dive into Big Data ETL with ODI12c and Oracle Big Data Connectors
Deep-Dive into Big Data ETL with ODI12c and Oracle Big Data Connectors
Mark Rittman
 
Apache Spark Streaming in K8s with ArgoCD & Spark Operator
Apache Spark Streaming in K8s with ArgoCD & Spark OperatorApache Spark Streaming in K8s with ArgoCD & Spark Operator
Apache Spark Streaming in K8s with ArgoCD & Spark Operator
Databricks
 
Cassandra Day NY 2014: Apache Cassandra & Python for the The New York Times ⨍...
Cassandra Day NY 2014: Apache Cassandra & Python for the The New York Times ⨍...Cassandra Day NY 2014: Apache Cassandra & Python for the The New York Times ⨍...
Cassandra Day NY 2014: Apache Cassandra & Python for the The New York Times ⨍...
DataStax Academy
 
Introduction of Big data, NoSQL & Hadoop
Introduction of Big data, NoSQL & HadoopIntroduction of Big data, NoSQL & Hadoop
Introduction of Big data, NoSQL & Hadoop
Savvycom Savvycom
 
Spark streaming
Spark streamingSpark streaming
Spark streaming
Whiteklay
 
Presto: SQL-on-anything
Presto: SQL-on-anythingPresto: SQL-on-anything
Presto: SQL-on-anything
DataWorks Summit
 
Apache Spark in Depth: Core Concepts, Architecture & Internals
Apache Spark in Depth: Core Concepts, Architecture & InternalsApache Spark in Depth: Core Concepts, Architecture & Internals
Apache Spark in Depth: Core Concepts, Architecture & Internals
Anton Kirillov
 
Nosql data models
Nosql data modelsNosql data models
Nosql data models
Viet-Trung TRAN
 
Software Profiling: Java Performance, Profiling and Flamegraphs
Software Profiling: Java Performance, Profiling and FlamegraphsSoftware Profiling: Java Performance, Profiling and Flamegraphs
Software Profiling: Java Performance, Profiling and Flamegraphs
Isuru Perera
 
PostgreSQL
PostgreSQLPostgreSQL
PostgreSQL
Reuven Lerner
 
Apache Spark Architecture | Apache Spark Architecture Explained | Apache Spar...
Apache Spark Architecture | Apache Spark Architecture Explained | Apache Spar...Apache Spark Architecture | Apache Spark Architecture Explained | Apache Spar...
Apache Spark Architecture | Apache Spark Architecture Explained | Apache Spar...
Simplilearn
 
PySpark dataframe
PySpark dataframePySpark dataframe
PySpark dataframe
Jaemun Jung
 
Introduction to apache spark
Introduction to apache spark Introduction to apache spark
Introduction to apache spark
Aakashdata
 
Top NoSQL Data Modeling Mistakes
Top NoSQL Data Modeling MistakesTop NoSQL Data Modeling Mistakes
Top NoSQL Data Modeling Mistakes
ScyllaDB
 
Hive 3 - a new horizon
Hive 3 - a new horizonHive 3 - a new horizon
Hive 3 - a new horizon
Thejas Nair
 
The roadmap for sql server 2019
The roadmap for sql server 2019The roadmap for sql server 2019
The roadmap for sql server 2019
Javier Villegas
 
Why does my choice of storage matter with cassandra?
Why does my choice of storage matter with cassandra?Why does my choice of storage matter with cassandra?
Why does my choice of storage matter with cassandra?
Johnny Miller
 
Iceberg + Alluxio for Fast Data Analytics
Iceberg + Alluxio for Fast Data AnalyticsIceberg + Alluxio for Fast Data Analytics
Iceberg + Alluxio for Fast Data Analytics
Alluxio, Inc.
 
A Graph is a Graph is a Graph: Equivalence, Transformation, and Composition o...
A Graph is a Graph is a Graph: Equivalence, Transformation, and Composition o...A Graph is a Graph is a Graph: Equivalence, Transformation, and Composition o...
A Graph is a Graph is a Graph: Equivalence, Transformation, and Composition o...
Joshua Shinavier
 
Apache Spark overview
Apache Spark overviewApache Spark overview
Apache Spark overview
DataArt
 
Deep-Dive into Big Data ETL with ODI12c and Oracle Big Data Connectors
Deep-Dive into Big Data ETL with ODI12c and Oracle Big Data ConnectorsDeep-Dive into Big Data ETL with ODI12c and Oracle Big Data Connectors
Deep-Dive into Big Data ETL with ODI12c and Oracle Big Data Connectors
Mark Rittman
 
Apache Spark Streaming in K8s with ArgoCD & Spark Operator
Apache Spark Streaming in K8s with ArgoCD & Spark OperatorApache Spark Streaming in K8s with ArgoCD & Spark Operator
Apache Spark Streaming in K8s with ArgoCD & Spark Operator
Databricks
 
Cassandra Day NY 2014: Apache Cassandra & Python for the The New York Times ⨍...
Cassandra Day NY 2014: Apache Cassandra & Python for the The New York Times ⨍...Cassandra Day NY 2014: Apache Cassandra & Python for the The New York Times ⨍...
Cassandra Day NY 2014: Apache Cassandra & Python for the The New York Times ⨍...
DataStax Academy
 
Introduction of Big data, NoSQL & Hadoop
Introduction of Big data, NoSQL & HadoopIntroduction of Big data, NoSQL & Hadoop
Introduction of Big data, NoSQL & Hadoop
Savvycom Savvycom
 
Spark streaming
Spark streamingSpark streaming
Spark streaming
Whiteklay
 
Apache Spark in Depth: Core Concepts, Architecture & Internals
Apache Spark in Depth: Core Concepts, Architecture & InternalsApache Spark in Depth: Core Concepts, Architecture & Internals
Apache Spark in Depth: Core Concepts, Architecture & Internals
Anton Kirillov
 
Software Profiling: Java Performance, Profiling and Flamegraphs
Software Profiling: Java Performance, Profiling and FlamegraphsSoftware Profiling: Java Performance, Profiling and Flamegraphs
Software Profiling: Java Performance, Profiling and Flamegraphs
Isuru Perera
 

Similar to Staying Ahead of the Curve with Spring and Cassandra 4 (SpringOne 2020) (20)

20170126 big data processing
20170126 big data processing20170126 big data processing
20170126 big data processing
Vienna Data Science Group
 
Koalas: How Well Does Koalas Work?
Koalas: How Well Does Koalas Work?Koalas: How Well Does Koalas Work?
Koalas: How Well Does Koalas Work?
Databricks
 
NYC Cassandra Day - Java Intro
NYC Cassandra Day - Java IntroNYC Cassandra Day - Java Intro
NYC Cassandra Day - Java Intro
Christopher Batey
 
Caerusone
CaerusoneCaerusone
Caerusone
tech caersusoft
 
Building a High-Performance Database with Scala, Akka, and Spark
Building a High-Performance Database with Scala, Akka, and SparkBuilding a High-Performance Database with Scala, Akka, and Spark
Building a High-Performance Database with Scala, Akka, and Spark
Evan Chan
 
WSO2 Quarterly Technical Update
WSO2 Quarterly Technical UpdateWSO2 Quarterly Technical Update
WSO2 Quarterly Technical Update
WSO2
 
Johnny Miller – Cassandra + Spark = Awesome- NoSQL matters Barcelona 2014
Johnny Miller – Cassandra + Spark = Awesome- NoSQL matters Barcelona 2014Johnny Miller – Cassandra + Spark = Awesome- NoSQL matters Barcelona 2014
Johnny Miller – Cassandra + Spark = Awesome- NoSQL matters Barcelona 2014
NoSQLmatters
 
Webinar | Better Together: Apache Cassandra and Apache Kafka
Webinar  |  Better Together: Apache Cassandra and Apache KafkaWebinar  |  Better Together: Apache Cassandra and Apache Kafka
Webinar | Better Together: Apache Cassandra and Apache Kafka
DataStax
 
20161029 py con-mysq-lv3
20161029 py con-mysq-lv320161029 py con-mysq-lv3
20161029 py con-mysq-lv3
Ivan Ma
 
Coherence RoadMap 2018
Coherence RoadMap 2018Coherence RoadMap 2018
Coherence RoadMap 2018
harvraja
 
Django deployment with PaaS
Django deployment with PaaSDjango deployment with PaaS
Django deployment with PaaS
Appsembler
 
StackMate - CloudFormation for CloudStack
StackMate - CloudFormation for CloudStackStackMate - CloudFormation for CloudStack
StackMate - CloudFormation for CloudStack
Chiradeep Vittal
 
Witsml data processing with kafka and spark streaming
Witsml data processing with kafka and spark streamingWitsml data processing with kafka and spark streaming
Witsml data processing with kafka and spark streaming
Mark Kerzner
 
Couchbase Orchestration and Scaling a Caching Infrastructure At LinkedIn.
Couchbase Orchestration and Scaling a Caching Infrastructure At LinkedIn.Couchbase Orchestration and Scaling a Caching Infrastructure At LinkedIn.
Couchbase Orchestration and Scaling a Caching Infrastructure At LinkedIn.
Issa Fattah
 
GraphConnect 2014 SF: From Zero to Graph in 120: Scale
GraphConnect 2014 SF: From Zero to Graph in 120: ScaleGraphConnect 2014 SF: From Zero to Graph in 120: Scale
GraphConnect 2014 SF: From Zero to Graph in 120: Scale
Neo4j
 
Deploying windows containers with kubernetes
Deploying windows containers with kubernetesDeploying windows containers with kubernetes
Deploying windows containers with kubernetes
Ben Hall
 
Owning time series with team apache Strata San Jose 2015
Owning time series with team apache   Strata San Jose 2015Owning time series with team apache   Strata San Jose 2015
Owning time series with team apache Strata San Jose 2015
Patrick McFadin
 
Real time Analytics with Apache Kafka and Apache Spark
Real time Analytics with Apache Kafka and Apache SparkReal time Analytics with Apache Kafka and Apache Spark
Real time Analytics with Apache Kafka and Apache Spark
Rahul Jain
 
Case Study: Using Terraform and Packer to deploy go applications to AWS
Case Study: Using Terraform and Packer to deploy go applications to AWSCase Study: Using Terraform and Packer to deploy go applications to AWS
Case Study: Using Terraform and Packer to deploy go applications to AWS
Patrick Bolduan
 
Apache Spark v3.0.0
Apache Spark v3.0.0Apache Spark v3.0.0
Apache Spark v3.0.0
Jean-Georges Perrin
 
Koalas: How Well Does Koalas Work?
Koalas: How Well Does Koalas Work?Koalas: How Well Does Koalas Work?
Koalas: How Well Does Koalas Work?
Databricks
 
NYC Cassandra Day - Java Intro
NYC Cassandra Day - Java IntroNYC Cassandra Day - Java Intro
NYC Cassandra Day - Java Intro
Christopher Batey
 
Building a High-Performance Database with Scala, Akka, and Spark
Building a High-Performance Database with Scala, Akka, and SparkBuilding a High-Performance Database with Scala, Akka, and Spark
Building a High-Performance Database with Scala, Akka, and Spark
Evan Chan
 
WSO2 Quarterly Technical Update
WSO2 Quarterly Technical UpdateWSO2 Quarterly Technical Update
WSO2 Quarterly Technical Update
WSO2
 
Johnny Miller – Cassandra + Spark = Awesome- NoSQL matters Barcelona 2014
Johnny Miller – Cassandra + Spark = Awesome- NoSQL matters Barcelona 2014Johnny Miller – Cassandra + Spark = Awesome- NoSQL matters Barcelona 2014
Johnny Miller – Cassandra + Spark = Awesome- NoSQL matters Barcelona 2014
NoSQLmatters
 
Webinar | Better Together: Apache Cassandra and Apache Kafka
Webinar  |  Better Together: Apache Cassandra and Apache KafkaWebinar  |  Better Together: Apache Cassandra and Apache Kafka
Webinar | Better Together: Apache Cassandra and Apache Kafka
DataStax
 
20161029 py con-mysq-lv3
20161029 py con-mysq-lv320161029 py con-mysq-lv3
20161029 py con-mysq-lv3
Ivan Ma
 
Coherence RoadMap 2018
Coherence RoadMap 2018Coherence RoadMap 2018
Coherence RoadMap 2018
harvraja
 
Django deployment with PaaS
Django deployment with PaaSDjango deployment with PaaS
Django deployment with PaaS
Appsembler
 
StackMate - CloudFormation for CloudStack
StackMate - CloudFormation for CloudStackStackMate - CloudFormation for CloudStack
StackMate - CloudFormation for CloudStack
Chiradeep Vittal
 
Witsml data processing with kafka and spark streaming
Witsml data processing with kafka and spark streamingWitsml data processing with kafka and spark streaming
Witsml data processing with kafka and spark streaming
Mark Kerzner
 
Couchbase Orchestration and Scaling a Caching Infrastructure At LinkedIn.
Couchbase Orchestration and Scaling a Caching Infrastructure At LinkedIn.Couchbase Orchestration and Scaling a Caching Infrastructure At LinkedIn.
Couchbase Orchestration and Scaling a Caching Infrastructure At LinkedIn.
Issa Fattah
 
GraphConnect 2014 SF: From Zero to Graph in 120: Scale
GraphConnect 2014 SF: From Zero to Graph in 120: ScaleGraphConnect 2014 SF: From Zero to Graph in 120: Scale
GraphConnect 2014 SF: From Zero to Graph in 120: Scale
Neo4j
 
Deploying windows containers with kubernetes
Deploying windows containers with kubernetesDeploying windows containers with kubernetes
Deploying windows containers with kubernetes
Ben Hall
 
Owning time series with team apache Strata San Jose 2015
Owning time series with team apache   Strata San Jose 2015Owning time series with team apache   Strata San Jose 2015
Owning time series with team apache Strata San Jose 2015
Patrick McFadin
 
Real time Analytics with Apache Kafka and Apache Spark
Real time Analytics with Apache Kafka and Apache SparkReal time Analytics with Apache Kafka and Apache Spark
Real time Analytics with Apache Kafka and Apache Spark
Rahul Jain
 
Case Study: Using Terraform and Packer to deploy go applications to AWS
Case Study: Using Terraform and Packer to deploy go applications to AWSCase Study: Using Terraform and Packer to deploy go applications to AWS
Case Study: Using Terraform and Packer to deploy go applications to AWS
Patrick Bolduan
 
Ad

Recently uploaded (20)

Big Data Analytics Quick Research Guide by Arthur Morgan
Big Data Analytics Quick Research Guide by Arthur MorganBig Data Analytics Quick Research Guide by Arthur Morgan
Big Data Analytics Quick Research Guide by Arthur Morgan
Arthur Morgan
 
Linux Professional Institute LPIC-1 Exam.pdf
Linux Professional Institute LPIC-1 Exam.pdfLinux Professional Institute LPIC-1 Exam.pdf
Linux Professional Institute LPIC-1 Exam.pdf
RHCSA Guru
 
Technology Trends in 2025: AI and Big Data Analytics
Technology Trends in 2025: AI and Big Data AnalyticsTechnology Trends in 2025: AI and Big Data Analytics
Technology Trends in 2025: AI and Big Data Analytics
InData Labs
 
Complete Guide to Advanced Logistics Management Software in Riyadh.pdf
Complete Guide to Advanced Logistics Management Software in Riyadh.pdfComplete Guide to Advanced Logistics Management Software in Riyadh.pdf
Complete Guide to Advanced Logistics Management Software in Riyadh.pdf
Software Company
 
IEDM 2024 Tutorial2_Advances in CMOS Technologies and Future Directions for C...
IEDM 2024 Tutorial2_Advances in CMOS Technologies and Future Directions for C...IEDM 2024 Tutorial2_Advances in CMOS Technologies and Future Directions for C...
IEDM 2024 Tutorial2_Advances in CMOS Technologies and Future Directions for C...
organizerofv
 
Electronic_Mail_Attacks-1-35.pdf by xploit
Electronic_Mail_Attacks-1-35.pdf by xploitElectronic_Mail_Attacks-1-35.pdf by xploit
Electronic_Mail_Attacks-1-35.pdf by xploit
niftliyevhuseyn
 
How Can I use the AI Hype in my Business Context?
How Can I use the AI Hype in my Business Context?How Can I use the AI Hype in my Business Context?
How Can I use the AI Hype in my Business Context?
Daniel Lehner
 
Build Your Own Copilot & Agents For Devs
Build Your Own Copilot & Agents For DevsBuild Your Own Copilot & Agents For Devs
Build Your Own Copilot & Agents For Devs
Brian McKeiver
 
Linux Support for SMARC: How Toradex Empowers Embedded Developers
Linux Support for SMARC: How Toradex Empowers Embedded DevelopersLinux Support for SMARC: How Toradex Empowers Embedded Developers
Linux Support for SMARC: How Toradex Empowers Embedded Developers
Toradex
 
How analogue intelligence complements AI
How analogue intelligence complements AIHow analogue intelligence complements AI
How analogue intelligence complements AI
Paul Rowe
 
#StandardsGoals for 2025: Standards & certification roundup - Tech Forum 2025
#StandardsGoals for 2025: Standards & certification roundup - Tech Forum 2025#StandardsGoals for 2025: Standards & certification roundup - Tech Forum 2025
#StandardsGoals for 2025: Standards & certification roundup - Tech Forum 2025
BookNet Canada
 
AI EngineHost Review: Revolutionary USA Datacenter-Based Hosting with NVIDIA ...
AI EngineHost Review: Revolutionary USA Datacenter-Based Hosting with NVIDIA ...AI EngineHost Review: Revolutionary USA Datacenter-Based Hosting with NVIDIA ...
AI EngineHost Review: Revolutionary USA Datacenter-Based Hosting with NVIDIA ...
SOFTTECHHUB
 
Role of Data Annotation Services in AI-Powered Manufacturing
Role of Data Annotation Services in AI-Powered ManufacturingRole of Data Annotation Services in AI-Powered Manufacturing
Role of Data Annotation Services in AI-Powered Manufacturing
Andrew Leo
 
What is Model Context Protocol(MCP) - The new technology for communication bw...
What is Model Context Protocol(MCP) - The new technology for communication bw...What is Model Context Protocol(MCP) - The new technology for communication bw...
What is Model Context Protocol(MCP) - The new technology for communication bw...
Vishnu Singh Chundawat
 
AI and Data Privacy in 2025: Global Trends
AI and Data Privacy in 2025: Global TrendsAI and Data Privacy in 2025: Global Trends
AI and Data Privacy in 2025: Global Trends
InData Labs
 
HCL Nomad Web – Best Practices und Verwaltung von Multiuser-Umgebungen
HCL Nomad Web – Best Practices und Verwaltung von Multiuser-UmgebungenHCL Nomad Web – Best Practices und Verwaltung von Multiuser-Umgebungen
HCL Nomad Web – Best Practices und Verwaltung von Multiuser-Umgebungen
panagenda
 
Into The Box Conference Keynote Day 1 (ITB2025)
Into The Box Conference Keynote Day 1 (ITB2025)Into The Box Conference Keynote Day 1 (ITB2025)
Into The Box Conference Keynote Day 1 (ITB2025)
Ortus Solutions, Corp
 
Rusty Waters: Elevating Lakehouses Beyond Spark
Rusty Waters: Elevating Lakehouses Beyond SparkRusty Waters: Elevating Lakehouses Beyond Spark
Rusty Waters: Elevating Lakehouses Beyond Spark
carlyakerly1
 
2025-05-Q4-2024-Investor-Presentation.pptx
2025-05-Q4-2024-Investor-Presentation.pptx2025-05-Q4-2024-Investor-Presentation.pptx
2025-05-Q4-2024-Investor-Presentation.pptx
Samuele Fogagnolo
 
Heap, Types of Heap, Insertion and Deletion
Heap, Types of Heap, Insertion and DeletionHeap, Types of Heap, Insertion and Deletion
Heap, Types of Heap, Insertion and Deletion
Jaydeep Kale
 
Big Data Analytics Quick Research Guide by Arthur Morgan
Big Data Analytics Quick Research Guide by Arthur MorganBig Data Analytics Quick Research Guide by Arthur Morgan
Big Data Analytics Quick Research Guide by Arthur Morgan
Arthur Morgan
 
Linux Professional Institute LPIC-1 Exam.pdf
Linux Professional Institute LPIC-1 Exam.pdfLinux Professional Institute LPIC-1 Exam.pdf
Linux Professional Institute LPIC-1 Exam.pdf
RHCSA Guru
 
Technology Trends in 2025: AI and Big Data Analytics
Technology Trends in 2025: AI and Big Data AnalyticsTechnology Trends in 2025: AI and Big Data Analytics
Technology Trends in 2025: AI and Big Data Analytics
InData Labs
 
Complete Guide to Advanced Logistics Management Software in Riyadh.pdf
Complete Guide to Advanced Logistics Management Software in Riyadh.pdfComplete Guide to Advanced Logistics Management Software in Riyadh.pdf
Complete Guide to Advanced Logistics Management Software in Riyadh.pdf
Software Company
 
IEDM 2024 Tutorial2_Advances in CMOS Technologies and Future Directions for C...
IEDM 2024 Tutorial2_Advances in CMOS Technologies and Future Directions for C...IEDM 2024 Tutorial2_Advances in CMOS Technologies and Future Directions for C...
IEDM 2024 Tutorial2_Advances in CMOS Technologies and Future Directions for C...
organizerofv
 
Electronic_Mail_Attacks-1-35.pdf by xploit
Electronic_Mail_Attacks-1-35.pdf by xploitElectronic_Mail_Attacks-1-35.pdf by xploit
Electronic_Mail_Attacks-1-35.pdf by xploit
niftliyevhuseyn
 
How Can I use the AI Hype in my Business Context?
How Can I use the AI Hype in my Business Context?How Can I use the AI Hype in my Business Context?
How Can I use the AI Hype in my Business Context?
Daniel Lehner
 
Build Your Own Copilot & Agents For Devs
Build Your Own Copilot & Agents For DevsBuild Your Own Copilot & Agents For Devs
Build Your Own Copilot & Agents For Devs
Brian McKeiver
 
Linux Support for SMARC: How Toradex Empowers Embedded Developers
Linux Support for SMARC: How Toradex Empowers Embedded DevelopersLinux Support for SMARC: How Toradex Empowers Embedded Developers
Linux Support for SMARC: How Toradex Empowers Embedded Developers
Toradex
 
How analogue intelligence complements AI
How analogue intelligence complements AIHow analogue intelligence complements AI
How analogue intelligence complements AI
Paul Rowe
 
#StandardsGoals for 2025: Standards & certification roundup - Tech Forum 2025
#StandardsGoals for 2025: Standards & certification roundup - Tech Forum 2025#StandardsGoals for 2025: Standards & certification roundup - Tech Forum 2025
#StandardsGoals for 2025: Standards & certification roundup - Tech Forum 2025
BookNet Canada
 
AI EngineHost Review: Revolutionary USA Datacenter-Based Hosting with NVIDIA ...
AI EngineHost Review: Revolutionary USA Datacenter-Based Hosting with NVIDIA ...AI EngineHost Review: Revolutionary USA Datacenter-Based Hosting with NVIDIA ...
AI EngineHost Review: Revolutionary USA Datacenter-Based Hosting with NVIDIA ...
SOFTTECHHUB
 
Role of Data Annotation Services in AI-Powered Manufacturing
Role of Data Annotation Services in AI-Powered ManufacturingRole of Data Annotation Services in AI-Powered Manufacturing
Role of Data Annotation Services in AI-Powered Manufacturing
Andrew Leo
 
What is Model Context Protocol(MCP) - The new technology for communication bw...
What is Model Context Protocol(MCP) - The new technology for communication bw...What is Model Context Protocol(MCP) - The new technology for communication bw...
What is Model Context Protocol(MCP) - The new technology for communication bw...
Vishnu Singh Chundawat
 
AI and Data Privacy in 2025: Global Trends
AI and Data Privacy in 2025: Global TrendsAI and Data Privacy in 2025: Global Trends
AI and Data Privacy in 2025: Global Trends
InData Labs
 
HCL Nomad Web – Best Practices und Verwaltung von Multiuser-Umgebungen
HCL Nomad Web – Best Practices und Verwaltung von Multiuser-UmgebungenHCL Nomad Web – Best Practices und Verwaltung von Multiuser-Umgebungen
HCL Nomad Web – Best Practices und Verwaltung von Multiuser-Umgebungen
panagenda
 
Into The Box Conference Keynote Day 1 (ITB2025)
Into The Box Conference Keynote Day 1 (ITB2025)Into The Box Conference Keynote Day 1 (ITB2025)
Into The Box Conference Keynote Day 1 (ITB2025)
Ortus Solutions, Corp
 
Rusty Waters: Elevating Lakehouses Beyond Spark
Rusty Waters: Elevating Lakehouses Beyond SparkRusty Waters: Elevating Lakehouses Beyond Spark
Rusty Waters: Elevating Lakehouses Beyond Spark
carlyakerly1
 
2025-05-Q4-2024-Investor-Presentation.pptx
2025-05-Q4-2024-Investor-Presentation.pptx2025-05-Q4-2024-Investor-Presentation.pptx
2025-05-Q4-2024-Investor-Presentation.pptx
Samuele Fogagnolo
 
Heap, Types of Heap, Insertion and Deletion
Heap, Types of Heap, Insertion and DeletionHeap, Types of Heap, Insertion and Deletion
Heap, Types of Heap, Insertion and Deletion
Jaydeep Kale
 
Ad

Staying Ahead of the Curve with Spring and Cassandra 4 (SpringOne 2020)

  • 1. Staying Ahead of the Curve with Spring and Cassandra 4 2020-09-02 @ SpringOne Alex Dutra, DataStax @alexdut Mark Paluch, VMware @mp911de Latest & Greatest in the Spring + Cassandra Ecosystem
  • 2. What's new in... 1. Apache Cassandra™ 4.0 & DataStax Astra 2. Cassandra Driver 4.x 3. Spring Data Cassandra 3.0 4. Spring Boot 2.3 2 © 2020 Datastax, Inc. All rights reserved.
  • 3. Apache Cassandra™ & DataStax Astra Latest & Greatest 3 © 2020 Datastax, Inc. All rights reserved.
  • 4. Apache Cassandra™ 4.0 in a Nutshell • Introducing Apache Cassandra 4.0 Beta • Approaching GA • First major release since 2016 • Large cross-industry effort • Most stable Apache Cassandra version in history © 2020 Datastax, Inc. All rights reserved.4
  • 5. Apache Cassandra 4.0 Highlights • Zero Copy Streaming • Audit Logging • Improved incremental repair • Virtual tables • Support for Java 11 and ZGC (experimental) • Configurable ports per node © 2020 Datastax, Inc. All rights reserved.5
  • 6. Try It Out! • 4.0-beta2 released in September 2020 • No more API changes expected • Already stable © 2020 Datastax, Inc. All rights reserved.6 docker run cassandra:4.0 cassandra.apache.org/download or
  • 7. DataStax Astra in a Nutshell • Cloud-Native Cassandra as a Service • Zero Lock-In: deploy on AWS or GCP • REST and GraphQL endpoints • Fully managed • Auto-scaling • Easy data modeling © 2020 Datastax, Inc. All rights reserved.7
  • 8. Try It Out! • astra.datastax.com/register • 10GB free tier!! • Spring Boot + Spring Data + Docker example app: github.com/DataStax-Examples/spring-data-starter • Try it on GitPod! © 2020 Datastax, Inc. All rights reserved.8
  • 9. Cassandra Driver Latest & Greatest 9 © 2020 Datastax, Inc. All rights reserved.
  • 10. Cassandra Driver 4 in a Nutshell • 4.0 released in 2019, latest release 4.9.0 • Major rewrite from 3.x • Asynchronous, non-blocking engine • Execution profiles • Global timeouts • Improved load balancing policy • Improved metrics • Improved Object Mapper • Support for Cassandra 4 and DataStax Astra www.datastax.com/blog/2019/03/introducing-java-driver-4 © 2020 Datastax, Inc. All rights reserved.10
  • 11. Upgrading to Cassandra Driver 4 • Maven coordinates changed • Package names changed com.datastax.driver -> com.datastax.oss.driver • Having trouble migrating to driver 4? We can help! • Follow the Upgrade guide: docs.datastax.com/en/developer/java-driver/latest/upgrade_guide • Ask questions at community.datastax.com • Driver mailing list: groups.google.com/a/lists.datastax.com/g/java-driver-user © 2020 Datastax, Inc. All rights reserved.11 New: <dependency> <groupId>com.datastax.oss</groupId> <artifactId>java-driver-core</artifactId> <version>4.8.0</version> </dependency> Old: <dependency> <groupId>com.datastax.cassandra</groupId> <artifactId>cassandra-driver-core</artifactId> <version>3.10.1</version> </dependency>
  • 12. Upgrading to Cassandra Driver 4 • Cluster + Session = CqlSession © 2020 Datastax, Inc. All rights reserved.12 Cluster cluster = null; try { cluster = Cluster.builder() .addContactPoints(...) .build(); Session session = cluster.connect(); session.execute(...); } finally { if (cluster != null) cluster.close(); } try (CqlSession session = CqlSession .builder() .addContactPoint(...) .build()) { session.execute(...); } Old: New:
  • 13. Upgrading to Cassandra Driver 4 • No more Guava! © 2020 Datastax, Inc. All rights reserved.13 Futures.addCallback( session.executeAsync(...), // Guava future new FutureCallback<ResultSet>() { public void onSuccess(ResultSet rs) { Row row = rs.one(); process(row); } public void onFailure(Throwable t) { t.printStackTrace(); } }); session .executeAsync(...) // Java 8 future .thenApply(rs -> rs.one()) .whenComplete( (row, error) -> { if (error == null) { process(row); } else { error.printStackTrace(); } }); Old: New: �� ��
  • 14. Upgrading to Cassandra Driver 4 • Immutability by default, except for builders © 2020 Datastax, Inc. All rights reserved.14 PreparedStatement ps = ...; BoundStatement bs = ps.bind(); bs.setInt("k", 42); PreparedStatement ps = ...; BoundStatement bs = ps.bind(); bs = bs.setInt("k", 42); // bs is immutable!! Old: New: ⚠ BoundStatementBuilder builder = ps.boundStatementBuilder(); builder.setInt("k", 42); // OK, mutable bs = builder.build(); Alternatively, switch to builders (new):
  • 15. Upgrading to Cassandra Driver 4 • Configure your IDE to detect @CheckReturnValue! © 2020 Datastax, Inc. All rights reserved.15
  • 16. Upgrading to Cassandra Driver 4 • New asynchronous pagination API © 2020 Datastax, Inc. All rights reserved.16 ResultSetFuture rs = session.executeAsync(...); ListenableFuture<Void> done = Futures.transform(rs, process(1)); AsyncFunction<ResultSet, Void> process(int page) { return rs -> { // process current page int remaining = rs.getAvailableWithoutFetching(); for (Row row : rs) { ...; if (--remaining == 0) break; } // process next page, if any boolean hasMorePages = rs.getExecutionInfo().getPagingState() != null; return hasMorePages ? Futures.transform( rs.fetchMoreResults(), process(page + 1)) : Futures.immediateFuture(null); }; } �� �� �� CompletionStage<AsyncResultSet> rs = session.executeAsync(...); CompletionStage<Void> done = rs.thenCompose(this::process); CompletionStage<Void> process(AsyncResultSet rs) { // process current page rs.currentPage().forEach(row -> ...); // process next page, if any return rs.hasMorePages() ? rs.fetchNextPage().thenCompose(this::process) : CompletableFuture.completedFuture(null); } Old: New: �� �� ��
  • 17. Cassandra Driver 4 Highlights • New Reactive API © 2020 Datastax, Inc. All rights reserved.17 // ReactiveResultSet extends Publisher<ReactiveRow> ReactiveResultSet rs = session.executeReactive("SELECT ..."); // Wrap with Reactor (or RxJava) Flux.from(rs) .doOnNext(System.out::println) .blockLast(); // query execution happens here docs.datastax.com/en/developer/java-driver/latest/manual/core/reactive
  • 18. Cassandra 4 Support • Multiple ports per node • Contact points now must be entered with a port number • Virtual tables • Can be queried like normal tables • New methods: KeyspaceMetadata.isVirtual() TableMetadata.isVirtual() © 2020 Datastax, Inc. All rights reserved.18
  • 19. Spring Data Cassandra 3.0 19 © 2020 Datastax, Inc. All rights reserved.
  • 20. Spring Data Cassandra 3.0 • Upgraded to Cassandra driver 4 in Neumann release train (3.0) • Embedded Objects (@Embedded(prefix = …)) • @Value support for object creation • Customizable NamingStrategy API © 2020 Datastax, Inc. All rights reserved.20
  • 21. Upgrading to Spring Data Cassandra 3.0 • Your mileage varies depending on level of data access abstraction, meaning: • Repository vs. CassandraOperations usage • Usage of CqlOperations and async CqlOperations Statement API requires special attention • Driver Statement objects are now immutable • Migration guide shipped with reference documentation • Lots of internal changes as consequence of driver design © 2020 Datastax, Inc. All rights reserved.21
  • 22. Upgrade Tasks • Dependency Upgrades (Driver, Spring Data) • Adapt mapped entities to • changed DATE type (com.datastax.driver.core.LocalDate -> java.time.LocalDate) • Changes in @CassandraType (CassandraType.Name enum) • forceQuote in annotations deprecated now • Review and adapt configuration © 2020 Datastax, Inc. All rights reserved.22
  • 23. Configuration • Recommended: Use Spring Boot • Still using XML: cassandra:cluster and cassandra:session now cassandra:session and cassandra:session-factory namespace elements • Programmatic configuration mostly remains the same (YMMV!) © 2020 Datastax, Inc. All rights reserved.23
  • 24. Execution Profiles © 2020 Datastax, Inc. All rights reserved.24 datastax-java-driver { profiles { oltp { basic.request.timeout = 100 milliseconds basic.request.consistency = ONE } olap { basic.request.timeout = 5 seconds basic.request.consistency = QUORUM } } • Associate Statement with settings • Driver configuration referenced by Statement API objects
  • 25. Execution Profiles (Code) © 2020 Datastax, Inc. All rights reserved.25 CqlTemplate template = new CqlTemplate(); SimpleStatement simpleStatement = QueryBuilder.….build(); SimpleStatement newStatement = simpleStatement.setExecutionProfileName("olap"); template.queryForList(newStatement); CqlTemplate olapTemplate = new CqlTemplate(); olapTemplate.setExecutionProfile("olap"); CassandraTemplate cassandraTemplate = … InsertOptions options = InsertOptions.builder().executionProfile("oltp").build(); cassandraTemplate.insert(person, options);
  • 26. Embedded Objects © 2020 Datastax, Inc. All rights reserved.26 public class Customer { @Id UUID id; @Embedded.Nullable(prefix = "billing_") Address billing; @Embedded.Nullable(prefix = "shipping_") Address shipping; static class Address { String street; String city; String zip; } }
  • 27. Embedded Objects • Flattened when persisted • Materialized as nested object • Allow for namespacing through prefix • Can be null or empty © 2020 Datastax, Inc. All rights reserved.27
  • 28. Spring Boot 2.3 28 © 2020 Datastax, Inc. All rights reserved.
  • 29. Spring Boot 2.3 • Upgraded to Cassandra driver 4 in 2.3 • Configuration must be done either: • In application.properties or application.yaml • Under spring.data.cassandra prefix • Or programmatically • Changes to spring.data.cassandra properties: • Some properties were renamed • Contact points must now contain a port (host:port) • Local datacenter is now required • Except for Astra © 2020 Datastax, Inc. All rights reserved.29
  • 30. Configuration Upgrade Example Old: spring.data.cassandra: cluster-name: prod1 contact-points: 127.0.0.1 port: 9042 keyspace-name: ks1 read-timeout: 10s consistency-level: LOCAL_QUORUM fetch-size: 1000 30 © 2020 Datastax, Inc. All rights reserved. New: spring.data.cassandra: session-name: prod1 contact-points: 127.0.0.1:9042 local-datacenter: dc1 keyspace-name: ks1 request: timeout: 10s consistency: LOCAL_QUORUM page-size: 1000
  • 31. Upgrading Application Properties 31 © 2020 Datastax, Inc. All rights reserved. docs.spring.io/spring-boot/docs/current/reference/html/appendix-application-properties.html Old property New property spring.data.cassandra.cluster-name spring.data.cassandra.session-name N/A spring.data.cassandra.local-datacenter spring.data.cassandra.read-timeout spring.data.cassandra.connect-timeout spring.data.cassandra.request.timeout spring.data.cassandra.connection.connect-timeout spring.data.cassandra.connection.init-query-timeout spring.data.cassandra.consistency-level spring.data.cassandra.serial-consistency-level spring.data.cassandra.request.consistency spring.data.cassandra.request.serial-consistency spring.data.cassandra.fetch-size spring.data.cassandra.request.page-size spring.data.cassandra.jmx-enabled N/A (driver JMX config)
  • 32. Customizing the Cassandra Session • Avoid declaring your own CqlSession bean! • You would lose Spring Boot's auto-configuration support • Customizers FTW! • Callbacks that can be easily implemented by users • Spring Boot 2.3+ customizers: • SessionBuilderCustomizer (High-level) • DriverConfigLoaderBuilderCustomizer (Low-level, execution profiles) • Declare as regular beans © 2020 Datastax, Inc. All rights reserved.32
  • 33. Customizing the Cassandra Session • Session customization examples © 2020 Datastax, Inc. All rights reserved.33 @Bean public CqlSessionBuilderCustomizer sslCustomizer() { return builder -> builder.withSslContext(…); } @Bean public CqlSessionBuilderCustomizer credentialsCustomizer() { return builder -> builder.withAuthCredentials(…); } @Bean public DriverConfigLoaderBuilderCustomizer oltpProfile() { return builder -> builder.startProfile("oltp"). … .endProfile(); }
  • 34. Connecting to Astra • Typical configuration © 2020 Datastax, Inc. All rights reserved.34 spring.data.cassandra: username: <astra user> password: <astra password> keyspace-name: <astra keyspace> # no contact-points and no local-datacenter for Astra! datastax.astra: secure-connect-bundle: </path/to/secure-connect-bundle.zip> docs.datastax.com/en/developer/java-driver/latest/manual/cloud
  • 35. Connecting to Astra • Passing the secure connect bundle: with a customizer bean © 2020 Datastax, Inc. All rights reserved.35 @Value("${datastax.astra.secure-connect-bundle}") private String astraBundle; @Bean public CqlSessionBuilderCustomizer sessionBuilderCustomizer() { return builder -> builder.withCloudSecureConnectBundle(Paths.get(astraBundle)); } docs.datastax.com/en/developer/java-driver/latest/manual/cloud
  • 36. Compatibility Matrix 36 © 2020 Datastax, Inc. All rights reserved. Your driver version works with... Cassandra Driver Spring Data Cassandra Spring Boot 3.x 2.2 and older 2.2 and older 4.x 3.0 and newer 2.3 and newer • Can't mix versions from different lines
  • 37. Thank You! 37 © 2020 Datastax, Inc. All rights reserved.