CouchDB : le guide authentique, partie VI

Partie VI : Appendix

Auteur

J. Chris Anderson, Jan Lehnardt et Noah Slater

Traducteur

Montoya Florent

- Titre : CouchDB : le guide authentique, partie VI

- Auteur : J. Chris Anderson, Jan Lehnardt et Noah Slater

- Traducteur : Montoya Florent

- Parution : 26 mars 2015

- Public visé :

- Licence : 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.

Sommaire

- I. Installation sur des systèmes du type Unix

- I-A. Debian GNU / Linux

- I-B. Ubuntu

- I-C. Gentoo Linux

- I-D. Un problème ?

- II. Installation sur Mac OS X

- II-A. CouchDBX

- II-B. Homebrew

- II-C. MacPorts

- III. Installation sur Windows

- IV. Installation depuis la source

- IV-A. Prérequis

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

- IV-C. Mac OS X

- IV-D. Installation

- IV-E. Questions de sécurité

- IV-F. Exécution manuelle

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

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

- IV-H. Mac OS X

- IV-I. Résolution des problèmes

- V. Le B.A BA de JSON

- V-A. Types de données

- V-A-1. Nombres

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

- V-A-3. Booléens

- V-A-4. Tableaux

- V-A-5. Objets

- V-A-6. Valeurs nulles

- VI. Le pouvoir des arbres B

- VII. Note finale

I - Installation sur des systèmes du type Unix

I-A - Debian GNU / Linux

Vous pouvez installer le paquet CouchDB en exécutant :

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 :

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 :

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

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

emerge -pv couchdb

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

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 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 CouchDBX. 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 Homebrew.

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 :

brew install couchdb

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

couchdb

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

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.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 ICI.

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

sudo port selfupdate

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

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 :

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 :

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, Max OS X et Windows. Si vous n'arrivez pas à suivre ces instructions ou que vous devez l'installer manuellement pour d'autres raison, 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 :

- Erlang OTP (>= R12B)

- ICU

- OpenSSL

- Mozilla SpiderMonkey

- libcurl

- GNU Make

- GNU Compiler Collection

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 :

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 :

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 metapaquet Xcode Tools en exécutant :

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 :

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 source 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 :

./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 :

./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ème pour trouver une des dépendances installées auparavant.

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

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 :

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 super-utilisateur. 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 super-utilisateur. 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é de 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 :

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ée de CouchDB.

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

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 :

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 :

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 :

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 :

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 :

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

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

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

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

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 :

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 :

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

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

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

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

sudo launchctl start org.apache.couchdb

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

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 :

- Si vous rencontrez un message d'erreur bizarre, jetez un œil à la page Wiki des Messages d'Erreur.

- Pour tout souci d'ordre général, essayez les Étapes pour résoudre un problème.

- Pour tout autre question d'ordre général, consultez la liste de diffusion sur le site internet de CouchDB.

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 :

{
"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 nombre 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 :

"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 :

"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 :

"Draft": true

Ou des valeurs booléennes fausses :

"Draft": false

V-A-4 - Tableaux

Un tableau est une liste de valeurs :

"Tags": ["plankton", "baseball", "decisions"]

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

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

V-A-5 - Objets

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

{"Subject": "I like Plankton", "Author": "Rusty"}

V-A-6 - Valeurs nulles

Vous pouvez avoir des valeurs nulles :

"Surname": null

VI - Le pouvoir des arbres B

CouchDB utilise une structure de données appelée arbre B (ou B-Arbre - « 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 munit 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 à 10ms, même pour des ensemble 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 Multi-Version 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 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 serveurs 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 supprimer 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.

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 fichier, il fait quelques vérifications : si les premiers 2 k de données sont corrompues, CouchDB les remplace par les autres 2 k. Si les secondes 2 k de données sont corrompues, 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.

A 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 devenirs 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. A cause de leur petite taille, les Poméraniens son 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.

(1)La première édition du livre est parue en 2010.
Retour à l'article