CouchDB : le guide authentique

Partie VI : Annexe

Cette partie constitue l'annexe du livre CouchDB : le guide authentique. Vous y trouverez des conseils pour installer CouchDB sur différents systèmes d'exploitation ainsi que des explications concernant les arbres B ou la façon de sécuriser votre serveur.

Les commentaires et les suggestions d'amélioration sont les bienvenus, alors, après votre lecture, n'hésitez pas. Commentez Donner une note à l'article (0)

Article lu   fois.

Les deux auteur et traducteur

Traducteur :

Liens sociaux

Viadeo Twitter Facebook Share on Google+   

I. Installation sur des systèmes du type Unix

I-A. Debian GNU / Linux

Vous pouvez installer le paquet CouchDB en exécutant :

 
Sélectionnez
sudo aptitude install couchdb

Une fois l'installation terminée, vous devriez conserver une copie de l'exécutable de CouchDB sur votre machine. Assurez-vous de lire jusqu'au bout la documentation spécifique aux différents systèmes Debian que vous trouverez sous /usr/share/couchdb.

CouchDB est déjà préinstallé sur tous les systèmes Ubuntu à partir de la version 9.10 (« Karmic »).

I-B. Ubuntu

Vous pouvez installer le paquet CouchDB en exécutant :

 
Sélectionnez
sudo aptitude install couchdb

Une fois l'installation terminée, vous devriez conserver une copie de l'exécutable de CouchDB sur votre machine. Assurez-vous de lire jusqu'au bout la documentation spécifique aux différents systèmes Ubuntu que vous trouverez en suivant /usr/share/couchdb.

I-C. Gentoo Linux

Activez l'ebuild de développement CouchDB en exécutant :

 
Sélectionnez
sudo echo dev-db/couchdb >> /etc/portage/package.keywords

Vérifiez l'ebuild CouchDB en exécutant :

 
Sélectionnez
emerge -pv couchdb

Préparez et installez l'ebuild CouchDB en exécutant :

 
Sélectionnez
sudo emerge couchdb

Une fois l'installation terminée, vous devriez conserver une copie de l'exécutable de CouchDB sur votre machine.

I-D. Un problème ?

Rendez-vous sur Appendix D, installation depuis la sourceAppendix D, installation depuis la source si votre système ne dispose pas du paquet CouchDB.

II. Installation sur Mac OS X

II-A. CouchDBX

La façon la plus simple de démarrer avec CouchDB sur Mac OS X est de télécharger CouchDBXCouchDBX. Cette application non officielle n'installe rien sur votre système et peut être lancée avec un simple double-clic. Notez cependant que pour une utilisation plus complète, il est recommandé d'effectuer une installation traditionnelle avec un programme du type HomebrewHomebrew.

II-B. Homebrew

Homebrew a été ajouté récemment aux outils de gestion des programmes de Mac OS X. Ses mots d'ordre sont : aucune configuration, les meilleures optimisations, et une bière en arrière-plan. Téléchargez Homebrew en cliquant à l'adresse http://github.com/mxcl/homebrew. Lisez les quelques instructions, puis exécutez dans l'invite de commandes :

 
Sélectionnez
brew install couchdb

Attendez la fin, puis démarrez CouchDB, en exécutant :

 
Sélectionnez
couchdb

Pour voir toutes les options disponibles au démarrage, exécutez :

 
Sélectionnez
couchdb -h

Ceci vous explique comment faire fonctionner CouchDB en arrière-plan, ainsi que d'autres options utiles.

Pour vérifier que CouchDB est bien en cours d'exécution, ouvrez votre navigateur et rendez-vous à http://127.0.0.1:5984/_utils/index.htmlhttp://127.0.0.1:5984/_utils/index.html.

II-C. MacPorts

MacPorts est l'outil de gestion de paquetages d'origine de Mac OS X. Même s'il ne fait pas officiellement partie du système d'exploitation, il peut être utilisé pour simplifier le processus d'installation du programme FLOSS sur votre machine. Avant d'installer CouchDB grâce à MacPorts, vous devez télécharger ce dernier ICIICI.

