SlideShare uma empresa Scribd logo
1 de 37
Baixar para ler offline
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.

Mais conteúdo relacionado

Mais procurados

SQL Server パフォーマンスカウンター
SQL Server パフォーマンスカウンターSQL Server パフォーマンスカウンター
SQL Server パフォーマンスカウンターMasayuki Ozawa
 
Snowflake on Googleのターゲットエンドポイントとしての利用
Snowflake on Googleのターゲットエンドポイントとしての利用Snowflake on Googleのターゲットエンドポイントとしての利用
Snowflake on Googleのターゲットエンドポイントとしての利用QlikPresalesJapan
 
Oracle Golden Gate Interview Questions
Oracle Golden Gate Interview QuestionsOracle Golden Gate Interview Questions
Oracle Golden Gate Interview QuestionsArun Sharma
 
Sql server エンジニアに知ってもらいたい!! sql server チューニングアプローチ
Sql server エンジニアに知ってもらいたい!! sql server チューニングアプローチSql server エンジニアに知ってもらいたい!! sql server チューニングアプローチ
Sql server エンジニアに知ってもらいたい!! sql server チューニングアプローチMasayuki Ozawa
 
LendingClub RealTime BigData Platform with Oracle GoldenGate
LendingClub RealTime BigData Platform with Oracle GoldenGateLendingClub RealTime BigData Platform with Oracle GoldenGate
LendingClub RealTime BigData Platform with Oracle GoldenGateRajit Saha
 
監査ログをもっと身近に!〜統合監査のすすめ〜
監査ログをもっと身近に!〜統合監査のすすめ〜監査ログをもっと身近に!〜統合監査のすすめ〜
監査ログをもっと身近に!〜統合監査のすすめ〜Michitoshi Yoshida
 
【de:code 2020】 今すぐはじめたい SQL Database のかしこい使い分け術 後編
【de:code 2020】 今すぐはじめたい SQL Database のかしこい使い分け術 後編【de:code 2020】 今すぐはじめたい SQL Database のかしこい使い分け術 後編
【de:code 2020】 今すぐはじめたい SQL Database のかしこい使い分け術 後編日本マイクロソフト株式会社
 
Oracle GoldenGateでの資料採取(トラブル時に採取すべき資料)
Oracle GoldenGateでの資料採取(トラブル時に採取すべき資料)Oracle GoldenGateでの資料採取(トラブル時に採取すべき資料)
Oracle GoldenGateでの資料採取(トラブル時に採取すべき資料)オラクルエンジニア通信
 
シンプルでシステマチックな Oracle Database, Exadata 性能分析
シンプルでシステマチックな Oracle Database, Exadata 性能分析シンプルでシステマチックな Oracle Database, Exadata 性能分析
シンプルでシステマチックな Oracle Database, Exadata 性能分析Yohei Azekatsu
 
Time to-live: How to Perform Automatic State Cleanup in Apache Flink - Andrey...
Time to-live: How to Perform Automatic State Cleanup in Apache Flink - Andrey...Time to-live: How to Perform Automatic State Cleanup in Apache Flink - Andrey...
Time to-live: How to Perform Automatic State Cleanup in Apache Flink - Andrey...Flink Forward
 
Less01 architecture
Less01 architectureLess01 architecture
Less01 architectureAmit Bhalla
 
Lessons Learned From Running 1800 Clusters (Brooke Jensen, Instaclustr) | Cas...
Lessons Learned From Running 1800 Clusters (Brooke Jensen, Instaclustr) | Cas...Lessons Learned From Running 1800 Clusters (Brooke Jensen, Instaclustr) | Cas...
Lessons Learned From Running 1800 Clusters (Brooke Jensen, Instaclustr) | Cas...DataStax
 
Kafka Summit SF 2017 - Kafka Connect Best Practices – Advice from the Field
Kafka Summit SF 2017 - Kafka Connect Best Practices – Advice from the FieldKafka Summit SF 2017 - Kafka Connect Best Practices – Advice from the Field
Kafka Summit SF 2017 - Kafka Connect Best Practices – Advice from the Fieldconfluent
 
