Le Problème :
Grand volume de données
Constamment mises à jour
(lectures/écritures)Plus (+) d’utilisateurs
Plus (+) de services
Plus (+) de services
Plus (+) rapide
Système distribué
(plusieurs serveurs à travers le monde)Impossible de définir un modèle relationnel adapté
La Solution :
Redéfinir un système plus adapté, qui soit :
Rapide
Extensible
(ajout de données, sans redéfinir le modèle)Robuste
(un grand volume de données)Robuste
(un grand volume de données)Distribué
Tolérant aux fautes
Projet Cassandra
Plan
1.
Origines de Cassandra
2.No-SQL
1. Qu’est-ce que c’est ?
2. Modèle Orienté Colonnes
2. Modèle Orienté Colonnes 3.
Cassandra
1. Modèle de données
2. Utilisation
3. Avantages & Inconvénients
Origines de Cassandra (1)
Élaborée pour Facebook®
Par:
Avinash Lakshman
(un auteur de Amazon® Dynamo®)Avinash Lakshman
(un auteur de Amazon® Dynamo®)Malik Prashant
(ingénieur chez Facebook®)
Juillet 2008 : Open-Source via Google Code
Mars 2009 : Incubateur de la fondation Apache®
Origines de Cassandra (2)
Modèle de données de Google® BigTable®
no-sql orienté colonnes, architecture de stockage
Technologie des systèmes distribués de Amazon®
Dynamo®
Dynamo®
réplication, tolérance aux fautes, gestion des clusters
Origines de Cassandra (3)
Utilisée par :
Plan
1.
Origines de Cassandra
2.No-SQL
1. Qu’est-ce que c’est ?
2. Modèle Orienté Colonnes
2. Modèle Orienté Colonnes 3.
Cassandra
1. Modèle de données
2. Utilisation
3. Avantages & Inconvénients
No-SQL
No-SQL pour « Not Only Structured Query Language »
Terme inventé & introduit par Carlo Strozzi en 1998
Pas de modèle relationnel
4 types de No-SQL
4 types de No-SQL
Cassandra: Orienté Colonnes
No-SQL - Orienté Colonne (1)
Organisée en ColumnFamily
(sim. Tables (SGBD Relationnel)
Pas de données « vides »
Alors que le Relationel: cell_value = null ou ‘ ’
Dynamique vs. Statique
Dynamique vs. Statique
Ajouter autant de colonnes à une ligne que nécessaire.
No-SQL - Orienté Colonne (2 – Ex.)
Millions de colonnes !
Facile d’en ajouter
Par ex : ‘Pseudo’ en + de ‘Nom’ et ‘Prénom’, dans FaceBook® v4 ?
No-SQL - Orienté Colonne (2)
Cassandra ajoute les « SuperColumns »
Requêtes sur un ensemble de SuperColumns
Plan
1.
Origines de Cassandra
2.No-SQL
1. Qu’est-ce que c’est ?
2. Modèle Orienté Colonnes
2. Modèle Orienté Colonnes 3.
Cassandra
1. Modèle de données
2. Utilisation
3. Avantages & Inconvénients
Modèle de données
Cluster
Keyspace
ColumnFamily Key
Le « node » est défini au niveau d'un groupe de serveur et pas seulement au niveau d'un site.
Key
SuperColumn( facultatif ) Column
Value
Modèle de données
Cluster
Keyspace
ColumnFamily Key
Espace où réside les données. Il faut penser cette structure comme
l'ensemble des données que gère un site donné.
Key
SuperColumn( facultatif ) Column
Value
site donné.
Défini dans « storage-conf.xml »
Modèle de données
Cluster
Keyspace
ColumnFamily Key
Ensemble de clés-valeurs. (~Tables)
Key
SuperColumn( facultatif ) Column
Value
Modèle de données
Cluster
Keyspace
ColumnFamily
Key Ensemble de (Super)Colonnes. (~Ligne)
Key
SuperColumn( facultatif ) Column
Value
Ensemble de (Super)Colonnes. (~Ligne)
Modèle de données
Cluster
Keyspace
ColumnFamily Key
Key
SuperColumn( facultatif ) Column
Value
Introduit par Facebook®.
Sur-ensemble pour désigner facilement un ensemble de colonnes.
(Value=List<Column>)
Modèle de données
Cluster
Keyspace
ColumnFamily Key
Key
SuperColumn( facultatif ) Column
Value
Là où réside la donnée.
Column:Value, où Column serait le nom d’une colonne en Relationnel.
Name : byte[] (tri)
Modèle de données – Exemple
ColumnFamily : Users{
Key : ‘a234f-67d34-a23fb’ {
SuperColumn : General Informations { Column: LastName {value : Zuckerberg}
Column: FirstName{value : Mark}
Column: BirthDate{value : 1984-05-14}
Column : BirthDate{value : 1984-05-14}
}
SuperColumn : Amis{
Column : Ami1{value: id_ami1}
Column : Ami2{value: id_ami2}
}
Plan
1.
Origines de Cassandra
2.No-SQL
1. Qu’est-ce que c’est ?
2. Modèle Orienté Colonnes
2. Modèle Orienté Colonnes 3.
Cassandra
1. Modèle de données
2. Utilisation
3. Avantages & Inconvénients
Utilisation – Lectures (1)
API: Thrift
(+12 Langages)get($params) → Column
get_slice($params) → list<Column>
mulitget_slice($params) → map<key, list<Column>>
mulitget_slice($params) → map<key, list<Column>>
get_count($params) → int
multiget_count($params) → map<key, int>
get_range_slices($params)
Utilisation – Lectures (2)
En Interne :
MemTable
Serveur le plus proche Réparation Auto.
Réparation Auto.
Attend N réponses
Utilisation – Écritures (1)
API :
insert()
batch_insert() remove()
remove()
batch_mutate()
Utilisation – Écritures (2)
En Interne :
Le client demande l’écriture d’une donnée, n’importe où dans le cluster.
Écriture dans le commit-log, puis dans la mémoire.
Écriture dans le commit-log, puis dans la mémoire.
Le Partitionner décide des serveurs propriétaires de la donnée.
Le commit-log est stockée sur la machine client, sur un
disque local dédié
Utilisation – Écritures (2)
En Interne :
Utilisation – Écritures (3)
Avantages :
Pas de “lock”
Accès disque séquentiel
Atomicité garantie pour une “ColumnFamily”
Atomicité garantie pour une “ColumnFamily”
Toujours accessible en écriture, même en cas de problème
Les données sont ordonnées par ordre de clé
Plan
1.
Origines de Cassandra
2.No-SQL
1. Qu’est-ce que c’est ?
2. Modèle Orienté Colonnes
2. Modèle Orienté Colonnes 3.
Cassandra
1. Modèle de données
2. Utilisation
3. Avantages & Inconvénients
Avantages (1)
• Temps accès très rapide
Ex: Table >50 GigaBytes de données (source: Apache)
>50Go MySQL Cassandra Écriture 300 ms 0.12 ms
• Scalabilité Horizontale + Serveurs = + Performances.
• Décentralisé >> Pas de point unique de défaillance
• Load balancing (Répartition de la charge)
• Réplication Automatique
Écriture 300 ms 0.12 ms
Lecture 350 ms 15 ms
Avantages (2)
• Open Source >> Gratuit et Libre
• Protégé contre les injections SQL
>> Certainement l’avenir des grosses BD
>> Certainement l’avenir des grosses BD
Inconvénients
• Pas de SQL « Simple » (Select … From…)
• Pas de GUI. Travaux en cours…
• Besoin de place sur le disque local/Memtable pour une valeur
« atomique »
« atomique »
• Plus adapté aux grandes BD.
• Pas « très simple » à mettre en place et à utiliser
• Pas de « joins » comme en SQL Relationnel
• Pas de requêtes sur les valeurs des données (à venir, v0.8)
Sources
Sites Indépendants (FR) :
http://www.betecommechou.com/2009/07/cassandra-le-modele-de-donnees/
http://blogexpertease.alti.com/index.php?2010/03/02/156-le-projet-cassandra-de-apache http://victor-kabdebon.blogspot.com/ (auteur de VoxNucleus)
http://blog.xebia.fr/2010/05/04/nosql-europe-bases-de-donnees-orientees-colonnes-et- cassandra/
http://pro.01net.com/editorial/513928/digg-adopte-a-son-tour-nosql-et-abandonne-mysql/
http://pro.01net.com/editorial/513928/digg-adopte-a-son-tour-nosql-et-abandonne-mysql/
http://blog.octo.com/nosql-jouons-avec-cassandra-13/
Sites Indépendants (EN) :
http://blog.evanweaver.com/articles/2009/07/06/up-and-running-with-cassandra/
Autres présentations sur Slideshare Sites officiels :
http://wiki.apache.org/cassandra/