Assurez-vous que la version de MacPorts est à jour en exécutant :

 
Sélectionnez
sudo port selfupdate

Vous pouvez installer CouchDB grâce à MacPorts en exécutant :

 
Sélectionnez
sudo port install couchdb

Cette commande installera toutes les dépendances nécessaires à CouchDB. Si une de celles-ci est déjà installée, MacPorts ne cherchera pas à la mettre à jour. Pour vous assurer que tous les outils sont à jour, vous devez exécuter la commande :

 
Sélectionnez
sudo port upgrade couchdb

Mac OS X dispose d'un environnement logiciel de gestion de services nommé launchd qui peut être utilisé pour démarrer, arrêter, ou gérer les processus d'arrière-plan. Vous pouvez l'utiliser pour lancer automatiquement CouchDB quand le système démarre. Si vous souhaitez ajouter CouchDB à votre configuration de démarrage, vous devez exécuter :

 
Sélectionnez
sudo launchctl load -w /opt/local/Library/LaunchDaemons/org.apache.couchdb.plist

Après avoir exécuté cette commande, CouchDB devrait être disponible en cliquant à l'adresse suivante : http://127.0.0.1:5984/_utils/index.html.

CouchDB sera aussi démarré ou arrêté en même temps que le système d'exploitation.

III. Installation sur Windows

CouchDB ne prend pas en charge officiellement Windows. Afin d'y remédier, CouchDB a l'intention d'offrir un programme officiel d'installation pour Windows d'ici quelque temps. À l'heure où ce livre est imprimé(1), il existe cependant un outil non officiel d'installation binaire.

Il s'agit d'un logiciel non officiel, n'oubliez donc pas de prendre davantage de précautions lors du téléchargement ou de l'installation, car il pourrait endommager votre système. Faites donc attention en installant le logiciel, car l'auteur ne pourra en aucun cas être tenu responsable en cas de dommages.

Nous vous recommandons de vous abonner à la newsletter de CouchDB pour recevoir plus d'informations.

CouchDB supportera Windows dans sa mise à jour 1.0.

IV. Installation depuis la source

Généralement, vous devez éviter une installation depuis la source. Beaucoup de systèmes d'exploitation offrent un gestionnaire vous permettant de télécharger et d'installer CouchDB via une seule commande. Ces gestionnaires s'occupent habituellement d'installer le programme avec les meilleures configurations, gèrent la sécurité, et s'assurent que la base de données CouchDB est démarrée et arrêtée correctement par votre système. Les premières annexes vous expliquaient comment installer CouchDB sur les systèmes d'exploitation de type Unix, Mac OS X et Windows. Si vous n'arrivez pas à suivre ces instructions ou que vous devez l'installer manuellement pour d'autres raisons, ce chapitre est fait pour vous.

IV-A. Prérequis

Pour préparer et installer CouchDB, vous aurez besoin d'installer une série d'autres logiciels dont CouchDB dépend. Sans ces derniers installés correctement sur votre système, CouchDB refusera de démarrer. Vous aurez besoin de télécharger et d'installer :

Nous vous recommandons d'installer Erlang OTP R12B-5, voire une version supérieure si possible.

Chacun de ces progiciels devrait offrir des instructions pour une installation personnalisée, soit sur le site internet, soit directement dans l'archive téléchargée. Si vous êtes chanceux, vous devriez pouvoir utiliser un gestionnaire pour installer toutes ces dépendances d'un seul coup.

IV-B. Systèmes du type Debian (Ubuntu compris)

Vous pouvez installer tous les prérequis en exécutant :

 
Sélectionnez
apt-get install build-essential erlang libicu-dev libmozjs-dev libcur14-openssl-dev

Si vous obtenez une erreur pour l'un de ces paquetages, assurez-vous d'avoir téléchargé la dernière version en date. Il est possible qu'une version plus récente soit disponible et le nom de l'archive serait donc différent. Par exemple, vous pouvez chercher une nouvelle version de l'archive ICU en exécutant :

 
Sélectionnez
apt-cache search libicu