The Top 5 Reasons to Deploy Your Applications on Oracle RAC
The Top 5 Reasons to Deploy Your Applications on Oracle RACThe Top 5 Reasons to Deploy Your Applications on Oracle RAC
The Top 5 Reasons to Deploy Your Applications on Oracle RACMarkus Michalewicz
 
Monitoring Oracle Database Instances with Zabbix
Monitoring Oracle Database Instances with ZabbixMonitoring Oracle Database Instances with Zabbix
Monitoring Oracle Database Instances with ZabbixGerger
 
DataStax: Backup and Restore in Cassandra and OpsCenter
DataStax: Backup and Restore in Cassandra and OpsCenterDataStax: Backup and Restore in Cassandra and OpsCenter
DataStax: Backup and Restore in Cassandra and OpsCenterDataStax Academy
 
Exadata Performance Optimization
Exadata Performance OptimizationExadata Performance Optimization
Exadata Performance OptimizationEnkitec
 
S13 Oracle Database を Microsoft Azure 上で運用する為に~基本事項とベストプラクティス
S13 Oracle Database を Microsoft Azure 上で運用する為に~基本事項とベストプラクティスS13 Oracle Database を Microsoft Azure 上で運用する為に~基本事項とベストプラクティス
S13 Oracle Database を Microsoft Azure 上で運用する為に~基本事項とベストプラクティスMicrosoft Azure Japan
 
Understanding oracle rac internals part 1 - slides
Understanding oracle rac internals   part 1 - slidesUnderstanding oracle rac internals   part 1 - slides
Understanding oracle rac internals part 1 - slidesMohamed Farouk
 
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
 

Mais procurados (20)

SQL Server パフォーマンスカウンター
SQL Server パフォーマンスカウンターSQL Server パフォーマンスカウンター
SQL Server パフォーマンスカウンター
 
Snowflake on Googleのターゲットエンドポイントとしての利用
Snowflake on Googleのターゲットエンドポイントとしての利用Snowflake on Googleのターゲットエンドポイントとしての利用
Snowflake on Googleのターゲットエンドポイントとしての利用
 
Oracle Golden Gate Interview Questions
Oracle Golden Gate Interview QuestionsOracle Golden Gate Interview Questions
Oracle Golden Gate Interview Questions
 
Sql server エンジニアに知ってもらいたい!! sql server チューニングアプローチ
Sql server エンジニアに知ってもらいたい!! sql server チューニングアプローチSql server エンジニアに知ってもらいたい!! sql server チューニングアプローチ
Sql server エンジニアに知ってもらいたい!! sql server チューニングアプローチ
 
LendingClub RealTime BigData Platform with Oracle GoldenGate
LendingClub RealTime BigData Platform with Oracle GoldenGateLendingClub RealTime BigData Platform with Oracle GoldenGate
LendingClub RealTime BigData Platform with Oracle GoldenGate
 
監査ログをもっと身近に!〜統合監査のすすめ〜
監査ログをもっと身近に!〜統合監査のすすめ〜監査ログをもっと身近に!〜統合監査のすすめ〜
監査ログをもっと身近に!〜統合監査のすすめ〜
 
【de:code 2020】 今すぐはじめたい SQL Database のかしこい使い分け術 後編
【de:code 2020】 今すぐはじめたい SQL Database のかしこい使い分け術 後編【de:code 2020】 今すぐはじめたい SQL Database のかしこい使い分け術 後編
【de:code 2020】 今すぐはじめたい SQL Database のかしこい使い分け術 後編
 
Oracle GoldenGateでの資料採取(トラブル時に採取すべき資料)
Oracle GoldenGateでの資料採取(トラブル時に採取すべき資料)Oracle GoldenGateでの資料採取(トラブル時に採取すべき資料)
Oracle GoldenGateでの資料採取(トラブル時に採取すべき資料)
 
シンプルでシステマチックな Oracle Database, Exadata 性能分析
シンプルでシステマチックな Oracle Database, Exadata 性能分析シンプルでシステマチックな Oracle Database, Exadata 性能分析
シンプルでシステマチックな Oracle Database, Exadata 性能分析
 
Time to-live: How to Perform Automatic State Cleanup in Apache Flink - Andrey...
Time to-live: How to Perform Automatic State Cleanup in Apache Flink - Andrey...Time to-live: How to Perform Automatic State Cleanup in Apache Flink - Andrey...
Time to-live: How to Perform Automatic State Cleanup in Apache Flink - Andrey...
 
