User:DrPandemic/sandbox

PouchDB est une base de données open source fait pour le web inspirée par Apache CouchDB. Elle a été bâtie pour aider les développeurs à construire des applications «offline first». Ce qui veut dire qu'elles fonctionnent aussi bien connectées que déconnectées. PouchDB est une base de données NoSQL orientée documents écrite entièrement en JavaScript. Habituellement, les requêtes se font sous la forme de MapReduce. PouchDB ne contient pas son propre moteur de base de stockage, il utilise ceux disponibles dans l'environnement d'exécution.

L'objectif principal de PouchDB est de se synchroniser avec des bases de données distantes. Par exemple, elle a la capacité de synchroniser plusieurs bases de données vers une seule base de données ou encore de synchroniser une base de données vers de multiples bases de données.

Ce type de synchronisation peut causer des problèmes de résolution de conflits. Comme CouchDB, PouchDB donne le contrôle et offre les outils à l'application pour résoudre ces conflits. La solution est généralement de fusionner les nouveaux documents et de détruire les anciens. PouchDB ne contient pas nativement une interface graphique. Par contre, il est possible d'utiliser Fauxton qui est un fork de Fauxton originalement développé pour CouchDB.

Historique
PouchDB est un projet créé en juin 2010 par Mikeal Rogers et éventuellement distribué sous la licence libre Apache version 2. Actuellement, le projet est maintenu par une communauté de développeurs, dont Dale Harvey et Nolan Lawson. Historiquement, PouchDB utilisait seulement LevelDB, WebSQL et IndexedDB comme moteur de base de données. Par contre, en 2014, l'équipe a décidé d'intégrer l'écosystème de LevelUP dans le projet. Cela permet à PouchDB d'utiliser tous les moteurs de base de données offerts par LevelUP.

Les numéros de version du projet suivent la convention semver et est actuellement à la version 5.3.0.

Cas d'utilisations et déploiements en production
La synchronisation offerte par PouchDB est idéale pour développer des applications web visant le mobile où la connectivité n'est pas garantie, et où l'application doit pouvoir fonctionner en tout temps. PouchDB peut aussi être intégré dans une application mobile native, ce qui rend cette base de données utilisable pour tous types d'applications mobiles.

Applications utilisant PouchDB
Plusieurs applications utilisent PouchDB en production. Cette liste comprend quelques exemples notables.
 * eHealthAfrica, pour avoir une application fonctionnant sans réseau.
 * HospitalRun, pour recevoir des mises à jour quand il y a du réseau.
 * Squarespace Blog, pour avoir un rendu d'image rapide quand il n'y a plus de réseau.

Services
Puisque PouchDB peut se synchroniser nativement avec CouchDB, toutes les compagnies offrants des services pour CouchDB peuvent être utilisée avec PouchDB. Cloudant de IBM encourage l'utilisation de PouchDB avec leur service.

Fonctionnalités principales
PouchDB partage plusieurs aspects avec CouchDB. Pour cette raison, plusieurs des fonctionnalités de PouchDB peuvent aussi être retrouvé dans CouchDB.

Faite pour les navigateurs
PouchDB est une implémentation de CouchDB en JavaScript. Cela lui permet de fonctionner entièrement dans un navigateur web et ainsi se différencie de pratiquement de toutes les autres bases de données sur le marché. Cela permet de construire des applications web riches et puissantes. Ces applications ont l'opportunité de sauvegarder de grandes quantités de données localement et de les synchroniser avec des serveurs distants. Il est aussi possible d'utiliser PouchDB directement par HTTP et ainsi ne pas avoir l'obligation de sauvegarder des données localement. Cette fonctionnalité peut être utile pour une application ayant besoin d'une quantité limitée de données. Une fois la synchronisation terminée, l'application n'a plus besoin de faire des requêtes sur le réseau pour être fonctionnelle. Cela permet de produire des applications plus fluides et semblables aux applications natives.

Utilisation sans connexion
Ne pas être connecté à Internet en tout temps est une situation courante pour les appareils mobiles. Si une application web doit être en tout temps fonctionnelle, elle doit être conçue « offline first ». PouchDB est un outil aidant à résoudre ce défi. Cette base de donnée permet de sauvegarder de l'information de façon structurée sur un client même si ce dernier n'est plus connecté avec une base de données distante. Une fois la connectivité retrouvée, PouchDB sera capable de se synchroniser avec une ou plusieurs bases de données distantes pour recevoir des modifications extérieures et pour propager les modifications faites par l'utilisateur. Ainsi, l'utilisateur peut continuer à utiliser l'application sans interruption.

Utilisable côté serveur
PouchDB a la possibilité de fonctionner sur un serveur et ainsi remplacer CouchDB. Il est possible de l'utiliser simplement comme une basse de données autonome à l'aide du projet PouchDB-Server. Il est aussi possible de l'intégrer dans une application serveur écrite en Node.js.