Choisissez et installez la version la plus récente disponible dans la liste.

IV-C. Mac OS X

Vous aurez besoin d'installer le métapaquet Xcode Tools en exécutant :

 
Sélectionnez
open /Applications/Installers/Xcode\ Tools/XcodeTools.mpkg

S'il n'est pas disponible sur votre système, vous devrez l'installer depuis votre CD d'installation de Mac OS X. Sinon, vous pouvez aussi télécharger une copie.

Vous pourrez alors installer les autres prérequis utilisant MacPorts en exécutant :

 
Sélectionnez
port install icu erlang spidermonkey curl

Consultez le chapitre II Installation sur Mac OS X pour plus de détails.

IV-D. Installation

Maintenant que toutes les dépendances sont installées, il vous faut télécharger une copie de la ource CouchDB. Vous devriez obtenir une archive à extraire. Ouvrez une fenêtre terminal et changez le chemin et placez-vous dans le répertoire de votre archive récemment téléchargée.

Configurez la source en exécutant :

 
Sélectionnez
./configure

Vous êtes sur le point d'installer CouchDB sous : /usr/local, qui est l'emplacement par défaut pour un logiciel installé par l'utilisateur. Cette commande accepte une multitude d'options, et vous pouvez tout paramétrer, depuis le dossier d'installation au dossier principal, ou bien même celui d'installation d'Erlang ou SpiderMonkey.

Pour voir ce qui est disponible, vous pouvez exécuter :

 
Sélectionnez
./configure --help

Généralement vous pouvez ignorer cette étape si vous n'avez pas obtenu d'erreur lors de son premier démarrage. Vous aurez seulement besoin de passer des options supplémentaires si votre démarrage semble un peu bizarre ou si le script a des problèmes pour trouver une des dépendances installées auparavant.

Si tout se passe bien, vous devriez voir apparaître le message suivant :

 
Sélectionnez
You have configured Apache CouchDB, time to relax.

« Vous avez configuré Apache CouchDB, vous pouvez vous détendre. » Ouf !

Préparez et installez la source en exécutant :

 
Sélectionnez
make && sudo make install

Si vous avez modifié le dossier d'installation dans un endroit temporaire, peut-être ne voudriez pas utiliser la commande sudo dans ce cas. Si vous avez des problèmes en exécutant make, essayez d'exécuter gmake si elle est disponible sur votre machine. Vous trouverez plus d'options en lisant le fichier INSTALL.

IV-E. Questions de sécurité

Il est déconseillé de lancer un serveur CouchDB en tant que superutilisateur. Si le serveur CouchDB est compromis par un intrus pendant qu'il tourne en administrateur, l'intrus pourra prendre le contrôle de votre machine en tant que superutilisateur. Et nous ne voulons pas ça !

Nous vous recommandons fortement de créer un utilisateur spécifique pour CouchDB. Cet utilisateur devra avoir le moins d'autorisations possible, tout en lui laissant la possibilité d'accéder à l'utilisation des logiciels et au serveur CouchDB, de lire les fichiers de configuration et de pouvoir gérer les données et les fichiers journaux.

Vous pouvez utiliser n'importe quel outil disponible sur votre ordinateur pour créer cet utilisateur couchdb.

Sur de nombreux systèmes du type Unix, vous pouvez exécuter :

 
Sélectionnez
adduser --system --home /usr/local/var/lib/couchdb --no-create-home --shell /bin/bash --group --gecos "CouchDB" couchdb

Mac OS X offre l'option standard « Comptes » via l'application des Préférences du Système, auquel cas vous pouvez utiliser l'application Workgroup Manager, disponible sur le Server Admin Tools.

Vous devez vous assurer que l'utilisateurcouchdb dispose d'un shell de connexion fonctionnel. Vous pouvez le tester en vous connectant à un terminal en tant que l'utilisateur couchdb. Vous devez également vous assurer d'être bien sous le répertoire /usr/local/var/lib/couchdb, répertoire contenant la base de données de CouchDB.

