alexander pavlenko, senior java developer, "cassandra into"

16
Cassandra Introduction Basic Cassandra operations overview

Upload: alina-vilk

Post on 24-Jan-2017

47 views

Category:

Education


0 download

TRANSCRIPT

Page 1: Alexander Pavlenko, Senior Java Developer, "Cassandra into"

Cassandra IntroductionBasic Cassandra operations overview

Page 2: Alexander Pavlenko, Senior Java Developer, "Cassandra into"

Cassandra setup○ ~$ docker pull cassandra

○ ~$ docker run --name cassandra1 -d cassandra

○ ~$ docker run --name cassandra2 -d -e CASSANDRA_SEEDS="$(docker inspect --format='{{ .NetworkSettings.IPAddress }}' cassandra1)" cassandra

○ ~$ docker run -it --name cqlsh --link cassandra1:cassandra --rm cassandra sh -c 'exec cqlsh "$CASSANDRA_PORT_9042_TCP_ADDR"'

https://www.docker.com https://hub.docker.com/_/cassandra/

Page 3: Alexander Pavlenko, Senior Java Developer, "Cassandra into"

Cassandra setup (docker)

Page 4: Alexander Pavlenko, Senior Java Developer, "Cassandra into"

Cassandra Query Language (CQL) is a query language for the Cassandra database. The Cassandra Query Language (CQL) is the primary language for communicating with the Cassandra database. The most basic way to interact with Cassandra is using the CQL shell, cqlsh.

CQL

Page 5: Alexander Pavlenko, Senior Java Developer, "Cassandra into"

CREATE KEYSPACE DEMO WITH REPLICATION = { 'CLASS' : 'SIMPLESTRATEGY', 'REPLICATION_FACTOR' : 2 };

USE DEMO;

Create keyspace

Page 6: Alexander Pavlenko, Senior Java Developer, "Cassandra into"

CREATE TABLE WHEATHER_FORECAST (SITE TEXT, SPECIES TEXT, MEASUREMENTDATE TIMESTAMP, LATITUDE DOUBLE, LONGITUDE DOUBLE, VALUE DOUBLE,

PRIMARY KEY((SITE, SPECIES), MEASUREMENTDATE)) ;

DESC WHEATHER_FORECAST;

Create Column Family

Page 7: Alexander Pavlenko, Senior Java Developer, "Cassandra into"

Create Column Family

Page 8: Alexander Pavlenko, Senior Java Developer, "Cassandra into"

INSERT INTO WHEATHER_FORECAST(SITE, SPECIES, MEASUREMENTDATE, LATITUDE , LONGITUDE, VALUE ) VALUES ('MY7', 'PM10', 1451628000000, 51.234, -0.846, 44.4);

INSERT INTO WHEATHER_FORECAST (SITE, SPECIES, MEASUREMENTDATE, LATITUDE , LONGITUDE, VALUE ) VALUES ('MY7', 'PM10', 1451631600000, 51.234, -0.846, 41.7);

INSERT INTO WHEATHER_FORECAST (SITE, SPECIES, MEASUREMENTDATE, LATITUDE , LONGITUDE, VALUE ) VALUES ('MY7', 'PM10', 1451635200000, 51.234, -0.846, 42.7);

Insert Data Rows

Page 9: Alexander Pavlenko, Senior Java Developer, "Cassandra into"

INSERT INTO WHEATHER_FORECAST (SITE, SPECIES, MEASUREMENTDATE, LATITUDE , LONGITUDE, VALUE ) VALUES ('MY7', 'PM10', 1451638800000, 51.234, -0.846, 38.5);

INSERT INTO WHEATHER_FORECAST (SITE, SPECIES, MEASUREMENTDATE, LATITUDE , LONGITUDE, VALUE ) VALUES ('MY7', 'PM25', 1451639800000, 51.234, -0.846, 18.8);

Insert Data Rows

Page 10: Alexander Pavlenko, Senior Java Developer, "Cassandra into"

SELECT * FROM WHEATHER_FORECAST;

SELECT * FROM WHEATHER_FORECAST WHERE SITE = 'MY7'; //ERROR

SELECT * FROM WHEATHER_FORECAST WHERE SPECIES = 'PM10'; //ERROR

SELECT * FROM WHEATHER_FORECAST WHERE SITE = 'MY7' AND SPECIES = 'PM10';

SELECT * FROM WHEATHER_FORECAST WHERE SITE = 'MY7' AND SPECIES = 'PM10' AND MEASUREMENTDATE = 1451628000000;

Querying Data

Page 11: Alexander Pavlenko, Senior Java Developer, "Cassandra into"

Querying Data

Page 12: Alexander Pavlenko, Senior Java Developer, "Cassandra into"

○The Partition Key is responsible for data distribution across your nodes.

○The Clustering Key is responsible for data sorting within the partition.

○The Primary Key is equivalent to the Partition Key in a single-field-key table.

○The Composite/Compound Key is just a multiple-columns key

Keys & Clustering

CREATE TABLE WHEATHER_FORECAST ( SITE TEXT,SPECIES TEXT, MEASUREMENTDATE TIMESTAMP, LATITUDE DOUBLE,

LONGITUDE DOUBLE, VALUE DOUBLE, PRIMARY KEY ((SITE, SPECIES),

MEASUREMENTDATE))

Composite Partition Key

Clustering Key

Page 13: Alexander Pavlenko, Senior Java Developer, "Cassandra into"

SELECT * FROM WHEATHER_FORECAST WHERE SITE = 'MY7' AND SPECIES = 'PM10' AND LATITUDE = 51.234; //ERROR

SELECT * FROM WHEATHER_FORECAST WHERE SITE = 'MY7' AND SPECIES = 'PM10' AND LATITUDE = 51.234 ALLOW FILTERING;

SELECT * FROM WHEATHER_FORECAST WHERE SITE = 'MY7' AND SPECIES > 'PM10'; //ERRORSELECT * FROM WHEATHER_FORECAST WHERE SITE = 'MY7' AND SPECIES IN ('PM10');

SELECT * FROM WHEATHER_FORECAST WHERE SITE = 'MY7' AND SPECIES IN ('PM10') AND MEASUREMENTDATE >= 1451628000000;

Querying Data

Page 14: Alexander Pavlenko, Senior Java Developer, "Cassandra into"

SELECT MIN(SITE), MIN(SPECIES) FROM WHEATHER_FORECAST; //WARNING

SELECT MIN(SITE), MIN(SPECIES), MIN(MEASUREMENTDATE) FROM WHEATHER_FORECAST;

INSERT INTO WHEATHER_FORECAST (SITE, SPECIES, MEASUREMENTDATE, LATITUDE , LONGITUDE , VALUE) VALUES ('MY7', 'PM25', 1451639800000, 51.234, -0.846, 28.8); //UPSERT

Querying Data

Page 15: Alexander Pavlenko, Senior Java Developer, "Cassandra into"

Querying Data

Page 16: Alexander Pavlenko, Senior Java Developer, "Cassandra into"

INSERT INTO WHEATHER_FORECAST (SITE, SPECIES, MEASUREMENTDATE, LATITUDE , LONGITUDE, VALUE ) VALUES ('MY7', 'PM10', 1451616000000, 51.234, -0.846, 88.4) USING TTL 30;

Insert with TTL