Apache CouchDB et GeoCouch :
Concepts, API et exemples
UE « Systèmes d'Information Tactiques »
Master 2 Génie Logiciel
ISTIC, Université de Rennes 1
Année 2014-2015, second semestre
Emmanuel Caruyer
CR CNRS
Emmanuel.Caruyer@irisa.fr
Plan du cours
Apache CouchDB
- Introduction, concepts
- L'API HTTP
- L'Interface Futon
- Le système de vue MapReduce
GeoCouch : Extension SIG à CouchDB
- Stockage de données géographiques
- Les arbres R
- Requêtes GeoCouch
Apache CouchDB
Apache CouchDB
Un SGBD innovant
- Base de donnée de type NoSQL
- Utilise un système de vues à base de MapReduce
Un système ouvert et pensé Web
- Distribué sous licence Apache (libre et ouvert)
- API HTTP, format JSON, interactions Javascript
Optimisé pour une disponibilité maximale
- Écrit en Erlang
- Pas de verrou pour l'accès en lecture ni en écriture
- Supporte les sauvegardes à chaud
Représentation des données - I
Notion de document auto-suffisant
- Pas de référence à un document externe
- Représente un document dans le monde réel
Documents représentés sous forme JSON
{
"_id": "173fce259fccf5959b44c44811002e5c",
"_rev": "2-c2fbcf4c6dc9d5af03fbb5f0a32c6cfd",
"type": "building",
"location": [
48.115454,
-1.638554
],
"name": "12A"
}
Représentation des données - II
Une gestion des documents sans schéma
{
"_id": "173fce259fccf5959b44c44811002e5c",
"_rev": "2-c2fbcf4c6dc9d5af03fbb5f0a32c6cfd",
"type": "batiment",
"location": [
48.115454,
-1.638554
],
"name": "12A"
}
Représentation des données - II
Une gestion des documents sans schéma
{
"_id": "173fce259fccf5959b44c44811002e5c",
"_rev": "2-c2fbcf4c6dc9d5af03fbb5f0a32c6cfd",
"type": "batiment",
"location": [
48.115454,
-1.638554
],
"name": "12A",
"instituts": [
"ISTIC",
"IRISA",
"Inria Rennes - Bretagne Atlantique"
]
}
- La structure du document peut être modifiée dynamiquement
API HTTP
Pour toutes les opérations « CRUD »
- Create: Création d'un document
- Read: Lecture d'un document
- Update: Modification d'un document
- Delete: Suppression d'un document
Réponses et messages envoyés au format JSON
> GET http://127.0.0.1:5984/_all_dbs
< ["_users", "univ-rennes1"]
Interface d'administration Futon
Les vues : Utilisation de Map/Reduce
Extraction des données avec la fonction Map
- Une fonction qui prend en argument le document
- Qui « émet » optionnellement un (ou plusieurs) couples
clé-valeur
- Est facilement parallélisable
- Permet de générer les vues de manière incrémentale
Aggrégation des résultats avec la fonction Reduce
- Une fonction qui prend en argument les clés-valeurs retournées
par la fonction map
Les vues - Exemple
{
...,
"batiment": "12A",
"etage": 1,
"salle": 157,
"postes": 21
}
Lister des salles par nombre de postes croissant
function(doc) {
if(doc.salle && doc.postes) {
emit(doc.postes, doc.salle);
}
}
Les vues - Exemple
{
...,
"batiment": "12A",
"etage": 1,
"salle": 157,
"postes": 21
}
Lister des salles par nombre de postes croissant regroupées par batiment
function(doc) {
if(doc.batiment && doc.salle && doc.postes) {
emit([doc.batiment, doc.postes], doc.salle);
}
}
Les vues - Création et interrogation
Les vues sont crées dans des design documents
- Peuvent être groupées par type d'objet dans un même document
- Le résultat est stocké pour utilisation ultérieure
Interrogation des vues
- Les vues sont associées à une URL
- Le résultat est fourni sous forme JSON
- Il est possible de passer des argumentsà l'URL pour filtrer les résultats
Pièces jointes
Un document peut contenir une ou plusieurs pièces jointes
- Cela permet de stocker des fichiers (image, son, video, etc.)
- Fichier identifié par un nom et un type MIME (Content Type)
Interrogation des vues
- Les vues sont associées à une URL
- Le résultat est fourni sous forme JSON
- Il est possible de passer des argumentsà l'URL pour filtrer les résultats
CouchDB - Récapitulatif
Un système de gestion de bases de données NoSQL
- Les données sont stockées sous forme de documents
- La structure d'un document peut être changée de façon dynamique
L'accent mis sur la disponibilité du service
- Pas de verrou sur l'accès aux données
- Gestion des versions pour une traçabilité des modifications
- Possibilité de sauvegarder ou synchroniser à chaud une BdD
Système de requête puissant et efficace
- Utilise le paradigme Map/Reduce
Pour aller plus loin
GeoCouch : Une extension SIG à CouchDB
Questions ?