Vous pouvez changer le propriétaire des répertoires CouchDB en exécutant :

 
Sélectionnez
chown -R couchdb:couchdb /usr/local/etc/couchdb
chown -R couchdb:couchdb /usr/local/var/lib/couchdb
chown -R couchdb:couchdb /usr/local/var/log/couchdb
chown -R couchdb:couchdb /usr/local/var/run/couchdb

Vous pouvez changer les permissions pour les répertoires CouchDB en exécutant :

 
Sélectionnez
chmod -R 0770 /usr/local/etc/couchdb
chmod -R 0770 /usr/local/var/lib/couchdb
chmod -R 0770 /usr/local/var/log/couchdb
chmod -R 0770 /usr/local/var/run/couchdb

Ce n'est pas tout concernant la sécurité de CouchDB. Si vous déployez CouchDB sur le Web, ou tout autre endroit où des personnes malveillantes pourraient avoir accès à votre serveur, il vous faudra chercher les mesures de sécurité recommandées pour votre système d'exploitation et prendre toutes les précautions nécessaires supplémentaires. Gardez à l'esprit que la meilleure façon de sécuriser son système informatique est de le déconnecter du réseau.

IV-F. Exécution manuelle

Vous pouvez démarrer le serveur CouchDB en exécutant :

 
Sélectionnez
sudo -i -u couchdb couchdb -b

Ceci utilise la commande sudo pour exécuter la commande couchdb en tant qu'utilisateurcouchdb.

À la fin du démarrage de CouchDB, le message suivant s'affichera :

 
Sélectionnez
Apache CouchDB has started, time to relax.

« Apache CouchDB a démarré, vous pouvez vous détendre. » Ouf !

Pour vérifier que tout fonctionne correctement, rendez-vous via votre navigateur internet à l'adresse suivante :

 
Sélectionnez
http://127.0.0.1:5984/_utils/index.html

Il s'agit de Futon, la console d'administration en ligne de CouchDB. Nous avons présenté les bases de Futon dans les chapitres précédents. Une fois que la console a chargé, sélectionnez et lancez la CouchDB Test Suite depuis le menu situé à droite. Cela vous permettra de vous assurer que tout fonctionne correctement, et cela vous évitera un sérieux mal de tête si quelque chose ne tourne pas rond.

IV-G. Exécution en tant que démon

Une fois que CouchDB s'est exécuté correctement, vous voudrez probablement le lancer en tant que démon. Un démon est une application qui fonctionne en permanence en arrière-plan, en attente de requêtes. C'est de cette façon que la plupart des serveurs de bases de données de production fonctionnent, et vous pouvez paramétrer CouchDB pour fonctionner ainsi.

Quand vous lancez CouchDB en tant que démon il couvre l'historique d'un certain nombre de fichiers que vous voudrez nettoyer de temps en temps. Laisser cet historique remplir votre disque dur est un bon moyen d'endommager votre serveur. Certains systèmes d'exploitation sont fournis avec des logiciels qui s'en occupent à votre place, vous devrez chercher les meilleures options et faire le nécessaire pour vous éviter ce genre de problème. CouchDB est fourni avec une configuration logrotate, ce qui pourra vous être utile.

IV-G-1. Systèmes du type SysV/BSD

En fonction de votre système d'exploitation, le script démon de CouchDB s'installera dans un répertoire nommé init.d (pour les systèmes du type Sys-V) ou rc.d (pour les systèmes du type BSD) au chemin suivant /usr/local/etc. Les exemples suivants utilisent [init.d|rc.d] pour indiquer ce choix, vous devez le remplacer par votre répertoire courant avant d'exécuter une de ces commandes.

Vous pouvez démarrer CouchDB en tant que démon en exécutant :

 
Sélectionnez
sudo /usr/local/etc/[init.d|rc.d]/couchdb start

Vous pouvez arrêter le démon de CouchDB en exécutant :

 
Sélectionnez
sudo /usr/local/etc/[init.d|rc.d]/couchdb stop