Less01 architecture
Less01 architectureLess01 architecture
Less01 architecture
 
Lessons Learned From Running 1800 Clusters (Brooke Jensen, Instaclustr) | Cas...
Lessons Learned From Running 1800 Clusters (Brooke Jensen, Instaclustr) | Cas...Lessons Learned From Running 1800 Clusters (Brooke Jensen, Instaclustr) | Cas...
Lessons Learned From Running 1800 Clusters (Brooke Jensen, Instaclustr) | Cas...
 
Kafka Summit SF 2017 - Kafka Connect Best Practices – Advice from the Field
Kafka Summit SF 2017 - Kafka Connect Best Practices – Advice from the FieldKafka Summit SF 2017 - Kafka Connect Best Practices – Advice from the Field
Kafka Summit SF 2017 - Kafka Connect Best Practices – Advice from the Field
 
The Top 5 Reasons to Deploy Your Applications on Oracle RAC
The Top 5 Reasons to Deploy Your Applications on Oracle RACThe Top 5 Reasons to Deploy Your Applications on Oracle RAC
The Top 5 Reasons to Deploy Your Applications on Oracle RAC
 
Monitoring Oracle Database Instances with Zabbix
Monitoring Oracle Database Instances with ZabbixMonitoring Oracle Database Instances with Zabbix
Monitoring Oracle Database Instances with Zabbix
 
DataStax: Backup and Restore in Cassandra and OpsCenter
DataStax: Backup and Restore in Cassandra and OpsCenterDataStax: Backup and Restore in Cassandra and OpsCenter
DataStax: Backup and Restore in Cassandra and OpsCenter
 
Exadata Performance Optimization
Exadata Performance OptimizationExadata Performance Optimization
Exadata Performance Optimization
 
S13 Oracle Database を Microsoft Azure 上で運用する為に~基本事項とベストプラクティス
S13 Oracle Database を Microsoft Azure 上で運用する為に~基本事項とベストプラクティスS13 Oracle Database を Microsoft Azure 上で運用する為に~基本事項とベストプラクティス
S13 Oracle Database を Microsoft Azure 上で運用する為に~基本事項とベストプラクティス
 
Understanding oracle rac internals part 1 - slides
Understanding oracle rac internals   part 1 - slidesUnderstanding oracle rac internals   part 1 - slides
Understanding oracle rac internals part 1 - slides
 
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
 

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

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 IntroChristopher 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 SparkEvan Chan
 
WSO2 Quarterly Technical Update
WSO2 Quarterly Technical UpdateWSO2 Quarterly Technical Update
WSO2 Quarterly Technical UpdateWSO2
 
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 2014NoSQLmatters
 
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 KafkaDataStax
 
20161029 py con-mysq-lv3
20161029 py con-mysq-lv320161029 py con-mysq-lv3
20161029 py con-mysq-lv3Ivan Ma
 
Coherence RoadMap 2018
Coherence RoadMap 2018Coherence RoadMap 2018
Coherence RoadMap 2018harvraja
 
Django deployment with PaaS
Django deployment with PaaSDjango deployment with PaaS
Django deployment with PaaSAppsembler
 
StackMate - CloudFormation for CloudStack
StackMate - CloudFormation for CloudStackStackMate - CloudFormation for CloudStack
StackMate - CloudFormation for CloudStackChiradeep 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 streamingMark 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: ScaleNeo4j
 
Deploying windows containers with kubernetes
Deploying windows containers with kubernetesDeploying windows containers with kubernetes
Deploying windows containers with kubernetesBen 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 2015Patrick 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 SparkRahul 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 AWSPatrick Bolduan
 

Semelhante a 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
 
Koalas: How Well Does Koalas Work?
Koalas: How Well Does Koalas Work?Koalas: How Well Does Koalas Work?
Koalas: How Well Does Koalas Work?
 
NYC Cassandra Day - Java Intro
NYC Cassandra Day - Java IntroNYC Cassandra Day - Java Intro
NYC Cassandra Day - Java Intro
 
Caerusone
CaerusoneCaerusone
Caerusone
 
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
 
