Lily, un CMS NoSQL

Comme vous l’avez lu dans le post de Piwai, hier soir se tenait le barcamp Java & Cloud organisé par et chez SFEIR. Etaient présents Kohsuke Kawaguchi, créateur de Jenkins/Hudson ainsi que Steven Noels, l’un des développeur de Lily.

NoSQL, kézako ?

Pour les néophytes, le mouvement NoSQL – prononcé “nossiquouel” – propose une alternative aux bases de données relationnelles telles que MySQL, Oracle, PostgreSQL etc. On distingue en particulier ces différents types de base de données :

  • Clé / Valeur : Riak, Redis, …
  • Graph : Neo4J, …
  • Document : Couch DB, Mongo DB, …
  • Colonne : Hadoop/HBase, Cassandra, …

L’engouement pour les bases NoSQL est la conclusion logique de l’ère Web 2.0. Les données stockées sont aujourd’hui beaucoup plus importantes qu’elles n’ont pu l’être avant, et les besoins ont changé. On a aujourd’hui besoin de pouvoir stocker/lire très rapidement des millions de données (prenez l’exemple de Facebook par exemple) mais aussi, avec le cloud, d’avoir des systèmes “scalable” – ou élastiques.

Pour répondre à cette demande, de nombreux projets de bases NoSQL sont apparus, on distingue 2 publications qui ont servi de point de départ à certains de ces projets :

  • BigTable de Google sur lequel est basé Hadoop/HBase ;
  • Dynamo d’Amazon sur lequel repose Cassandra – initié par Facebook.

Lily

Lily se veut être une base de données NoSQL prête pour le Cloud (ie. scalable), avec possibilité de stocker, indexer et rechercher du contenu de n’importe quel type (texte, images, vidéos, documents binaires, …). Lily est une combinaison de plusieurs technologies existantes telles que :

  • Hadoop pour le File System de stockage ;
  • HBase pour l’API permettant de stocker des données dans Hadoop ;
  • SolR comme moteur de recherche ;
  • Zookeeper qui permet la scalabilité de Lily.

Lily aggrège ces diverses technologies pour proposer un ensemble cohérent, et elle fournit une abstraction de HBase permettant de spécifier plus facilement un modèle de données.

Schemas et Instances

Afin de créer des schémas et stocker des données dans Lily, il y a 3 possibilités :

  • Un fichier JSON
  • Un fichier XML
  • Une API Java

Pour illustrer la création de ces schémas et des instances, voici un exemple en JSON.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
{
  namespaces: {
    "org.sample.person": "p"
  },
  fieldTypes: [
    {
      name: "p$name",
      valueType: { "primitive": "STRING" },
      scope: "versioned"
    },
    {
      name: "p$birthDay",
      valueType: { "primitive": "DATE"},
      scope: "non_versioned"
    }
  ],
  recordTypes: [
    {
      name: "p$Person",
      fields: [
        {name: "p$name", mandatory: true },
        {name: "p$birthDay", mandatory: true }
      ]
    }
  ],
  records: [
    {
      type: "p$Person",
      fields: {
        "p$name": "Anonymous Coward",
        "p$birthDay": "1978-10-13"
      }
    }
  ]
}

Comme vous pouvez le voir, on distingue 3 choses :

  • Un Namespace, utile à Lily pour distinguer les schémas et éviter les conflits de nommage.
  • Des FieldTypes, qui servent à déclarer tous les champs existants dans ce schéma. Chaque FieldType a un ValueType.
  • Des RecordTypes, qui servent à déclarer les types d’enregistrement, qu’on peut comparer (mais de très loin) aux tables d’un SGBDR.
  • Enfin, un Record, qui correspond à des données qui seront stockées

Lily & SolR

Si on s’en tient au fichier JSON précédent, vous ferez de Lily une simple couche supplémentaire de HBase, ce qui peut être utile, mais une des vraies forces de Lily est d’intégrer SolR. En effet, vous pouvez utiliser SolR comme d’habitude, et choisissant les champs à indexer et SolR le fera. Attention cependant, il faut aussi créer un fichier de mapping entre Lily et SolR.

Je n’en dirai pas plus sur le sujet, le but étant de faire une introduction de Lily, mais vous pouvez retrouver toutes ces informations et beaucoup plus sur le site officiel du projet Lily ;-)

VN:R_U [1.9.22_1171]
Rating: 0 (from 0 votes)
Share

À propos de Romain Sertelon

Vous pouvez me suivre sur Twitter et sur Google+ et voir mes débuts sur Github
Ce contenu a été publié dans Java, avec comme mot(s)-clef(s) , , , . Vous pouvez le mettre en favoris avec ce permalien.

Laisser un commentaire