Vous pouvez obtenir le statut du démon de CouchDB en exécutant :

 
Sélectionnez
sudo /usr/local/etc/[init.d|rc.d]/couchdb status

Si vous souhaitez configurer la façon dont le script du démon fonctionnera, vous trouverez une flopée d'options que vous pourrez modifier dans le fichier /usr/local/etc/default/couchdb.

Si vous voulez exécuter le script sans la commande sudo, vous devrez enlever l'option COUCHDB_USER de ce fichier.

Votre système d'exploitation offrira probablement une méthode pour contrôler automatiquement le démon CouchDB, pour le démarrer ou l'arrêter en tant que service système. Pour cela, vous devrez copier le script du démon dans votre répertoire /etc[init.d|rc.d] et exécuter une commande telle que :

 
Sélectionnez
sudo update-rc.d couchdb defaults

Consultez la documentation de votre système pour plus d'informations.

IV-H. Mac OS X

Vous pouvez utiliser le système launchd pour contrôler le démon de CouchDB.

Vous pouvez charger la configuration du système launchd en exécutant :

 
Sélectionnez
sudo launchctl load /usr/local/Library/LaunchDaemons/org.apache.couchdb.plist

Vous pouvez désactiver cette configuration en exécutant :

 
Sélectionnez
sudo launchctl unload /usr/local/Library/LaunchDaemons/org.apache.couchdb.plist

Vous pouvez démarrer le démon de CouchDB en exécutant :

 
Sélectionnez
sudo launchctl start org.apache.couchdb

Vous pouvez arrêter le démon de CouchDB en exécutant :

 
Sélectionnez
sudo launchctl stop org.apache.couchdb

Le système launchd peut contrôler automatiquement le démon de CouchDB, en le lançant ou l'arrêtant en arrière-plan. Pour cela vous devrez copier le fichier plist dans le répertoire /Library/LaunchDaemons de votre système.

Veuillez consulter la documentation de launchd pour plus d'informations.

IV-I. Résolution des problèmes

Un programme reste un programme, vous pourrez faire face à un problème de temps en temps. Mais pas de panique ! CouchDB possède une grande communauté d'individus en mesure de répondre à vos questions et à vous aider lors de vos débuts. Vous trouverez ci-dessous quelques ressources qui pourront sûrement vous être utiles :

N'oubliez pas d'utiliser votre moteur de recherche favori pour tenter de diagnostiquer vous-même les problèmes. Si vous fouillez un peu, vous trouverez probablement quelque chose. Il est fort possible que d'autres personnes aient eu exactement le même souci que vous, et que la solution ait déjà été postée quelque part sur la toile. Bonne chance ! Et n'oubliez pas, détendez-vous !

V. Le B.A BA de JSON

CouchDB utilise JavaScript Object Notation (JSON) pour stocker les données, c'est un format léger basé sur un sous-ensemble de la syntaxe JavaScript. Un des avantages de JSON réside dans le fait qu'il est beaucoup plus facile à lire et à écrire à la main que le XML. Nous pouvons l'analyser naturellement avec JavaScript, car ils partagent une partie de leur syntaxe. Cela devient vraiment pratique lorsque l'on souhaite créer une application web dynamique et que l'on veut chercher des données sur le serveur.

Voici un exemple de document JSON :

 
Sélectionnez
{
    "Subject": "I like Plankton",
    "Author": "Rusty",
    "PostedDate": "2006-08-15T17:30:12-04:00",
    "Tags": [
        "plankton",
        "baseball",
        "decisions"
    ],
    "Body": "I decided today that I don't like baseball. I like plankton."
}

Vous pouvez voir que la structure générale est basée sur des paires clé/valeur, et différentes listes d'éléments.

V-A. Types de données

JSON dispose d'un certain nombre de types de données de base qui sont à votre disposition. Nous allons tous vous les présenter.

V-A-1. Nombres

Vous pouvez utiliser des nombres entiers positifs : "Total": 253: 253

