MongoDB et C# 08/02/2011 Rui Carvalho Yann Schwartz 2 Au menu • NoSQL en 5 minutes • MongoDB dans les grandes lignes • Modéliser ses données dans Mongo • Le requêtage • Fonctionnalités avancées • Un exemple : MongOverlfow 3 D’où vient NoSQL ? 4 SGBDR vs. NoSQL SGBDR NoSQL • Tables – Relations • Autre chose… • SQL • Ca dépend… • Transactions fortes • Ca dépend aussi • Centralisé • Réparti 5 Modèles de données • Clé-valeur • Memcached, Reddis • Colonnes Big Table, Cassandra • Documents • CouchDB, MongoDB 6 Requêtage • Propre au modèle de données • Par clé • Map/Reduce (agrégation) • JSON 7 Transactions • Les garanties dépendent du modèle et des choix de conception de la base… • Toujours des transactions atomiques • Mais pas forcément de transactions explicites pour plusieurs actions 8 De nouveaux acronymes ! • ACID Atomic Consistent Isolated Durable • CAP (choisir deux sur trois) Consistent Available Partitionned • BASE BAsically Available Soft State Eventually Consistent 9 A quoi ça sert ? • Caches à valeur ajoutée (requêtables, distribués, persistents) • Données transitoires • Contraintes de charge • Modèles élastiques • Résoudre l’ impedance mismatch 10 Au menu • NoSQL en 5 minutes • MongoDB dans les grandes lignes • Modéliser ses données dans Mongo • Le requêtage • Fonctionnalités avancées • Un exemple : MongOverlfow 11 MongoDB • Base de données orientée documents • Schémas souples • Requêtes exprimées en JSON • Données stockées et transmises en BSON (binary JSON) • Montée en charge (réplication, sharding) 12 Pourquoi MongoDB • Facile à mettre en œuvre • Open Source, gratuit et vivant • Des drivers pour tous les langages • Riche mais pas trop exotique (une partie des concepts relationnels s’appliquent toujours) • Outillage assez riche • Modèle riche 13 Au menu • NoSQL en 5 minutes • MongoDB dans les grandes lignes • Modéliser ses données dans Mongo • Le requêtage • Fonctionnalités avancées • Un exemple : MongOverlfow 14 Orienté document • Les documents (ligne) de même nature sont stockées dans des collections (tables) • Un document est un arbre, composé de clés et de valeurs • Une valeur peut être: • Scalaire (int, long, string, date, binary, bool, etc.) • Tableau • Un document imbriqué 15 Un document { Id : 1, user : 1, Titre : "mon premier post", Date : 123456789, Views : 123, CommentsCount : 1, Comments : [{ Content : "super ton post!", User : "toto”}, {Content: ‘Preums !’, User: “Le Troll”} ] } Comment modéliser • Document complexe • Documents imbriqués • Les value objects font partie du document • Parfois gourmands (dénormalisation) • Limite (actuelle) de 4Mo par document • Normalisation • Approche mixte 17 • Relationnel / Document Question List(Comment) Comment Question Response List(Response) User SQL Document 18 User Au menu • NoSQL en 5 minutes • MongoDB dans les grandes lignes • Modéliser ses données dans Mongo • Le requêtage • Fonctionnalités avancées • Un exemple : MongOverlfow 19 Requêtes dans MongoDB • Requêtes en JSON • On retrouve l’équivalent des projections de SQL • Quelques agrégations par défaut … Map/Reduce pour les autres 20 Démo La console mongo 21 API d’accès • Trois bibliothèques, dont une officielle • 10gen : fonctionnalités complètes, pas de LINQ • Extension pour LINQ : fluent-mongo • NORM, mongodb-csharp : LINQ • En commun : mode document brut ou sérialisation de POCO 22 Au menu • NoSQL en 5 minutes • MongoDB dans les grandes lignes • Modéliser ses données dans Mongo • Le requétage • Fonctionnalités avancées • Un exemple : MongOverlfow 23 Sharding et réplication • Le sharding permet un partitionnement automatique des données 24 Autres fonctionnalités • Requêtes géographiques • Capped collections • FSGrid (file system réparti pour les blobs) • Javascript exécuté sur le serveur db.eval (~ procédures stockées) map/reduce ( agrégations) db.system.js ( fonctions) 25 Au menu • NoSQL en 5 minutes • MongoDB dans les grandes lignes • Modéliser ses données dans Mongo • Le requétage • Fonctionnalités avancées • Un exemple : MongOverlfow 26 Démo Mongoverflow 27 Ressources Site officiel www.mongodb.org Driver officiel github.com/mongodb/mongo-csharp-driver Extensions LINQ github.com/craiggwilson/fluent-mongo Code des démos de la session bitbucket.org/rhwy/techdays-paris-2011-mongodb-csharp Code des démos de la session News, demos : artofnet.fr, objectnull.com Twitter: @rhwy,@abolibibelot 28 MSDN et TechNet : l’essentiel des ressources techniques à portée de clic Portail administration et infrastructure pour informaticiens Portail de ressources technique pour développeurs http://technet.com http://msdn.com 29