apache cassandra in 2016
TRANSCRIPT
Apache Cassandra™ en 2016DuyHai 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 management Live 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 intLANGUAGE javaAS $$ 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 timeseriesWHERE sensor_id = xxxAND date<= yyy AND date >= zzz
Cassandra 3.0
@doanduyhai
Vues matérialisées
30
CREATE MATERIALIZED VIEW user_by_salaryAS SELECT * FROM userWHERE id IS NOT NULL AND salary > 100000PRIMARY KEY((salary), id);
Cassandra 3.0
@doanduyhai
Vues matérialisées
31
CREATE MATERIALIZED VIEW rich_usersAS SELECT * FROM userWHERE id IS NOT NULL AND salary > 100000PRIMARY KEY((salary), id);
CREATE MATERIALIZED VIEW rich_french_usersAS SELECT * FROM userWHERE id IS NOT NULL AND country = ‘France’ AND salary > 100000PRIMARY KEY((country), id);
Cassandra 3.10
Cassandra 3.0
@doanduyhai
Mise à jour atomique UDT (1er niveau)
32
UPDATE usersSET address.street = 12WHERE 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_countryGROUP BY country, city;
Cassandra 3.10
Demo 35
36
Q & A
! "
37