Ou des nombres entiers négatifs : "Score": -19

Ou bien encore des nombres à virgule flottante : "Superficie": 456.31

Il existe une différence subtile, mais importante entre les nombres à virgule flottante et les nombres décimaux. Quand on utilise un nombre tel que 15.7, il sera interprété comme 15.699999999999 par la plupart des clients, ce qui peut être problématique pour votre application. Pour cette raison, les valeurs monétaires sont interprétées en tant que chaînes de caractères par JSON. Ainsi, la chaîne de caractères "15.7" sera interprétée comme "15.7" par tous les clients JSON.

Ou pour finir, des notations scientifiques : "Density": 5.6e+24

V-A-2. Chaînes de caractères

Vous pouvez utiliser des chaînes de caractères en tant que valeurs :

 
Sélectionnez
"Auteur": "Rusty"

Vous devez protéger certains caractères spéciaux, tels que les tabulations ou les sauts de lignes, en les précédant par un antislash :

 
Sélectionnez
"poem": "Puis-je te comparer à du\n\tplancton salé."

Le site JSON détaille ce qu'il faut protéger par une barre oblique inverse.

V-A-3. Booléens

Vous pouvez avoir des valeurs booléennes vraies :

 
Sélectionnez
"Draft": true

Ou des valeurs booléennes fausses :

 
Sélectionnez
"Draft": false

V-A-4. Tableaux

Un tableau est une liste de valeurs :

 
Sélectionnez
"Tags": ["plankton", "baseball", "decisions"]

Un tableau peut contenir n'importe quel type de données, tableaux y compris :

 
Sélectionnez
"Context": ["dog", [1, true], {"Location": "puddle"}]

V-A-5. Objets

Un objet est une liste de paires clé/valeur :

 
Sélectionnez
{"Subject": "I like Plankton", "Author": "Rusty"}

V-A-6. Valeurs nulles

Vous pouvez avoir des valeurs nulles :

 
Sélectionnez
"Surname": null

VI. Le pouvoir des arbres B

CouchDB utilise une structure de données appelée arbre B (aussi connu sous le terme de « B-tree » en anglais) pour référencer ses documents et vues. Nous allons suffisamment nous attarder sur les arbres B pour comprendre les types de requêtes qu'ils supportent et comment les faire fonctionner correctement avec CouchDB.

Ceci est notre première incursion dans les systèmes internes de CouchDB. Pour utiliser CouchDB vous n'avez pas besoin de savoir ce qui se cache sous le capot, mais vous devez comprendre comment le programme agit, vous pourrez alors être capable d'en faire de même. De plus, en comprenant comment CouchDB fait sa magie, vous pourrez vous-même imaginer quelques tours.

À première vue, CouchDB pourrait ressembler à un gestionnaire d'arbres B muni d'une interface HTTP.

CouchDB utilise en fait un arbre B+, qui est une légère variation des arbres B qui utilise un peu plus d'espace disque afin d'aller plus vite. Quand nous disons arbre B, nous voulons dire implicitement arbre B+ de CouchDB.

Un arbre B est une excellente structure de données pour stocker une quantité énorme d'informations, tout en ayant la possibilité de les retrouver facilement. C'est quand il y a des millions, voire milliards, de données dans un arbre B que cela devient drôle. Les arbres B sont des structures peu profondes, mais contenant beaucoup de données. Alors que la profondeur d'autres arbres peut augmenter très rapidement, celle d'un arbre B typique reste à un chiffre, même s'il contient des millions d'entrées. C'est particulièrement intéressant pour CouchDB, où les feuilles de l'arbre sont stockées sur un support lent tel qu'un disque dur. Ainsi, accéder à n'importe quelle partie de l'arbre pour lire ou écrire des données nécessite de traverser seulement quelques nœuds, ce qui se traduit par quelques recherches spécifiques (qui ralentissent le disque dur), et puisque le système d'exploitation va probablement cacher les nœuds supérieurs, seul l'affichage du nœud de la feuille finale est nécessaire.

