www.ippon.fr www.atomes.com www.ippon-mobile.fr http://blog.ippon.fr CASSANDRA-JAVA-DRIVER Vers Cassandra 1.2 et au delà
www.ippon.fr www.atomes.com www.ippon-mobile.fr http://blog.ippon.fr
CASSANDRA-JAVA-DRIVERVers Cassandra 1.2 et au delà
www.ippon.fr www.atomes.com www.ippon-mobile.fr http://blog.ippon.fr
Sommaire
Cassandra CQL 3 Binary Protocol Java Driver
Modes de Requêtage Métriques Policies
www.ippon.fr www.atomes.com www.ippon-mobile.fr http://blog.ippon.fr
AG
ILIT
E
CASSANDRA
Base de données NoSQL orientée colonne
Extrêmement rapide Pas de SPOF Écrite en Java ...
2008
2013
1.2
2009 2010 2011 2012
1.11.00.8Apachetop level 0.8
Apacheincubator
www.ippon.fr www.atomes.com www.ippon-mobile.fr http://blog.ippon.fr
CASSANDRA JAVA DRIVER
DATASTAX CASSANDRA JAVA DRIVER
CQL 3 + CQL Binary Protocol
Version 1.0.0Release Mai 2013Compatible avec Cassandra 1.2+Apache License Version 2.0Développé par les équipes de Datastax
www.ippon.fr www.atomes.com www.ippon-mobile.fr http://blog.ippon.fr
AG
ILIT
E
CQL 3 - CQL
CQL : C assandra Query Language
CQL 3 ~ = SQLMême syntaxe sans agrégation (JOIN, GROUP BY, …)
Changement de philosophie avec CQL 3 : → Nécessite un schéma !
CREATE TABLE Users (KEY text PRIMARY KEY, NAME text)
INSERT INTO Users(KEY, NAME) VALUES ('1','Buzz') SELECT * FROM Users
UPDATE Users SET NAME='Woody' WHERE KEY='1'ALTER TABLE Users ADD AGE text
www.ippon.fr www.atomes.com www.ippon-mobile.fr http://blog.ippon.fr
AG
ILIT
E
CQL 3 - SCHEMA
ippon@ippon:~$ cqlsh -2 -k ippevent[cqlsh 3.0.2 | Cassandra 0.0.0 | CQL spec 2.0.0 | Thrift protocol 19.36.0]cqlsh:ippevent> CREATE TABLE person (KEY text PRIMARY KEY, NAME text);cqlsh:ippevent> INSERT INTO person(KEY, NAME, AGE) VALUES ('1','buzz',30);cqlsh:ippevent> SELECT * FROM person;
KEY | AGE | NAME-----+-----+------ 1 | 30 | buzz
ippon@ippon:~$ cqlsh -3 -k ippevent[cqlsh 3.0.2 | Cassandra 1.2.5 | CQL spec 3.0.0 | Thrift protocol 19.36.0]cqlsh:ippevent> CREATE TABLE person (KEY text PRIMARY KEY, NAME text);cqlsh:ippevent> INSERT INTO person(KEY, NAME, AGE) VALUES ('1','buzz',30);Bad Request: Unknown identifier age
CLQ 2
CLQ 3
www.ippon.fr www.atomes.com www.ippon-mobile.fr http://blog.ippon.fr
AG
ILIT
E
CQL 3 - UPSERT
Cependant l'UPSERT reste possiblecqlsh:ippevent> SELECT * FROM Mutations;cqlsh:ippevent> UPDATE Mutations SET A='value from UPDATE'
WHERE KEY='1';cqlsh:ippevent> SELECT * FROM Mutations;
key | a | b-----+-------------------+------ 1 | value from UPDATE | null
cqlsh:ippevent> INSERT INTO Mutations(KEY,B) VALUES('1','value from INSERT');
cqlsh:ippevent> SELECT * FROM Mutations;
key | a | b-----+-------------------+------------------- 1 | value from UPDATE | value from INSERT
www.ippon.fr www.atomes.com www.ippon-mobile.fr http://blog.ippon.fr
CQL 3 – Super Column
Abandon des Super Columns Colonne dont la valeur est des colonnes
→ Préférer désormais l'utilisation de clustering keys
buzz AGE ADRESSE
32 NUMERO RUE VILLE
90 Baudin Levallois
www.ippon.fr www.atomes.com www.ippon-mobile.fr http://blog.ippon.fr
CQL 3 – Modélisation (Wide Rows)
Wide RowsCassandra peut stocker plus de 2M de colonnes par clef.Exemple :
→ Comment faire avec CQL 3 ?
buzz 133829 133950 134022 142109Star command ...
Vers l'infini Où est Zurg ? Space command ...
woody 133983 134802J'ai un serpent ...
Qui a empoisonné ...
KEY COLUMNS ...
www.ippon.fr www.atomes.com www.ippon-mobile.fr http://blog.ippon.fr
CQL 3 – Modélisation (Wide Rows)
buzz 133829-dialog 133950-dialog 134022-dialog 142109-dialogStar command ... Vers l'infini Où est Zurg ? Space command ...
woody 133983-dialog 134802-dialogJ'ai un serpent ... Qui a empoisonné ...
CREATE TABLE DIALOG (username VARCHAR,said_at TIMESTAMP,dialog VARCHAR,PRIMARY KEY (username, said_at)
)
username said_at dialog
buzz 133829 Star command ...
buzz 133950 Vers l'infini ...
...
woody 133983 J'ai un serpent ...
...
Représentation Logique
Représentation Physique
Partition key Clustering key
www.ippon.fr www.atomes.com www.ippon-mobile.fr http://blog.ippon.fr
AG
ILIT
E
CQL 3 - Performances
www.ippon.fr www.atomes.com www.ippon-mobile.fr http://blog.ippon.fr
AG
ILIT
E
CQL 3 - Performances
Attention : performance des SELECT *
www.ippon.fr www.atomes.com www.ippon-mobile.fr http://blog.ippon.fr
AG
ILIT
E
CQL Binary Protocol
CQL Binary Protocol remplaçant de Thrift
Thrift : rapide et multi-language Pourquoi changer ? RPC seulement. CQL Binary Protocol ouvre la porte au streaming (curseurs), aux notifications techniques, …
Mais Thrift reste maintenu
www.ippon.fr www.atomes.com www.ippon-mobile.fr http://blog.ippon.fr
AG
ILIT
E
CQL Binary Protocol
Nouveau port (9042 par défaut) Actif par défaut Cassandra 1.2.5+ Peut cohabiter avec l'interface Thrift
$CASSANDRA_HOME/conf/cassandra.yaml# Whether to start the native transport server.# Please note that the address on which the native transport is bound is the# same as the rpc_address. The port however is different and specified below.start_native_transport: true# port for the CQL native transport to listen for clients onnative_transport_port: 9042
# Whether to start the thrift rpc server.start_rpc: true# port for Thrift to listen for clients onrpc_port: 9160
www.ippon.fr www.atomes.com www.ippon-mobile.fr http://blog.ippon.fr
AG
ILIT
E
Java Driver
Java Driver
Fonctionnalités Query Query Builder Prepared Statements Exécution asynchrone Métriques Politiques
www.ippon.fr www.atomes.com www.ippon-mobile.fr http://blog.ippon.fr
AG
ILIT
E
Java Driver - QueryBuilder
QueryBuilder : Construction de requêtes typées Fluent API
Opérations supportées SELECT UPDATE INSERT DELETE BATCH
Pas encore d’opérations de DDL (prévu en 1.1.0)
www.ippon.fr www.atomes.com www.ippon-mobile.fr http://blog.ippon.fr
Java Driver – Policies
ReconnectionPolicy ConstantReconnectionPolicy // ré-éssai à intervall régulier ExponentialReconnectionPolicy
LoadBalancingPolicy DCAwareRoundRobinPolicy // load balance au sein d'un DC RoundRobinPolicy TokenAwarePolicy // load balance sur les nœuds qui ont la data
RetryPolicy DowngradingConsistencyPolicy LoggingRetryPolicy
www.ippon.fr www.atomes.com www.ippon-mobile.fr http://blog.ippon.fr
AG
ILIT
E
CONCLUSION
Java Driver utilise un nouveau socle tourné vers les futures releases de Cassandra CQL 3
Adoption par utilisateurs SQL facilitée Représentation logique de stockages spécifiques
CQL Binary Protocol Taillé pour la forte volumétrie Permettra d'accueillir de nouvelles fonctionnalités (ex : curseurs)
1ère implémentation de ces 2 soclesAPI très agréable à utiliserTrès configurable/extensible
www.ippon.fr www.atomes.com www.ippon-mobile.fr http://blog.ippon.fr
Liens
C* Summit 2013 : http://planetcassandra.org/Learn/CassandraSummit
NYC* 2013 - New Cassandra Drivers in Depth« » Michael Figuière
Documentation : http://www.datastax.com/doc-source/developer/java-driver/
Benchs https://github.com/brianfrankcooper/YCSB https://github.com/vberetti/YCSB