lindev : administration linux , développement php

Aller au contenu | Aller au menu | Aller à la recherche

Tag - bases de donnees

Fil des billets - Fil des commentaires

01 fév. 2010

couchDB par la pratique

C'est quoi couchDB

couchDB.png

CouchDB est un serveur de base de données orienté Document et accessible via une API REST HTTP/JSON.
Sans schéma, sans tables, ce qui offre une flexibilité sans limite de vos documents.

Comment , simplement car couchDB est une base qui n'est pas relationnel , il n'y a donc pas de structure qui fige les documents .

Comment l'utiliser

CouchDB utilise le protocole HTTP , avec des entêtes en GET , PUT , POST , DELETE , COPY.

Avec une possibilité d'activer l'authentification HTTP pour restreindre les accès selon vos souhaits
Pour vous simplifier la vie , j'ai développé une librairie qui réuni les méthodes indispensables pour utiliser une base couchDB , cette librairie vous permettra les action suivantes :

 * Création / suppression de bases
 * insertions de documents
 * suppressions .. 
 * copie
 * déplacements
 * réplication 
 * lecture
 * etc ..


Pour la documentation complète , voir le wiki .

oscar_couchDB

Nous allons quand même ici expliquer l'utilisation basic d'une base couchDB avec cette librairie

initialisation

Comme le précise la doc , il nous suffit d'inclure simplement la lib :

require_once 'Oscar_couchDB.php';

Nous allons ensuite récupérer une instance de la classe :

$Ocdb   =   Oscar_couchDB::getInstance();

Commençons par configurer l'accès au serveur principal , qui a comme adresse ip 10.0.0.220:

$Ocdb->set_host('10.0.0.220');
$Ocdb->set_port(5999);

Nous voilà fin prêt à attaquer ....

Commençons par créer notre table

if( ! $Ocdb->add("mabase") ){
   echo "Échec à la création de la base de données";
}

Une fois notre base crée , nous allons pouvoir la remplir avec des documents , pour créer un document , il faut de nouveau faire appel à la méthode add().

$doc = array("NOM"=>"Document A","TYPE"=>"texte");
 
$retour = $Ocdb->add("mabase","0001",$doc);
if(  $retour == false ){
    echo "Erreur à la création du document , erreur : $retour";
}else{
    echo "Document crée avec succès , <br>ID: ".$retour['id']."<br>REVISION: ".$retour['rev'].";
}

Comme vous l'aurez remarqué un document possède à sa création une révision , cela permet par exemple lors d'une modification non volontaire , de revenir en arrière .
Cependant , cela reste limité en temps , car si l'on compacte la base , seule la dernière révision est disponible .

Pour connaitre les révisions d'un document , vous pouvez faire appel à cette méthode :

$Ocdb->all_revs("mabase", "0001");

0001 étant l'id du document qui se doit d'être unique .

Et pour compacter la base pour un gain de place :

$Ocdb->compact_database('mabase');

Maintenant , comment récupérer notre enregistrement ?
Nous allons simplement utiliser la méthode get()

$mondocument = $Ocdb->get("mabase","0001");

Vous voilà avec un tableau $mondocument qui contient toutes les données que vous y avez entrées ainsi que son id et sa révision .

Pour lire une révision spécifique , il est possible de préciser celle-ci comme-ceci :

$mondocument = $Ocdb->get("mabase","0001",$revision);

Dans l'ordre des choses , nous allons supprimer ce document , voici la méthode :

$database = 'mabase';
$iddocument = '0001';
$revdoc = '1-872c3e4693b3e608148fb85b3f64df74';

$Ocdb->delete($database, $iddocument, $revdoc);

Ici la révision du document est obligatoire .



Voilà pour ces quelques exemples , il y a encore de nombreuses autres méthodes aussi simples les unes que les autres à utiliser , je vous laisse les découvrir via la documentation ici

replication

Il y a un point important , car c'est un avantage non négligeable de couchDB , la replication , qui est d'une simplicité étonnante .

Dans la librairie , il y a donc une méthode qui vous permet de répliquer vos données , de façon manuelle , mais aussi automatique , voici sa mise en place .

