Top Banner
Java Applica)ons Building with Cassandra Aumcfshmvoe
34

Cassandra Day Chicago 2015: Building Java Applications with Apache Cassandra

Jul 15, 2015

Download

Technology

Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Cassandra Day Chicago 2015: Building Java Applications with Apache Cassandra

JavaApplica)ons

Building

with  Cassandra

Page 2: Cassandra Day Chicago 2015: Building Java Applications with Apache Cassandra

Treat CassandraLike a Database

Page 3: Cassandra Day Chicago 2015: Building Java Applications with Apache Cassandra

An AwesomeDatabase

• Always  on  • Horizontally  scalable  • Mul5ple  data  centers  • Cloud/hybrid    • Web/mobile/IoT

Page 4: Cassandra Day Chicago 2015: Building Java Applications with Apache Cassandra

2000

4000

6000

8000

A000

C000

E000

0000

Client Machine

Load Balancer

Page 5: Cassandra Day Chicago 2015: Building Java Applications with Apache Cassandra

tim name: Tim

role: teacher

kristenname: Kristen

role: marketing

billy role: CEO

matt name: Matt

role: founder

status: active

status: chill

Page 6: Cassandra Day Chicago 2015: Building Java Applications with Apache Cassandra

CREATE TABLE product_browsing_data (product_id uuid, user_id uuid, clicked_at timestamp, serialized_browsing_data text, PRIMARY KEY (product_id, user_id, clicked_at) );

Page 7: Cassandra Day Chicago 2015: Building Java Applications with Apache Cassandra

https://github.com/datastax/java-­‐driver

Page 8: Cassandra Day Chicago 2015: Building Java Applications with Apache Cassandra

DataStax  Java  Driver

• Open  source  (ASL  2.0)  • Where  CQL  happens  • Ac5vely  developed  • Now  faster  than  ThriK  • Doesn’t  make  you  want  to  die

Page 9: Cassandra Day Chicago 2015: Building Java Applications with Apache Cassandra

Every Use Casehas a Story

Page 10: Cassandra Day Chicago 2015: Building Java Applications with Apache Cassandra

YourStory:

Page 11: Cassandra Day Chicago 2015: Building Java Applications with Apache Cassandra

apply plugin: 'java'repositories { jcenter()} dependencies { compile 'com.datastax.cassandra:cassandra-driver-core:2.1.2' testCompile 'org.testng:testng:6.8.8' testCompile 'junit:junit:4.11'}

Gradle Build

Page 12: Cassandra Day Chicago 2015: Building Java Applications with Apache Cassandra

