La dernière génération des bases de données ont les particularités suivante :
Être non relationnel, distribuée , open source et scalable.
Ce mouvement commence en 2009 et est entrain de grandir rapidement et avec beaucoup d'engouement.
La conférence a pour but de présenté les principales base noSql accessible en python. Elle sera agrémentée pour chaque base de donnée (environ 4, 10 min chacune) d'une présentation informative, d'une modélisation de schéma et d'un exemple d'application accédant au donnée (en python).
Les données sont apparues avec les programmes. L'exploitation des ces données est la raison d'être de l'informatique. Avec la gestion automatique des données, l'entreprise et les états peuvent évoluer et rivaliser avec leur concurrent à l'aide de nouveaux moyens. Base de donnée relationnelle : données dans de simple tables à deux dimentions -> Suffisant pour toutes les applications ? Milieu des années 80 : conviction que tout les problemes seront résolue par les bases de donnée avec leur structure logique et physique, indépendante des applications. Année 90 avenement des technologies objets : Des estimations montrent en effet que les développeurs de programmes OO utilisant des bases de données relationnelles passent entre 25 et 40 % de leur temps à écrire un code mappant les objets aux tables relationnelles.
L’histoire de l’Internet remonte au développement des premiers réseaux de télécommunication. L’idée d’un réseau informatique, permettant aux utilisateurs de différents ordinateurs de communiquer, se développa par de nombreuses étapes successives. 1 Licklider présente l'ordinateur comme un outil de communication et de partage des ressources. C'est le concept de l'Internet. 2 Request for comment – mise en place des norme qui régiront internet 4 Dès les années 1980, les techniques que nous reconnaissons maintenant comme les fondements de l’Internet moderne commencèrent à se répandre autour du globe 5 - La tendance depuis 2004 est l'apparition d'applications web 2.0 pour lesquelles l'internaute joue un rôle participatif.
Digg est un site Internet communautaire qui a pour but de faire voter les utilisateurs pour une page web intéressante et proposée par un utilisateur Facebook
Lorsque l'on veux scaler une base de données,une première solution peut être le partitionnement : Vertical : une base pour les livres, une base pour les CDs, etc Horizontal : une base pour les livre de A-M et une pour les livres de N-Z, …
On renonce à la normalisation des données Frais de gestion importante La scabilité a un coup qui devient important
consistence -> tout les noeuds ont les meme données en meme temps disponible -> le systeme est toujours disponible tant qu'il y a un noeud tolérance à la partition -> le systeme continue à fonctionner malgré la perte de message
Certaines données nous paraissent logiques d'être consistantes mais cela est souvent du à notre inertie d'esprit. Prenons le cas d'une valeur indiquant le stock d'un article. Si deux serveurs ont des valeurs non consistantes, il peut arriver qu'un serveur considère qu'il en reste un alors qu'un autre qui a était mis à jour, sait qu'il n'en reste plus. Lorsque vous faites un achat et si par malchance vous acheter un livre qui n'est plus en stock, le site marchand à deux possibilités : vous rembourser ou réapprovisionner le stock (je ne sais pas vous, mais cela m'est déjà arrivé de recevoir un mail en disant que le produit était épuisé,après l'avoir commandé) les sites ont fait leur choix ! Amazon a d'ailleurs constaté qu'un dixième de seconde de latence leur fait diminuer les ventes de 1%, et Google a remarqué qu'une demi seconde de latence fait chuter le trafic d'un cinquième.
Nosql : not only sql schema-free, easy replication support, simple API, eventually consistent / BASE (not ACID)
Les différents types de base de donnée : Relationnel -> ACID Key-value -> support get, put, delete sur leur cle Orientée colonne -> utilise des tables mais pas de joins, les données sont stockées par colonne opposé aux traditionnels données stocké en ligne Orientée document -> stocke des documents structurée en JSON ou en XML : facil de mapper avec des langages orientée objets CA : ont des difficultés avec les partitions et doivent répliquer leurs données (base de donnée) CP : ont des difficultés avec la disponibilités en gardant consistante leurs données sur l'ensemble des noeuds AP : eventuellement consitant avec la replication et les verifications.
Elle est conçue avant tout pour les applications web Chaque document est composé de propriétés. Il n’y a aucune contrainte sur le nombre de propriétés d’un document, sur le type de ces propriétés... Le protocole permettant d’accéder à un serveur CouchDB est basé sur HTTP, avec une interface REST. Erlang est langage fonctionnel concurrent, temps réel et distribué basé sur le modèle d'acteur. Il possède des fonctionnalités de tolérance aux pannes et de mise à jour du code à chaud permettant le développement d'applications à haute disponibilité.
Il y a trois clés qui sont imposées par CouchDB : ● _id : l’identifiant unique du document ; ● _rev : le numéro de révision du document, géré automatiquement par le moteur CouchDB ; ● _attachments : les éventuels fichiers attachés à ce document. Stockée sous la forme de texte json ( Javascript Standard Object Notation) sérialisation d'objet une chaîne de caractères doit être mise entre quotes : "ceci est un string". ● un objet (qui supporte des données de type "clé" => valeur") est représenté par des accolades : { "key1": "value1", "key2":"value2" }. ● une liste de valeurs (un tableau) est représenté par des crochets : [ "value1","value2"]. ● JSON supporte les booléens : true et false ainsi que null. ● JSON supporte les nombres flottants : 21.34576. MVCC : multiversion concurrency control
REST : Representational State Transfer, est connu comme une alternative simple au protocole SOAP, pour interfacer des web services. Rest n’est pas un protocole, c’est un style d’architecture.
CouchDB uses an "optimistic concurrency" model Ie Couchdb rejete le document si celui si n'est pas celui que vous avez envoyer ! Retrieve the document, take note of the _rev property that CouchDB sends along Decrement the quantity field, if it's greater than zero Send the updated document back, using the _rev property If the _rev matches the currently stored number, be done! If there's a conflict (when _rev doesn't match), retrieve the newest document version
Map Par exemple, considérons une liste de notes d'examen, où chaque note est 1 point trop élevée. Une fonction map de s - 1 pourrait être appliquée sur chaque note s. Reduce comment faire si l'on souhaite connaître la moyenne de la classe ? On peut définir une fonction de réduction qui diminue de moitié la liste par ajout d'une entrée dans la liste des voisins, récursivement, on continue jusqu'à ce qu'il y ait seulement une (grosse) entrée, et divise la somme totale par l'entrée originale d'éléments pour avoir la moyenne).
1 – Le plus gros cluster cassandra utilise 100 TB de donnée répartie sur 150 machine 2 – Les donnée sont automatiquement repliqués dur des mutliples noeud . La replication entre plusieurs data center est supporter . Les noeuds mort sont remplacer sans rupture de service 3 – Tout les noeuds sont identiques. Pas de point de failure 4 – Vous avez le choix entre une replication assynchrone et synchone pour chaque mis à jour 5 – Modele oriente colonne 5 – les lectures et les écritures augmente lineairement lorsqu'on ajoute des machines 6 – Procedure via un commitlog de ne perdre aucune donnée
1 – Au lieu de travailler sur des statc et rigide table avec des lignes et des colonnes vous travailler sur un graph flexible qui s'adapte a vos besoin en ayant a votre disposition des noeud , des relation et des propriétés. 2 – C'est l'application qui embarque la base de donnée neo4j 3 – Une gestion de stokage optimiser pour stocker plusieurs billion de noeud, de relaction , de proprietes. La base de donnée peut etre répartie sur plusieurs disque 4 framework performant de traversé.