Developpez.com - Rubrique NoSQL

Le Club des Développeurs et IT Pro

Introduction au NoSQL Apache Cassandra : installation, prise en main rapide et outils d'administration,

Par Mickael Baron

Le 2013-01-12 21:46:08, par Mickael Baron, Rédacteur
Bonjour,

Je vous propose un premier article d'une série de cinq sur la base de données NoSQL Apache Cassandra. Cet article présente brièvement les fonctionnalités, l'installation, une première prise en main et quelques outils d'administration.

Le lien de l'article est ici : http://mbaron.developpez.com/nosql/c...dministration/

Profitez de cette discussion pour donner vos commentaires

Mickael
  Discussion forum
8 commentaires
  • Traroth2
    Membre émérite
    Cette série d'articles a l'air prometteuse. Vivement la suite...
  • dtcSearch
    Membre actif
    Ça fait longtemps que j'ai pas vu une techno qui me passionne autant que Cassandra.

    J'ai un projet à monté et les problèmes que je rencontre à l'heure actuelles sont:
    - l'order by (cette notion en CQL de pouvoir faire qu'un order by sur une seul colonne défini à la création de la table est très contraignante mais logique au vu de comment est construit Cassandra et des performances obtenu)
    - peur de la panne!! (c'est pas MySQL qui tourne depuis 10 ans... sans broncher)

    J'ai hâte aussi de lire les articles suivants, y'a tellement à apprendre sur Cassandra Y'a tellement peu de chose à son sujet (les seuls articles valables hormis ceux sur developez.net proviennent de quelques blog et de http://planetcassandra.org/Learn/SlideShare )

    En tout cas, merci beaucoup.
  • Mickael Baron
    Rédacteur
    Bonjour,

    Merci pour tes commentaires.

    J'ai vu qu'il allait y avoir pas mal de nouveautés sur CQL 2 (http://www.datastax.com/dev/blog/cql...-cassandra-2-0)

    Pour les autres articles, il faut que je trouve le temps de continuer.

    Mickael
  • hugo123
    Rédacteur
    J'ai fait il y a pas longtemps un bench sur un cluster de 3 noeuds sur elasticsearch, mongodb, cassandra et mysql pour une utilisation en tant qu'entrepot de log et j'ai été plutôt déçu par l'utilisation de Cassandra (prise en main et perfs).
    Je suis donc impatient de lire tes articles pour voir si j'avais raté quelque chose.
  • Mickael Baron
    Rédacteur
    Bonjour Hugo,

    Pour l'instant tu as fait plus que moi.

    De mon côté, nous avons expérimenté un cluster de 5 machines sur une structure de données assez simple (une seule column familly dont le nombre de colonnes était dynamique). L'insertion par parquet de million s'est faite sans problème. Nous avons vu clairement la linéarité de Cassandra au fur et à mesure que nous insertions et que nous ajoutions des serveurs.

    Par contre, le gros soucis venait du select. Nous sommes clairement en apprentissage sur ce NoSQL. Trop d'habitude du relationnel. En plus avec CQL c'est assez trompeur, on a envie de faire du SQL

    Mickael
  • dtcSearch
    Membre actif
    le ORDER BY me manque...

    franchement, j'y arrive pas, j'ai passé 2 jours à trouver un moyen de pouvoir filtrer et impossible de faire un ORDER BY sur ce que je souhaite.

    c'est pas simple... Si quelqu'un à une idée?
    Je souhaite resté en random, mais je souhaite aussi pouvoir faire un trie.
    Normalement c'est possible, mais c'est l'organisation qu'il doit être fait...

    Cas concret, j'ai une "table" avec des images (id, nom, taille, date d'insertion, date de mise à jours, si_visible...)
    et j'aimerai pouvoir faire un select de mes images en fonction de si_visible et de les trier par date de mise à jours

    jusqu'à présent, j'y arrive pas sans passer en orderedbytemachin.

    Alors je me sus dit, tiens, on crée une autre "table" avec pour info:
    id_image, date de mise à jours, si_visible) et on fait une clé qui est si_visible puis id_image. Et quand je fais un select dessus, j'utilise les ID renvoyé pour récupéré mes images dans ma "table" images.
    mais quand je fais mon select dessus il me dit toujours pareil:
    Code :
    Bad Request: ORDER BY is only supported when the partition key is restricted by an EQ or an IN.
    Sniff, c'est tout ce qui me manque...

    Il est pourtant possible de le faire en CQL3 mais dans des cas particuliers, si quelqu'un voit comment faire dans mon cas.

    J'ai peur que Cassandra ne soit pas utilisable dans mon cas (et pourtant, hormis ça c'est le seul point qui manque)

    ps: le pire c'est que ça doit être tout bête; mais personne en parle vraiment...
  • forrestdg
    Membre régulier
    Envoyé par dtcSearch
    le ORDER BY me manque...

    franchement, j'y arrive pas, j'ai passé 2 jours à trouver un moyen de pouvoir filtrer et impossible de faire un ORDER BY sur ce que je souhaite.

    c'est pas simple... Si quelqu'un à une idée?
    Je souhaite resté en random, mais je souhaite aussi pouvoir faire un trie.
    Normalement c'est possible, mais c'est l'organisation qu'il doit être fait...

    Cas concret, j'ai une "table" avec des images (id, nom, taille, date d'insertion, date de mise à jours, si_visible...)
    et j'aimerai pouvoir faire un select de mes images en fonction de si_visible et de les trier par date de mise à jours

    jusqu'à présent, j'y arrive pas sans passer en orderedbytemachin.

    Alors je me sus dit, tiens, on crée une autre "table" avec pour info:
    id_image, date de mise à jours, si_visible) et on fait une clé qui est si_visible puis id_image. Et quand je fais un select dessus, j'utilise les ID renvoyé pour récupéré mes images dans ma "table" images.
    mais quand je fais mon select dessus il me dit toujours pareil:
    Code :
    Bad Request: ORDER BY is only supported when the partition key is restricted by an EQ or an IN.
    Sniff, c'est tout ce qui me manque...

    Il est pourtant possible de le faire en CQL3 mais dans des cas particuliers, si quelqu'un voit comment faire dans mon cas.

    J'ai peur que Cassandra ne soit pas utilisable dans mon cas (et pourtant, hormis ça c'est le seul point qui manque)

    ps: le pire c'est que ça doit être tout bête; mais personne en parle vraiment...
    'order by' marche seulement pour les 'clustering keys' , avec des bon filtres et qu'apres que tes rows soit trouvees avec la partition key. Comme indique ton message d'erreur il faut que t'ajoute la contrainte sur ta partition key. Attention, ce genre d'operations ne guarantit pas des perfs canon d'habituelle de Cassandra.

    Sur la partition key, comme son nom indique, elle sert a distribuer (partition) tes rows parmi les noeuds de Cassandra. Comme tu utilise un RandomPartioner les rows sont distribues de maniere "aleatoire" via un hash -> order by un partition key n'est pas possible par conception.

    Comme expliquer plus haut dans cette discussion, il ne faut pas prendre Cassandra comme du RDBMS (si non Oracle ou MySQL ferait bien l'affaire). Je te conseille de regarder les videos de DataStax/PlanetCassandra sur "data modeling" sur Youtube...
  • forrestdg
    Membre régulier
    Envoyé par hugo123
    J'ai fait il y a pas longtemps un bench sur un cluster de 3 noeuds sur elasticsearch, mongodb, cassandra et mysql pour une utilisation en tant qu'entrepot de log et j'ai été plutôt déçu par l'utilisation de Cassandra (prise en main et perfs).
    Je suis donc impatient de lire tes articles pour voir si j'avais raté quelque chose.
    De manière générale, Cassandra ne bat pas mongoDB tant que tes donnes tiennent encore dans la RAM. As-tu fais des tests avec des données plus consequentes?