Adaptateurs
PouchDB ne contient pas son propre moteur de stockage, mais il utilise plutôt ceux présents sur le système. PouchDB vient avec plusieurs adaptateurs pour être capable de se connecter avec les bases de données présentes. Alors, son objectif est d'offrir une interface de programmation simple et standard entre tous les environnements JavaScript.

Quand PouchDB fonctionne dans un navigateur web, il tente d'utiliser WebSQL, ou le plus moderne IndexedDB. Malgré le fait que WebSQL peut être plus performant qu'IndexedDB, l'adaptateur par défaut dans un navigateur est IndexedDB. Il y a plusieurs raisons derrière ce choix. Une des raisons majeures est que Mozilla Firefox ne supporte pas WebSQL. De plus, IndexedDB est le nouveau standard de stockage et l'équipe de PouchDB tente d'encourager le développement des nouveaux standards plutôt que d'encourager les anciens.

Pour les applications mobiles natives, WebSQL et IndexedDB peuvent être utilisés. Si l'application demande une plus grande quantité de données que la limite permise par ces derniers (qui est habituellement de 50 Mb), il est possible d'utiliser l'adaptateur SQLite. Par contre, ce dernier peut poser certains problèmes. Par exemple, SQLite peut être plus lent que ces deux compétiteurs et l'adaptateur ne passe pas toute la suite de tests de PouchDB.

En 2014, PouchDB a arrêté d'utiliser ses propres adaptateurs pour utiliser ceux de LevelUP. Cela a permis de grandement étendre le nombre de moteurs de stockages utilisables. Ce changement a majoritairement affecté PouchDB côté serveur. Initialement côté serveur, PouchDB utilisait LevelDB comme seul moteur de stockage. Suite au changement de 2014, une grande quantité de moteurs peuvent être utilisées. Voici une liste des moteurs les plus utilisés.
 * MemeDOWN, qui est un moteur de stockage complètement en mémoire.
 * Riak, qui est une base de données distribuée et hautement performante.
 * MySQL, qui est un des RDBMS les plus utilisés.

Réplication
Étant fortement inspiré de CouchDB, PouchDB a pour but d'offrir de puissants outils de réplications. Elles suivent le principe de la réplication multi-maîtres. Selon ce principe, tous les noeuds peuvent être lus ou écrits sans devoir en considérer un seul en tant que source de vérité.

Selon le théorème CAP, CouchDB et PouchDB sont des bases de données DT. Ainsi, le système est Tolérant aux partitions, toujours Disponibles et éventuellement consistant. Un système distribué éventuellement consistant promet seulement que si aucune modification n'est faite, éventuellement toutes les partitions du système seront consistantes.

Résolution de conflits
Habituellement, des conflits se produiront dans un système distribué. PouchDB ne tente pas de cacher ces conflits ni de les résoudre automatiquement, mais plutôt il les expose à l'application et lui offre des outils pour les résoudre. PouchDB offre des outils pour résoudre les conflits immédiats et les conflits éventuels qui peuvent être causés par plusieurs modifications apportées à de multiples bases de données n'étant pas synchronisées.

Extensible
PouchDB est facilement personnalisable ce qui lui permet d'offrir un riche écosystème de modules d'extensions. Plusieurs fonctionnalités peuvent être ajoutées telles l'authentification, le chiffrement ou encore la synchronisation pair-à-pair.

Navigateurs
Tous les navigateurs web modernes sont supportés. Plus précisément : PouchDB a besoin d'un environnement ES5 pour fonctionner, mais il peut tout de même fonctionner avec de plus anciens navigateurs web. En ajoutant un « shim » ES5 il est possible de faire fonctionner PouchDB avec ces anciens navigateurs web. De plus, il est possible d'utiliser un adaptateur pour ne pas utiliser WebSQL et IndexedDB s'ils ne sont pas présents. Cet adaptateur permet de sauvegarder tout en mémoire sans utiliser le disque.
 * Firefox 29+
 * Chrome 30+
 * Safari 5+
 * Internet Explorer 10+
 * Opera 21+
 * Android 4.0+
 * iOS 7.1+
 * Windows Phone 8+

Applications natives
PouchDB peut être utilisé pour bâtir des applications mobiles natives. Apache Cordova permet de construire ces applications. Cordova offre aussi la possibilité d'utiliser un adaptateur pour SQLite. PouchDB peut aussi être utilisé pour bâtir des applications natives pour ordinateur personnel. PouchDB fonctionne avec NW.js, Electron.js et Chrome apps qui permettent de construire ces applications.

Serveurs
PouchDB peut aussi être utilisé en tant que serveur de base de données autonome. Il peut aussi être intégré dans un serveur écrit avec Node.js. C'est deux derniers peuvent fonctionner sur tous les environnements supportant Node.js. Actuellement, ceux-ci incluent :
 * Mac OS X
 * Microsoft Windows
 * NonStop
 * Unix