Commençons par paramétrer les coordonées des serveur A et B

$Ocdb->set_replication('10.0.0.220','10.0.0.221','5984','mabase','mabase_Repli');

Nous avons donc ici spécifié l'adresse du serveur source , suivi de celle du serveur cible , le port du serveur cible , la base de données source , et pour finir la base de données cible , qui n'est pas obligatoirement du même nom.

De plus si les base source/cible n'héxiste(s) pas , la librairie tentera de la/les créer .
Le réplication paramétrée , activons l'automatisme pour être certains que chaque action faite sur le serveur source soit immédiatement faite sur le serveur cible.

$Ocdb->auto_replique(TRUE);

Et voilà , plutôt simple non ?

Si le serveur cible n'est pas disponible , ce n'est pas grave , la réplication se faisant sur les logs binaire , il rattrapera automatiquement son retard lorsqu'il sera de nouveau disponible .
De plus , si le serveur source , tombe , vous pouvez attaquer directement sa réplication , en changeant les paramètres via set_replication , et lorsque le serveur sera de nouveau disponible , il se mettra automatiquement à jour , toujours grâce au logs binaires .

utile

Nous avons vue ici l'utilisation de quelques méthodes de la librairie Oscar_couchDB , mais il faut savoir que vous pouvez creer des vues en javascript qui vous permettent de faire des requêtes , filtres ect sur les documents en base , je vous donne un lien complet pour apprivoiser celà .
unixGarden

La librairie est disponible à plusieurs endroits :

 *  phpClasses
 *  dans les libs de mon fw fw-oscar.fr

12 janv. 2010

CouchDB

Installer couchDB debian Lenny

couchDB.png

Pour installer couchDB sur debian lenny ( stable ), une toute petite manip est nécessaire afin d'avoir la version 0.10.0. Sinon , vous aurez la version 0.8.0 qui est une version trop ancienne pour une bonne utilisation .

La manip

Le principe est simple , utiliser les paquets de squeeze.

Editez votre sources.list:

vim /etc/apt/sources.list

Ajouter le dépot squeeze :

deb http://ftp2.fr.debian.org/debian/ squeeze main contrib non-free

Un petit update

apt-get update

Et enfin , l'installation :

apt-get install couchdb

Attention : Une fois l'installation terminée , n'oubliez surtout pas de retirer le dépot de votre source.list .

Configuration

Fichier : /etc/couchdb/default.ini

Si vous désirez vous connecter de l'extérieur , ou pour utiliser une réplication entre deux machines , il vous faudra enlever ( commenter ) le paramétre bind_address = 127.0.0.1

Dans ce fichier , vous pouvez aussi paramétrer le port auquel le serveur écoute . ainsi que d'autres choses ... mais je ne suis pas encore aller plus loin pour le moment .

Fichier : /etc/couchdb/local.ini

Pour un accès administrateur un peu plus privé , dé-commentez le paramètre admin = ...
Et mettez votre mot de passe , il sera crypté au prochain redémarrage de couchDB .

Redémarrage

Redémarrez votre serveur couchDB :

/etc/init.d/couchdb restart

Note: J'ai fais deux installations et deux fois j'ai rencontré le problème suivant , pas moyen de me connecter au serveur ... dans les logs , un problème de bind ( le port déjà occupé ? ).
Solution , couper tous les process à coup de kill -9 et redémarrer couchdb .

Utilisation

Administration

Par défaut , une interface web d'administration est disponible à l'adresse suivante :

http://<ip du serveur>:5984/_utils

Avec php

Pour l'utilisation de couchDB avec php , j'ai développé une petite librairie simplifiant grandement les actions de bases Ajout / suppression / modification / clonage / lecture / réplication / ect ...
Cette librairie est disponible à plusieurs endroits :
fw-oswar.fr
phpclasses.org
freashmeat





Je trouve cet outil vraiment complémentaire à une base , il y a encore beaucoup à découvrir dessus ( les vues , les fonctions ect ... ) .. mais une chose à la fois .

Ch.

- page 1 de 4