samedi 1 mai 2010

Cassandra 6) Utiliser un client haut-niveau

Maintenant que nous avons installé les bases de données dans Cassandra il faut les exploiter et y insérer des données.
Dans la suite nous allons travailler avec Java (et peut être C++ quand le client sera mis à jour)

Il existe deux façons d'utiliser Java avec Cassandra :
_Utiliser directement Thrift, qui est développé par la fondation Apache. cependant pour débuter ce n'est pas simple du tout et pas très pratique non plus.
_Utiliser un client de plus haut niveau. C'est la solution que nous allons choisir.

1) Installation du client :

Dans la suite nous allons tirer partie du client Hector, qui est une implémentation modèle des méthodes Thrift que l'on a à disposition. Ce projet est bien suivi, mis à jour régulièrement et possède une communauté active et qui pourra répondre à vos questions.

C'est ici que vous pourrez télécharger la dernière version d'Hector
Pour vous rendre sur la page d'aide des utilisateurs d'Hector, c'est ici

L'installation dans un IDE se fait simplement en ajoutant le JAR (ainsi que les autres dont hector a besoin) dans les librairies.

Il existe Cassandra pour bien d'autres langages et je vous invite à parcourir la page http://wiki.apache.org/cassandra/ClientOptions.
Vous y trouverez une sélection de client pour un grand nombre de langages.

2) Premiers pas

Hector a été conçu pour être simple, il possède un système de choix de serveur pour l'inclusion des keys dans votre base est très sommaire et ne prend pas en compte la disponibilité de chacun etc... Il opère un choix aléatoire.

Malgré tout, c'est un excellent choix et nous allons voir comment se débrouiller avec ce client.

Voici ce qu'on fait avec Hector pour ouvrir une connexion vers Cassandra :

CassandraClientPool pool = CassandraClientPoolFactory.INSTANCE.get();
CassandraClient  client = pool.borrowClient("localhost", 9160);
Keyspace keyspace = client.getKeyspace("ImitationFacebook");

Une fois que vous avez fait cela, vous avez établi votre connexion vers votre base de données.
ATTENTION : N'oubliez pas de relâcher votre client après vos opérations, en faisant ce bout de code :
 pool.releaseClient(client);

Hector commence par prendre un client, puis lui attribue un serveur. Ici on a pris l'exemple où la base de données est installé sur le même serveur que celui qui fait la requête et communique avec le port 9160.
Puis le client ouvre le keyspace qui nous intéresse, ici ImitationFacebook.

3) Premières requêtes


CassandraClientPool pool = CassandraClientPoolFactory.INSTANCE.get();
CassandraClient  client = pool.borrowClient("localhost", 9160);
Keyspace keyspace = client.getKeyspace("ImitationFacebook");
ColumnPath columnPathUser = new ColumnPath("Utilisateurs");
columnPath.setColumn(StringUtils.bytes("nom"));
keyspace.insert("kabdebon",columnPathUser, StringUtils.bytes("Kabdebon"));
pool.releaseClient(client);



Voilà la première requête a été faite grâce à Hector sur Cassandra !
N'oubliez pas d'entourer ce bloc de code de try /catch ou de throw les exceptions qui pourraient survenir.

Qu'avons nous fait au juste ?
Dans cet exemple nous avons juste inséré à la clé "kabdebon" une Column "nom" avec la valeur "kabdebon". Il y a pas mal de choses qui se sont passées juste pour faire cela :
1) Ouverture de la connexion vers le keyspace
2) Création d'un columnPath (comprendre chemin vers une colonne) où on a indiqué la ColumnFamily et le nom de la Column où on souhaitait insérer les données.
3) Insertion des données.

Pourquoi avoir recours à StringUtils ?

StringUtils est inclus dans la librairie Hector. Par défaut thrift ne prend en entrée que des byte[], ce petit utilitaire permet de faire une conversion String UTF8 -> byte[].

2 commentaires:

  1. Super vos aticles !
    ça permet d'y voir un peu plus clair !
    Par contre, est-ce possible d'avoir le même en php ?

    RépondreSupprimer
  2. Pardon ludivine de ne pas avoir repondu plus tot. En effet il existe la meme chose en PHP !

    Par contre je ne sais pas si les options de pooling sont activees par contre ou si c'est un simple wrapper.

    Veuillez vous reporter aux adresses suivantes :

    http://github.com/mjpearson/Pandra
    http://github.com/hoan/phpcassa

    Dans mon prochain article j'en parlerai.

    Cordialement,Victor

    RépondreSupprimer