Apache CouchDB

Le choix de la technologie utilisée pour votre base de données est toujours un choix délicat et déterminant dans la bonne conduite de votre projet. Aujourd'hui de nombreuses solutions existent (PostgreSQL, Oracle, MongoDB, etc...). J'ai décidé de vous présenter la solution fournie par Apache, "Apache couchDB". Cette solution faisant partie de la mouvance NoSQL, est un système de gestion de base de données orienté documents (formaté en JSON) et écrit en langage Erlang. De plus, elle possède une API REST qui permet de faire toutes les opérations nécessaires sur une base de données telles que des insertions, modifications ou suppressions de données. Mais également d’effectuer des requêtes complexes qui pourront être réalisées à l'aide du patron d'architecture MapReduce.

Installation

L'installation de CouchDB est très simple :

Sous linux : Installez le paquet 'couchdb'

Sous Windows : Téléchargez l'installeur sur le site officiel : http://couchdb.apache.org/

Configuration

Lorsque vous installez Apache couchDB, une interface web "fauxton" est mise à notre disposition et est disponible à l'url suivante : http://localhost:5984/_utils/

Rendez-vous dans l'onglet Setup afin de configurer votre SGBD. Comme vous pouvez le constater, vous pouvez soit utiliser le SGBD en cluster ou de manière simple. Dans la suite de ce blog, la manière simple a été choisie. De plus, veuillez conserver vos identifiants et mot de passe d'administrateur car ils vous seront utiles par la suite.

Je vous conseille fortement de faire un tour dans les différents onglets afin d'avoir une vision globale et voir les différentes possibilités offertes par cette solution.  De plus toutes les opérations faites à partir d'interface web fauxton, ne sont que des opérations utilisant l'API REST. Toutes vos opérations de gestion sont donc directement accessibles à partir d'un client HTTP.

Pour la suite de ce tutoriel, nous allons utiliser l'outil CURL afin d’interagir avec notre SGBD.

Vos premiers pas

Dans la suite de ce tutoriel, remplacer les variables {login} et {password} par vos identifiants de connexion.

Votre base de données

Tout d'abord, il faut créer votre base de données. Pour cela exécutez la commande suivante :

curl -X PUT "http://{login}:{password@}localhost:5984/tutoriel"

Vous pouvez récupérer les informations de votre base de données en changeant juste votre requête précédente par un "GET" au lieu de 'un "PUT".

Vos documents

Ajoutez votre premier document à l'aide de la commande suivante :

curl -X PUT -d '{
  "key":"value",
  "key2": "value2",
}' "http://{login}:{password}@localhost:5984/tutoriel/document1"

Document1 correspond à l'ID de votre document dans la BD.

Si l'id de votre document n'est pas une information pertinente, vous pouvez utilisez le générateur d'ID en modifiant la requête précédente :

curl -X POST-d '{
  "key":"value",
  "key2": "value2",
}' "http://{login}:{password}@localhost:5984/tutoriel"

Vous êtes en mesure de vous demander, "Mais comment va-t-on récupérer notre document si nous n'avons pas l'id de notre document ?". Ne vous inquiétez pas ! Vous allez pouvoir récupérer l'ID de votre document créé dans la réponse.

Ci dessous la réponse :

{
  "ok": true,
  "id": "9c6f1609108b916f4f1b0fc57a002a5c",
  "rev": "1-39a1425bfd11d27b3f95368f52142937"
}

L'API nous fournit 3 informations :

ok Booléan de confirmation de la création du document
id L'id du document créé
rev Le numéro de révision

Le numéro de révision permet aux SGBD de détecter les éventuels conflits de modification d'un document. En effet si vous voulez modifier votre document, il vous faudra avoir au-préalable récupéré ce champ "rev" afin de pouvoir le mettre à jour.

Votre requête pour modifier votre document :

curl -X PUT-d '{
  "key":"value",
  "key2": "value2",
   rev": "1-39a1425bfd11d27b3f95368f52142937"
}' "http://{login}:{password}@localhost:5984/9c6f1609108b916f4f1b0fc57a002a5c"

Ce paramètre est aussi utile lors de la suppression du document :

curl -X DELETE "http://{login}:{password}localhost:5984/9c6f1609108b916f4f1b0fc57a002a5c?rev=1-39a1425bfd11d27b3f95368f52142937"

MapReduce

Maintenant que vous savez comment insérer vos documents. Je vais vous montrer comment construire vos requêtes à l'aide du patron d'architecture MapReduce.

Créez votre première vue :

curl -X PUT -d '{"_id":"_design/newDesignDoc",
"views":{
"new-view":{"map":"function (doc) {\n  emit(doc._id, 1);\n}",
"reduce":"_count"}},
"language":"javascript"}' "http://{login}:{password}@localhost:5984/tutoriel"

Il est important que votre id commence par "_design". En effet toutes vos vues sont stockées dans le répertoire "{nom de votre base}/_design/{nom de votre vue}".

Votre fonction "map" est celle qui va parcourir tous vos documents afin de, comme son nom l'indique, créer une map, qui va contenir l'id de votre document et la valeur 1, dans le cas présent.

La fonction "reduce" est une fonction d'agrégats, qui va vous permettre d'obtenir un seul résultat à partir de votre map issu de la fonction "map". Certaines fonctions sont déjà prédéfinies comme "_count,_stats,_sum".

Afin de voir le résultat il vous suffit d'effectuer la commande suivante :

curl -X GET
"http://{login}{password}@localhost:5984/tutoriel/_design/newDesignDoc/_view/new-view"

À noter que vous pouvez choisir de ne pas effectuer l'étape de réduction en rajoutant à la fin de l'url "&reduce=false".

Conclusion

Apache CouchDB est un SGBD qui se veut bien plus qu'une simple base de données. En effet, de par son API REST, la base de données est directement accessible à l'aide de simples requêtes HTTP. On peut facilement imaginer une application avec une architecture en front (framework JS) et en back notre SGBD. Cette solution a été imaginée dans ce but, en proposant une basic-authentification et bien sûr la possibilité d'activer l'échange de ressources de différents domaines en l'activant tout simplement à partir de l'interface web (Onglet configuration -> CORS). N'oubliez pas qu'avec cette solution tout est document (gestions des droits utilisateurs, des bases de données, des indexes, de la réplication, etc ..) et que toutes les opérations peuvent se faire à partir de l'API REST !

Quelques liens

 

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Captcha *