Apache Cassandra™ en 2016
DuyHai DOAN
Évangéliste Apache Cassandra™
2
Présentation et use-cases
@doanduyhai
Caractéristiques principales
4
•  massivement scalable (1000+ nœuds sur un seul cluster)
•  disponibilité extrême (même en cas de perte de N-1 nœuds, N=RF)
•  gestion du multi-data center/multi-cloud provider
•  data modèle riche
•  éco-système étendu (Apache Spark™, Apache Mesos™, Apache Zeppelin™)
@doanduyhai
Cas d’utilisation
5
Messaging
Collections/
Playlists
Fraud
detection
Recommendation/
Personalization
Internet of things/
Sensor data
@doanduyhai
Cas d’utilisation
6
Messaging
Collections/
Playlists
Fraud
detection
Recommendation/
Personalization
Internet of things/
Sensor data
@doanduyhai
Cas d’utilisation
7
@doanduyhai
Cas d’utilisation
8
@doanduyhai
Cas d’utilisation
9
@doanduyhai
Cas d’utilisation
10
@doanduyhai
Cas d’utilisation
11
@doanduyhai
Cas d’utilisation
12
@doanduyhai
Cas d’utilisation
13
@doanduyhai
Popularité (db-engines.com)
14
Utilisateurs de Apache Cassandra™
@doanduyhai
Quelques noms
16
@doanduyhai
Quelques (nouveaux) noms
17
User management
Ads Analytics
Locations
Realtime BI
State managementLive streaming
@doanduyhai
Quelques noms chez nous
18
Les 6 top
banques
françaises
Fonctionnalités d’Apache Cassandra™
@doanduyhai
Tables distribuées
20
H
A
E
D
B C
G F
user_id1
user_id2
user_id3
user_id4
user_id5
@doanduyhai
DDL
21
•  CREATE/ALTER/DROP KEYSPACE
•  CREATE/ALTER/DROP TABLE
•  CREATE/ALTER/DROP TYPE <custom_data_type>
•  CREATE/ALTER/DROP USER
•  CREATE/ALTER/DROP ROLE
•  GRANT/REVOKE <privileges> ON <table> TO <role_name>
@doanduyhai
DML
22
INSERT INTO users(login, name, age) VALUES('jdoe', 'John DOE', 33);
UPDATE users SET age = 34 WHERE login = 'jdoe';
DELETE age FROM users WHERE login = 'jdoe';
SELECT age FROM users WHERE login = 'jdoe';
@doanduyhai
Collections
23
CREATE TABLE xxx(
…,
li list<text>,
se set<text>,
ma map<int, text>,
…
);
UPDATE xxx SET li = li + [append] …
UPDATE xxx SET se = se + {append}
UPDATE xxx SET ma[key] = value …
@doanduyhai
User Defined Type (UDT)
24
CREATE TYPE address (
number int,
street text,
zipcode text,
city text,
country text
);
@doanduyhai
Lightweight Transactions
25
INSERT INTO users(…) VALUES(...) IF NOT EXISTS;
DELETE users WHERE ... IF EXISTS;
UPDATE users SET age = xxx WHERE ... IF age = 30;
@doanduyhai
Time to live
26
INSERT INTO users(…) VALUES(...) USING TTL = 3600;
UPDATE users USING TTL = 3600 SET age = xxx WHERE ...;
@doanduyhai
User Defined Functions/Aggregates
27
CREATE FUNCTION toUpperCase(input text)
RETURNS NULL ON NULL INPUT
RETURNS int
LANGUAGE java
AS $$ return input.toUpperCase(); $$;
SELECT toUpperCase(firstname) FROM users WHERE …
SELECT max(salary) FROM users WHERE ...
Nouvelles fonctionnalités d’Apache
Cassandra™ en 2016
@doanduyhai
Delete by range
29
DELETE timeseries
WHERE sensor_id = xxx
AND date<= yyy AND date >= zzz
Cassandra 3.0
@doanduyhai
Vues matérialisées
30
CREATE MATERIALIZED VIEW user_by_salary
AS SELECT * FROM user
WHERE id IS NOT NULL AND salary > 100000
PRIMARY KEY((salary), id);
Cassandra 3.0
@doanduyhai
Vues matérialisées
31
CREATE MATERIALIZED VIEW rich_users
AS SELECT * FROM user
WHERE id IS NOT NULL AND salary > 100000
PRIMARY KEY((salary), id);
CREATE MATERIALIZED VIEW rich_french_users
AS SELECT * FROM user
WHERE id IS NOT NULL AND country = ‘France’ AND salary > 100000
PRIMARY KEY((country), id);
Cassandra 3.10
Cassandra 3.0
@doanduyhai
Mise à jour atomique UDT (1er niveau)
32
UPDATE users
SET address.street = 12
WHERE id = xxx;
Cassandra 3.6
@doanduyhai
Nouveau index SASI
33
CREATE CUSTOM INDEX albums_title_idx
ON music.albums(title)
USING 'org.apache.cassandra.index.sasi.SASIIndex’
WITH OPTIONS = {
'mode': 'CONTAINS',
'analyzer_class':
'org.apache.cassandra.index.sasi.analyzer.StandardAnalyzer',
'tokenization_enable_stemming': 'true',
'analyzed': 'true',
'tokenization_normalize_lowercase': 'true’
};
Cassandra 3.5
@doanduyhai
GROUP BY
34
SELECT avg(salary)
FROM users_by_country
GROUP BY country, city;
Cassandra 3.10
Demo
35
36
Q & A
! "
37
38
@doanduyhai
duy_hai.doan@datastax.com
https://academy.datastax.com/
Merci

Apache cassandra in 2016