Jan.01

Premiers pas avec le NOSQL

Comme tout le monde, j’ai appris les bases de données avec le SQL. Ce système a de nombreuses qualités telles que la complexité possible des requêtes, les jointures, les opérations logiques et mathématiques, les structures de contrôles, ou encore la gestion des clés dépendantes.

Cependant, quand on travaille avec d’énormes quantités de données (je vous parle de dizaines ou centaines de millions de lignes), les bases SQL s’écroulent rapidement en terme de performances, c’est pourquoi je vous propose une introduction rapide au NOSQL.

Mais d’abord, qu’est-ce que le NOSQL ?

Tout d’abord, cela ne signifie pas « NO – SQL » mais bien « Not Only SQL » (Traduisez par « pas seulement du SQL »), et c’est donc un système de gestion de bases de données qui n’est plus basé sur une architecture relationnelle, et ne dispose plus de conteneurs logiques tels que le concept de table. De plus, les bases de données de ce type ne sont généralement pas interrogées en SQL.

Différents types de sgbd NOSQL:

  • Orienté objet: stockage d’objets persistants (ex: objets java)
  • Orienté colonnes: stockage des données en les groupant par colonne
  • Orienté documents: stockage de documents texte (généralement en JSON)
  • Orienté graphe: Stockage utilisant la théorie des arcs: stockage en arcs et nœuds.

Pour illustrer les concepts de base, nous allons nous orienter vers le stockage en documents.

JSON ?

Le JSON (pour « Javascript Object Notation« ) est un format de données sous forme de texte, hérité du Javascript. Il permet une représentation textuelle et structurée d’une information. On la préfère souvent au xml pour des raisons de vitesse d’encodage/décodage et de compression de l’information.

Exemple d’encodage-décodage classique:

<?php
$data = array('nom' => 'Cambier', 'prenom' => 'Romain', 'charact' => array('yeux' => 'bleu', 'taille' => 175));
$jsonEncoded = json_encode($data);
//$jsonEncoded contient maintenant:
//{
// "nom":"Cambier",
// "prenom":"Romain",
// "charact":{
//   "yeux":"bleu",
//   "taille":175
// }
//}
$jsonDecoded = json_decode($jsonEncoded, true);
//$jsonDecoded contient maintenant la même structure que $data

Structurer ses données:

Passer du schéma de table au schéma de document est très simple, puisqu’il suffit de reprendre tous les champs dans le document:

Table sql Document
Objet utilisateur
string uid
string nom
string prenom
int age
string email
string password
array amis
"utilisateur::uid_ici":{
  "nom": "Cambier",
  "prenom": "Romain",
  "age": 22,
  "email": "me@romaincambier.be",
  "password": "azertyuiop",
  "amis": [
    "pierre",
    "etienne",
    "jean"
  ]
}

Vues en NOSQL:

Une vue est, de façon très résumée, une requête de sélection pré-enregistrée et que le sgbd exécute et met à jours automatiquement, même sans que celle-ci soit appelée par un client. Généralement, les vues se programment en javascript et voici un exemple lié à schéma précédent:

//vue pour trouver tous les utilisateurs de moins de 25 ans ou avec au moins un amis
function (doc, meta) {
  if(doc.age <= 25 || doc.amis.length > 0){
    emit(meta.id, doc);
  }
}

Ceci aura donc pour effet de retourner tous les utilisateurs correspondant à la condition sous le format:

id du document document

C’est tout pour cette intro rapide. Pensez à voir mon article sur CouchBase, un sgbd NOSQL orienté document ultra-performant! (soon)

Tech&Dev

Leave a comment

Comment