« D'un point de vue pratique, les arbres B, par conséquent, garantissent un temps d'accès inférieur à 10 ms, même pour des ensembles de données extrêmement vastes. »

-Dr. Rudolf Bayer, inventeur de l'arbre B

La mise en œuvre de l'arbre B de CouchDB diffère un peu de l'originale. Même s'il conserve toutes les propriétés, il bénéficie en plus d'un contrôle Multiversion des accès concurrents (MVCC ou MCC) ainsi qu'un système d'ajout à la fin (append-only). Les arbres B sont utilisés pour stocker les principaux fichiers dans les bases de données ainsi que les index des vues. Une base de données est un arbre B, un index des vues en est un autre.

MVCC permet des accès concurrents aux données en lecture et en écriture, sans utiliser un système de verrouillage. Les écritures sont sérialisées, ne permettant qu'une écriture à la fois pour chaque base de données unique. Les opérations d'écriture ne bloquent pas la lecture, ce qui permet une multitude d'accès en lecture simultanés. Pour chaque lecture, un affichage cohérent de la base de données est garanti. La façon dont ce système fonctionne est le cœur du modèle de stockage de CouchDB.

Puisque CouchDB utilise des fichiers append-only, le nœud racine de l'arbre B doit être réécrit à chaque fois que le fichier est mis à jour. Cependant, des anciennes parties du fichier ne changeront jamais, ainsi, toute ancienne racine de l'arbre B, pour autant que vous gardiez un pointeur vers elle, pointera à son tour vers un instantané cohérent de la base de données.

Précédemment dans le livre, nous expliquions comment le système MVCC utilise la valeur _rev du document afin de s'assurer qu'une seule et unique personne puisse modifier la version de celui-ci. L'arbre B est utilisé pour rechercher l'existence de valeurs _rev afin de les comparer. Lorsqu'une écriture est acceptée, l'arbre B peut s'attendre à ce que celle-ci soit valide.

Puisque les anciennes versions des documents ne sont pas réécrites ou supprimées quand une nouvelle version apparaît, les requêtes lisant une version particulière ne se soucient pas des nouvelles versions qui pourraient être créées au même moment. Avec des modifications fréquentes du document, il pourrait y avoir différentes personnes en train de lire simultanément trois versions différentes du document. Chaque version était la dernière quand quelqu'un a commencé à la lire, alors que de nouvelles versions ont été écrites entre-temps. Ainsi quand une nouvelle version est mise en ligne, les nouveaux lecteurs liront cette dernière, tandis que les lecteurs déjà présents sur le serveur continueront la lecture de l'ancienne.

Dans un arbre B, les données sont conservées uniquement dans les nœuds feuilles. L'arbre B de CouchDB n'ajoute des données qu'au fichier de base de données qui conserve l'arbre sur le disque dur et qui s'agrandit uniquement à la fin. Vous souhaitez ajouter un nouveau document ? Le fichier grossit à la fin. Vous supprimez un document ? Cette action est enregistrée à la fin du document. En conséquence, vous obtenez une base de données robuste. Les ordinateurs peuvent planter pour plusieurs raisons telles que la perte de puissance ou des défaillances matérielles. Puisque CouchDB ne réécrit aucune donnée existante, il ne peut pas corrompre ce qui a déjà été écrit et validé sur le disque. Jetez donc un œil à la Figure 1, « Arbres B plats et append-only ».

Le commit est le procédé de mise à jour de la base de données qui permet de refléter les modifications. Cela est fait dans la base du fichier, c'est-à-dire les derniers 4 k du fichier de la base de données. La base a une taille de 2 k et est écrite deux fois successivement. Premièrement, CouchDB ajoute tout changement au fichier et enregistre alors la nouvelle longueur du fichier dans la première base du fichier de base de données. Il va alors forcer l'écriture automatique sur le disque de tous les changements. Puis, il copie le contenu des premiers 2 k de la base du fichier sur les autres 2 k et va de nouveau forcer l'écriture automatique des données sur le disque.