session.execute( "INSERT INTO sensor \ (sensor_id, reading, time) \ VALUES \ (24601, 2.171828, now())”);

ClusterInterfaceCluster cluster = Cluster.builder() .addContactPoints(“192.168.50.1”) .build(); Session session = cluster.connect(“IoT_keyspace");

Page 13: Cassandra Day Chicago 2015: Building Java Applications with Apache Cassandra

YourStory:

Page 14: Cassandra Day Chicago 2015: Building Java Applications with Apache Cassandra

ResultSet resultSet = session.execute("SELECT * FROM sensor");

List<Row> rows = resultSet.all();

for(Row row : rows) { String sensorId = row.getString("sensor_id" ); double reading = row.getDouble("reading" ); Date time = row.getDate("time" ); }

BasicQueries

Page 15: Cassandra Day Chicago 2015: Building Java Applications with Apache Cassandra

PreparedStatement insertReading = session.prepare( "INSERT INTO sensor \ (sensor_id, reading, time) VALUES (?, ?, ?)” ); Statement statement = insertReading .bind(24601, 2.71828, new Date()) .setConsistencyLevel(ConsistencyLevel.QUORUM);

session.execute(statement);

PreparedStatements

Page 16: Cassandra Day Chicago 2015: Building Java Applications with Apache Cassandra

YourStory:

Page 17: Cassandra Day Chicago 2015: Building Java Applications with Apache Cassandra

2000

4000

6000

8000

A000

C000

E000

0000

Client Machine

Page 18: Cassandra Day Chicago 2015: Building Java Applications with Apache Cassandra

ClusterInterface

Cluster cluster = Cluster.builder() .addContactPoints(“192.168.50.1”) .build();

Page 19: Cassandra Day Chicago 2015: Building Java Applications with Apache Cassandra

ClusterInterface

Cluster cluster = Cluster.builder() .addContactPoints(“192.168.50.1”, “192.168.50.4”, “192.168.50.8”) .build();

Page 20: Cassandra Day Chicago 2015: Building Java Applications with Apache Cassandra

YourStory:

Page 21: Cassandra Day Chicago 2015: Building Java Applications with Apache Cassandra

2000

4000

6000

8000

A000

C000

E000

0000

Client Machine

Page 22: Cassandra Day Chicago 2015: Building Java Applications with Apache Cassandra

2000

4000

6000

8000

A000

C000

E000

0000

Client Machine

1.2ms

2.9ms

15.3ms

Page 23: Cassandra Day Chicago 2015: Building Java Applications with Apache Cassandra

Outsmar)ng  Yourself• Pick  one  node  • Send  all  coordina5on  traffic  to  that  node  • Hey,  maybe  make  it  a  fat  node!  • WhiteListPolicy  • PLEASE  DO  NOT  DO  THIS

Page 24: Cassandra Day Chicago 2015: Building Java Applications with Apache Cassandra

List<InetSocketAddress> whiteList = new ArrayList<InetSocketAddress>();whiteList.add(...);Cluster c = Cluster.builder().withLoadBalancingPolicy( new WhiteListPolicy( new RoundRobinPolicy(), whiteList)).build();

WhiteListing

Page 25: Cassandra Day Chicago 2015: Building Java Applications with Apache Cassandra

YourStory:

Page 26: Cassandra Day Chicago 2015: Building Java Applications with Apache Cassandra

apply plugin: 'java'repositories { jcenter()} dependencies { compile 'com.datastax.cassandra:cassandra-driver-core:2.1.2' compile 'com.datastax.cassandra:cassandra-driver-mapping:2.1.2' testCompile 'org.testng:testng:6.8.8' testCompile 'junit:junit:4.11'}

MapperObject

Page 27: Cassandra Day Chicago 2015: Building Java Applications with Apache Cassandra

CREATE TABLE sensor ( sensor_id int, reading double, time timestamp );

MapperObject

@UDT(keyspace = "IoT_keyspace", name = "sensor") public class Sensor { private int sensorId; private double reading; private Date Time; // getters and setters elided with extreme prejudice...}

Page 28: Cassandra Day Chicago 2015: Building Java Applications with Apache Cassandra

MapperObject

MappingManager manager = new MappingManager(session);Mapper mapper = manager.mapper(Sensor.class);Sensor reading = mapper.get("24601");

Page 29: Cassandra Day Chicago 2015: Building Java Applications with Apache Cassandra

YourStory:

Page 30: Cassandra Day Chicago 2015: Building Java Applications with Apache Cassandra

ResultSetFuture future = session.executeAsync("SELECT * FROM sensor");

// Returns immediately// Go do productive things here…// Then finally block on the results when you must

ResultSet futureResults = future.get();List<Row> rows = resultSet.all();

FutureResults

Page 31: Cassandra Day Chicago 2015: Building Java Applications with Apache Cassandra

Executor executor = Executors.newCachedThreadPool();ResultSetFuture future = session.executeAsync("SELECT * FROM sensor");

future.addListener(new Runnable() { public void run() { // Do the things here… } }, executor);

FutureResults

Page 32: Cassandra Day Chicago 2015: Building Java Applications with Apache Cassandra

YourStory:

Page 33: Cassandra Day Chicago 2015: Building Java Applications with Apache Cassandra
Page 34: Cassandra Day Chicago 2015: Building Java Applications with Apache Cassandra

ThankYou!