Utilisateur:DrPandemic/Brouillon
Développé par | Mikeal Rogers, Dale Harvey et Nolan Lawson |
---|---|
Première version | |
Dernière version | 3.2.0 (le 2016 mars 04 | )
État du projet | Actif |
Écrit en | JavaScript |
Environnement | Cross-platform |
Type | Base de données orientée documents |
Licence | Apache License 2.0 |
Site web | pouchdb.com |
PouchDB est une base de données open source faite pour le web et inspirée par Apache CouchDB. Elle a été conçue afin d'aider les développeurs à construire des applications «offline first»[1], c'est-à-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 et habituellement, les requêtes se font sous la forme de MapReduce.[2][3] PouchDB ne contient pas son propre moteur de base de stockage, il utilise plutôt ceux disponibles dans l'environnement d'exécution.
L'objectif principal de PouchDB est de se synchroniser à des bases de données distantes.[4] Par exemple, elle est en mesure de synchroniser plusieurs bases de données vers une seule base de données ou encore de synchroniser une vers de multiples.
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.[5]
PouchDB ne contient pas nativement une interface graphique. Il est par contre possible d'utiliser Fauxton qui est un fork de Fauxton développé à la base pour CouchDB.
Historique
[modifier | modifier le code]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[6] dans le projet. Cela permet à PouchDB d'utiliser tous les moteurs de base de données offerts par LevelUP[6].[7]
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
[modifier | modifier le code]La synchronisation offerte par PouchDB permet de développer des applications web visant les appareils mobiles lorsque la connectivité n'est pas garantie, mais nécessitant un fonctionnement 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 les types d'applications mobiles.
Applications utilisant PouchDB
[modifier | modifier le code]Plusieurs applications utilisent PouchDB en production. Cette liste comprend quelques exemples notables.[8]
- eHealthAfrica[9], pour avoir une application fonctionnant sans réseau.
- HospitalRun[10], 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
[modifier | modifier le code]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 également l'utilisation de PouchDB avec leur service.[11]
Fonctionnalités principales
[modifier | modifier le code]PouchDB partage plusieurs aspects avec CouchDB. Ainsi, plusieurs des fonctionnalités de PouchDB se retrouvent dans CouchDB.
Faite pour les navigateurs
[modifier | modifier le code]PouchDB est une implémentation de CouchDB en JavaScript.[12] Cela lui permet de fonctionner entièrement dans un navigateur web, ce qui la différencie de la majeure partie des autres bases de données actuellement sur le marché. Cela permet aussi de construire des applications web à la fois riches et puissantes. Ces applications ont l'opportunité de sauvegarder localement de grandes quantités[13][14] de données et de les synchroniser à des serveurs distants. Il est aussi possible d'utiliser PouchDB directement par HTTP et ainsi ne pas avoir l'obligation de sauvegarder localement des données.[15] Cette fonctionnalité peut être utile dans le cas d'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 ce qui permet de produire des applications plus fluides et semblables aux applications natives.[16]
Utilisation sans connexion
[modifier | modifier le code]Ne pas être connecté à Internet en tout temps est une situation courante pour les appareils mobiles. En effet, si une application web doit être en tout temps fonctionnelle, elle doit être conçue « offline first »[1]. PouchDB est un outil permettant de 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
[modifier | modifier le code]PouchDB est en mesure de fonctionner sur un serveur et ainsi remplacer CouchDB. Il est possible de l'utiliser à la fois comme une basse de données autonome à l'aide du projet PouchDB-Server ou encore de l'intégrer dans une application serveur écrite en Node.js.[17]
Adaptateurs
[modifier | modifier le code]PouchDB ne contient pas son propre moteur de stockage, elle utilise plutôt ceux présents sur le système. PouchDB vient avec plusieurs adaptateurs lui permettant de se connecter avec les bases de données présentes. Son objectif est d'offrir ainsi une interface de programmation simple et standard entre tous les environnements JavaScript.[18]
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.[19] Il y a plusieurs raisons expliquant ce choix. Une des principales raisons est que Mozilla Firefox ne supporte pas WebSQL.[20] De plus, IndexedDB est le nouveau standard de stockage et l'équipe de PouchDB tente d'encourager ces nouvelles normes.[19]
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)[14], il est possible d'utiliser l'adaptateur SQLite. Par contre, ce dernier peut engendrer certains problèmes. Par exemple, SQLite est parfois plus lent que ces deux compétiteurs et l'adaptateur ne passe pas toute la suite de tests de PouchDB.[18]
En 2014, PouchDB a cessé d'utiliser ses propres adaptateurs au bénéfice de ceux de LevelUP[6].[21] Cela a permis d'étendre considérablement le nombre de moteurs de stockages utilisables. Ce changement a majoritairement affecté PouchDB côté serveur. En ce qui concerne le serveur, PouchDB utilisait initialement LevelDB comme seul moteur de stockage. Suite au changement de 2014, une grande quantité de moteurs sont depuis lors utilisable.[22] 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
[modifier | modifier le code]Étant fortement inspiré par CouchDB, PouchDB a pour objectif 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é.[4]
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.[4] Un système distribué éventuellement consistant promet seulement que si aucune modification n'est faite, toutes les partitions du système seront éventuellement consistantes.
Résolution de conflits
[modifier | modifier le code]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.[5] 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
[modifier | modifier le code]PouchDB est facilement personnalisable ce qui offre l'avantage 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.[23]
Support
[modifier | modifier le code]Navigateurs
[modifier | modifier le code]Tous les navigateurs web modernes sont supportés. Plus précisément :[2]
- Firefox 29+
- Chrome 30+
- Safari 5+
- Internet Explorer 10+
- Opera 21+
- Android 4.0+
- iOS 7.1+
- Windows Phone 8+
PouchDB a besoin d'un environnement ES5 pour fonctionner, mais il peut tout de même être compatible avec de plus anciens navigateurs web en ajoutant un « shim » ES5. De plus, l'utilisation d'un adaptateur permet de ne pas requérir à WebSQL et IndexedDB lorsqu'ils ne sont pas présents. Cet adaptateur permet de sauvegarder en mémoire sans utiliser le disque.[18]
Applications natives
[modifier | modifier le code]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 est aussi utilisable pour bâtir des applications natives pour ordinateur personnel. Elle fonctionne avec NW.js[24], Electron.js et Chrome apps qui permettent de construire ces applications.
Serveurs
[modifier | modifier le code]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. Ces deux derniers peuvent fonctionner sur tous les environnements supportant Node.js. Actuellement, ceux-ci incluent :[25]
- Mac OS X
- Microsoft Windows
- NonStop[26]
- Unix
Interfaces graphiques
[modifier | modifier le code]![](http://upload.wikimedia.org/wikipedia/commons/thumb/5/5b/Fauxton.png/220px-Fauxton.png)
PouchDB peut être géré avec une quantité limitée d'interfaces graphiques dù à sa nature. Quand PouchDB est utilisé en tant que serveur, il est possible d'utiliser une version modifiée de Fauxton pour intéragir avec la base de données. La version modifié demeure très semblable à la version originale.
Pour visualisé de l'information sauvegardé à l'aide de PouchDB directement dans un navigateur web, il existe une extension Google Chrome nommé PouchDB Inspector qui permet d'utiliser l'interface de Fauxton directement dans les outils de développeurs de Google Chrome.[27]
Voir aussi
[modifier | modifier le code]Articles connexes
[modifier | modifier le code]Bibliographie
[modifier | modifier le code]- (en)« Offline First » (consulté le )
- (en)« Learn PouchDB » (consulté le )
- (en)« PouchDB Queries » (consulté le )
- (en)« PouchDB Replication » (consulté le )
- (en)« PouchDB Conflicts » (consulté le )
- (en)« LevelUP » (consulté le )
- (en)« LevelUP integration to CouchDB » (consulté le )
- (en)« PouchDB Users » (consulté le )
- (en)« eHealth Africa » (consulté le )
- (en)« HospitalRun » (consulté le )
- (en)« Cloudant and PouchDB » (consulté le )
- (en)« What is PouchDB » (consulté le )
- (en)« Data limits » (consulté le )
- (en)« Quota Research » (consulté le )
- (en)« PouchDB over HTTP » (consulté le )
- (en)« An introduction to PouchDB » (consulté le )
- (en)« PouchDb in Node.js » (consulté le )
- (en)« Adapters » (consulté le )
- (en)« Pro Tips » (consulté le )
- (en)« The Road to IndexedDB » (consulté le )
- (en)« PouchDB Levels Up » (consulté le )
- (en)« LevelUP Storage Backends » (consulté le )
- (en)« PouchDB Plugins » (consulté le )
- (en)« NW.js » (consulté le )
- (en)« Node.js Overview » (consulté le )
- (en)« NonStop » (consulté le )
- (en)« PouchDB Inspector » (consulté le )