jeudi 22 avril 2010

Cassandra - 3) Organisation des données

Une chose qui est probablement nouvelle pour les gens habitués à travailler sous SQL et dans les bases de données orientées colonnes est l'organisation des données dans Cassandra. Elle est hiérarchisé selon un principe assez simple.
On peut identifier 6 niveaux dont 1 qui n'existe pas forcément (SuperColumn) :
  • Cluster
  • Keyspace
  • ColumnFamily
  • Key
  • SuperColumn ( facultatif )
  • Column
Voyons ce que représente chacun de ses niveaux :


Cluster :

C'est le plus "gros" élément d'une base de donnée cassandra. Le node est défini au niveau d'un groupe de serveur et pas seulement au niveau d'un site.

Keyspace :
Espace où réside les données. Il faut penser cette structure comme l'ensemble des données que gère un site donné.

ColumnFamily :
Ensemble de clés. Il faut penser ça comme une "unité logique" où des informations d'un même genre ou sur un même sujet sont classés. Par exemple dans un réseau social ce sera Users ou Pictures.

Key :


L'unité de base, identifiant d'un ensemble de Columns ou SuperColumns suivant ce que vous avez décidé pour le type de votre ColumnFamily. Elle correspond à une entrée particulière.

SuperColumn :

Structure de données qui est un ajout de Facebook (et oui, ils ne font pas que voler les informations de tout le monde; parfois ils aident !). Les SuperColumn sont des Columns où chaque value est un ensemble de Column(s). Ceci sera expliqué plus bas.

Column :

Là où résident véritablement les données. Un(e) "Column" est identifié par son nom et une valeur.
Sous Cassandra les données sont enregistrées en byte[], donc vous devez faire la conversion pour retomber sur des strings ou autre types de données.


Un exemple pour illustrer tout cela : 

On n'apprend jamais mieux que par l'exemple. L'exemple de base est Twitter en général, mais moi, étant contrariant, je vais prendre Facebook.
Ce que je vais proposer est une solution pour organiser ses données sur Facebook, ce n'est évidemment pas la leur, cependant cela vous aidera à comprendre une organisation réelle dans Cassandra :

Cluster : FacebookSuperServers{
  KeySpace : FacebookInformations{
    ColumnFamily : Users{
      Key : victorkabdebon{
        SuperColumn : General Informations {
          Column : Name {
            value : Kabdebon
         }
         Column : Prenom {
           value : Victor
         }
        }
        SuperColumn : Amis{
          Column : Ami1{
             value : Hector
           }
       }
     }
    }
  }
}







Un peu de Twitter quand même :


Ce lien vous conduira vers la structure d'un Tweet.



FIN


J'espère vous avoir intéressé encore une fois.
Si vous avez des commentaires, questions ou corrections n'hésitez pas à m'envoyer un mail ou poster un commentaire. Merci !

Aucun commentaire:

Enregistrer un commentaire