Image non disponible
Figure 1, « Les arbres B plats et append-only »

Si un problème survient n'importe où dans ce processus (comme une panne de courant et redémarrage de CouchDB plus tard), le fichier base de données est dans un état consistant et n'a donc pas besoin d'être vérifié. CouchDB commence par lire en arrière-plan le fichier de base de données. Lorsqu'il trouve une paire de bases de fichiers, il fait quelques vérifications : si les premiers 2 k de données sont corrompus, CouchDB les remplace par les autres 2 k. Si les seconds 2 k de données sont corrompus, CouchDB copie dessus les premiers 2 k et tout rentre dans l'ordre. C'est seulement lorsque les deux bases de fichiers sont inscrites correctement sur le disque que CouchDB admettra que l'écriture a réussi. Les données ne sont jamais perdues, et celles présentes sur le disque ne sont jamais corrompues. Cette conception est la raison pour laquelle CouchDB n'a pas besoin d'un commutateur d'arrêt. Vous l'arrêtez seulement quand vous avez fini votre travail.

Nous pourrions encore parler pendant des heures au sujet des arbres B en général, et dans quelle mesure et de quelle manière le SSD modifie le comportement à l'exécution. L'article Wikipédia concernant les Arbres B (B-tree) est un bon point de départ pour des recherches plus avancées. Scholarpedia inclut des notes du Dr. Rudolf Bayer, l'inventeur des arbres B.

VII. Note finale

L'animal sur la couverture de CouchDB : Le Guide Authentique est un chien poméranien (Canis familiaris), une petite variété du Spitz allemand généralement plus grand, nommé d'après la région baltique de Poméranie (aujourd'hui partagée entre le nord-est de l'Allemagne et le nord de la Pologne) d'où provient cette race.

À l'origine, les Poméraniens étaient très proches en taille de leurs cousins les Spitz allemands (pesant entre 13 et 22 kilos) et étaient élevés pour devenir des chiens de troupeaux grâce à leur intelligence, leur énergie et leur loyauté. Depuis la fin du XIXe siècle, cependant, les éleveurs ont commencé à préférer les chiens plus petits, une tendance lancée en grande partie à cause de la reine Victoria et son affection pour cette espèce. Aujourd'hui, les Poméraniens sont considérés comme des « chiens jouets », pensant seulement 2,5 à 3,5 kilos, et sont principalement gardés comme des petits animaux de compagnie et chiens de spectacle.

Les Poméraniens présentent des caractéristiques physiques et comportementales de leurs cousins et ancêtres un peu plus gros. Ils ont un museau court et pointu, des oreilles droites et pointues, une grosse queue touffue un peu recourbée vers le dos, et sont surtout fougueux et amicaux. Les Poméraniens sont aussi particulièrement appréciés pour leur double pelage (un sous-pelage léger et dense, et un pelage extérieur long, raide et dur) proposant une grande variété de couleurs, telles que blanc, noir, marron, rouge, orange, sable, tacheté, ou même des combinaisons de ces derniers. À cause de leur petite taille, les Poméraniens sont capables de déambuler dans des espaces plutôt étroits pour leur exercice quotidien, ils font donc d'excellents chiens d'appartement.

L'image de couverture provient du Royal Natural History de Lyderkker. La police de la couverture est Adobe ITC Garamond. La police du texte est Linotype Birka, celle des titres est Adobe Myriad Condensed, et enfin, celle du code est LucasFont's TheSansMonoCondensed.

VIII. Remerciements Developpez

Nous remercions toute l'équipe de rédaction ayant contribué à cette publication et particulièrement à Florent Montoya pour sa traduction et Mickael Baron pour sa relecture technique. Un grand merci également à Claude Leloup pour ses corrections orthographiques.

Vous avez aimé ce tutoriel ? Alors partagez-le en cliquant sur les boutons suivants : Viadeo Twitter Facebook Share on Google+   


La première édition du livre est parue en 2010.

  

Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright © 2015 J. Chris Anderson, Jan Lehnardt et Noah Slater. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.