WSO2 Quarterly Technical Update
WSO2 Quarterly Technical UpdateWSO2 Quarterly Technical Update
WSO2 Quarterly Technical Update
 
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
 
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
 
20161029 py con-mysq-lv3
20161029 py con-mysq-lv320161029 py con-mysq-lv3
20161029 py con-mysq-lv3
 
Coherence RoadMap 2018
Coherence RoadMap 2018Coherence RoadMap 2018
Coherence RoadMap 2018
 
Django deployment with PaaS
Django deployment with PaaSDjango deployment with PaaS
Django deployment with PaaS
 
StackMate - CloudFormation for CloudStack
StackMate - CloudFormation for CloudStackStackMate - CloudFormation for CloudStack
StackMate - CloudFormation for CloudStack
 
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
 
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.
 
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
 
Deploying windows containers with kubernetes
Deploying windows containers with kubernetesDeploying windows containers with kubernetes
Deploying windows containers with kubernetes
 
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
 
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
 
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
 
Apache Spark v3.0.0
Apache Spark v3.0.0Apache Spark v3.0.0
Apache Spark v3.0.0
 

Último

Enhancing Worker Digital Experience: A Hands-on Workshop for Partners
Enhancing Worker Digital Experience: A Hands-on Workshop for PartnersEnhancing Worker Digital Experience: A Hands-on Workshop for Partners
Enhancing Worker Digital Experience: A Hands-on Workshop for PartnersThousandEyes
 
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking MenDelhi Call girls
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationMichael W. Hawkins
 
Human Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsHuman Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsMark Billinghurst
 
Install Stable Diffusion in windows machine
Install Stable Diffusion in windows machineInstall Stable Diffusion in windows machine
Install Stable Diffusion in windows machinePadma Pradeep
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking MenDelhi Call girls
 
Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)Allon Mureinik
 
Benefits Of Flutter Compared To Other Frameworks
Benefits Of Flutter Compared To Other FrameworksBenefits Of Flutter Compared To Other Frameworks
Benefits Of Flutter Compared To Other FrameworksSoftradix Technologies
 
AI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsAI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsMemoori
 
How to Remove Document Management Hurdles with X-Docs?
How to Remove Document Management Hurdles with X-Docs?How to Remove Document Management Hurdles with X-Docs?
How to Remove Document Management Hurdles with X-Docs?XfilesPro
 
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticsKotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticscarlostorres15106
 
Pigging Solutions in Pet Food Manufacturing
Pigging Solutions in Pet Food ManufacturingPigging Solutions in Pet Food Manufacturing
Pigging Solutions in Pet Food ManufacturingPigging Solutions
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerThousandEyes
 
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...HostedbyConfluent
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreternaman860154
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonetsnaman860154
 
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024BookNet Canada
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationRadu Cotescu
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationSafe Software
 
The Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxThe Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxMalak Abu Hammad
 

Último (20)

Enhancing Worker Digital Experience: A Hands-on Workshop for Partners
Enhancing Worker Digital Experience: A Hands-on Workshop for PartnersEnhancing Worker Digital Experience: A Hands-on Workshop for Partners
Enhancing Worker Digital Experience: A Hands-on Workshop for Partners
 
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day Presentation
 
Human Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsHuman Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR Systems
 
Install Stable Diffusion in windows machine
Install Stable Diffusion in windows machineInstall Stable Diffusion in windows machine
Install Stable Diffusion in windows machine
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men
 
Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)
 
Benefits Of Flutter Compared To Other Frameworks
Benefits Of Flutter Compared To Other FrameworksBenefits Of Flutter Compared To Other Frameworks
Benefits Of Flutter Compared To Other Frameworks
 
AI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsAI as an Interface for Commercial Buildings
AI as an Interface for Commercial Buildings
 
How to Remove Document Management Hurdles with X-Docs?
How to Remove Document Management Hurdles with X-Docs?How to Remove Document Management Hurdles with X-Docs?
How to Remove Document Management Hurdles with X-Docs?
 
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticsKotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
 
Pigging Solutions in Pet Food Manufacturing
Pigging Solutions in Pet Food ManufacturingPigging Solutions in Pet Food Manufacturing
Pigging Solutions in Pet Food Manufacturing
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreter
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonets
 
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organization
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
 
The Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxThe Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptx
 

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.