CouchDB

Apache CouchDB
Description de l'image Apache CouchDB logo.svg.
Description de l'image Apache CouchDB v2.1.1 Fauxton Console.png.
Informations
Développé par Apache Software Foundation, Damien Katz, Jan Lehnardt, Noah Slater, Christopher Lenz, J. Chris Anderson
Première version
Dernière version 3.4.2 ()[1]Voir et modifier les données sur Wikidata
Dépôt github.com/apache/couchdbVoir et modifier les données sur Wikidata
Écrit en Erlang, JavaScript, C++ et CVoir et modifier les données sur Wikidata
Système d'exploitation Linux, Microsoft Windows et macOSVoir et modifier les données sur Wikidata
Environnement Multi-plates-formes
Type Base de données orientée documents
Licence Licence Apache 2.0
Site web couchdb.apache.orgVoir et modifier les données sur Wikidata

Apache CouchDB est un système de gestion de base de données orienté documents, écrit en langage Erlang et distribué sous licence Apache.

Conçu pour le Web, il fait partie de la mouvance NoSQL, et a été conçu pour pouvoir être réparti sur une grappe de serveurs.

Au lieu d'être ordonnée en lignes et en colonnes, la base de données CouchDB est une collection de documents JSON. De plus, CouchDB contient un serveur HTTP qui permet d'effectuer des requêtes, et renvoie ses données sous forme JSON. On peut ainsi interroger un serveur CouchDB directement avec un navigateur Web, ou on peut exécuter des requêtes avec JavaScript. Les principales opérations effectuées sont MAP et REDUCE [réf. souhaitée], voir article MapReduce. Ces opérations sont utiles lorsque la base de données est répartie, elles sont soumises à des contraintes de commutativité, d'associativité et d'idempotence.

Types de données

[modifier | modifier le code]

Les données peuvent prendre tous les types atomiques : chaînes, entiers, nombre à virgule flottante et des types booléens. Par exemple:

“title”:”Le meilleur livre” % title type string

“edition”: 2015 % edition type entier

Les documents

[modifier | modifier le code]

Les documents sont des objets JSON composés de paires clé-valeur, où les valeurs peuvent être de plusieurs types


{
    "_id":"discussion_tables",
    "_rev":"D1C946B7",
    "Sunrise":true,
    "Sunset":false,
    "FullHours":[1,2,3,4,5,6,7,8,9,10],
    "Activities": [
         {"Name":"Football", "Duration":2, "DurationUnit":"Hours"},
         {"Name":"Breakfast", "Duration":40, "DurationUnit":"Minutes", "Attendees":["Jean",
         "Bob", "Maurane", "Marie", "Antoine"]}
    ]
}

Chaque document possède un identifiant (_id) et un numéro de révision (_rev). Chaque mise à jour crée une nouvelle version, avec le même _id mais un numéro de révision différent.

Mise à jour et cohérence des données

[modifier | modifier le code]

Supposons que l'on ait un certain document qui ait un certain identifiant (_id) et un numéro de révision (2_id1). Supposons qu'il y ait deux utilisateurs (ut_1 et ut_2) qui souhaitent écrire sur ce document. Le premier arrivant transformera la version en (3_id1). Lorsque le second arrive, il ne peut pas écrire car il souhaite écrire sur (2_id1) qui n'existe plus.

Mise en place de CouchDB

[modifier | modifier le code]
curl http://localhost:5984/


Pour savoir quelles sont les bases de données déjà présentes :

curl -X GET http://127.0.0.1:5984/_all_dbs


Obtenir une base de données particulière, par exemple ici films :

curl http://localhost:5984/films/


Chaque document dans CouchDB possède un identificateur. Cet identificateur est unique par la base de données. La commande pour l'obtenir est :

curl -X GET http://localhost:5984/_uuids

Ajouter, modifier et supprimer des documents

[modifier | modifier le code]

Pour apporter des modifications, vous devez utiliser d’autres méthodes HTTP : POST, GET, PUT et DELETE.

Par exemple pour ajouter :

curl –X PUT HTTP://localhost:5984/films/ a0b611169309cf4acfd6c19afc001eb4 \
-d {“cle”:”valeur”}

Pour supprimer un document, il faut donner sa révision, lire le document avant de pouvoir le supprimer. CouchDB ne supprime pas en tant que tel mais crée une nouvelle version sans le document supprimé.

curl -i -X DELETE \
"http://localhost:5984/films/74c7a8d2a8548c8b97da748f43000f1b" \
-H "If-Match: 2-17e4ce41cd33d6a38f04a8452d5a860b"

Liens externes

[modifier | modifier le code]
  1. « Release 3.4.2 », (consulté le )