Expert.Net

Blog des experts CLT-Services sur Dot NET, C#, ASP.NET et le développement Web
Journée MongoFR à la Cantine

Une fois n'est pas coutume, le billet du jour va traiter d'une base NoSQL: MongoDB

Il s'agit d'un petit résumé de ma journée à la conférence MongoFR à la Cantine. La conférence proposait de nombreuses présentations réparties dans deux parcours différents.

Accueil

Une belle journée qui commence avec un petit déjeuner permettant déjà d'échanger un peu. Ce dernier est suivi par une présentation rapide des sponsors 10gen (10gen est la boîte qui développe MongoDB) et AF83.

Et c'est parti ...

Construire votre première application avec MongoDB de Antoine Girbal, Software Engineer, 10gen

Le titre était un peu trompeur, cette session présentait les solutions NoSQL en général et MongoDB.

SQL et ses limites

Le speaker a d'abord présenté les limites des BD relationnels:

  • Performance
  • Scalability

Ces bases de données sont souvent associées à des systèmes de cache comme Memcached pour pallier à certains problèmes.

D'autre part, pour le BI, les BD montrent aussi leurs limites et il faut souvent passer à d'autres structures (comme OLAP).

Le NoSQL veut résoudre ces problématiques. NDM: Rien que ça ...

NoSQL

Les bases NoSQL:

  • n'ont pas de dépendance, pas de relation entre les données
  • sont axées sur les performances et la scalability
  • facilitent la modélisation des données
  • offre une alternative à la syntaxe SQL (pour ceux qui n'apprécient pas)
  • proposent des schémas flexibles (les documents n'ont pas forcément la même structure)

Cependant, les bases NoSQL, ne proposent pas:

  • de jointures
  • de système de transaction complexe (pour permettre la scalabity horizontal)

A savoir:

  • scalabity horizontal: faire faire le boulot par plusieurs machines.
  • scalabity vertical: faire faire le boulot par une machine plus puissante.

MongoDB

Les documents manipulés sont au format JSON et stocké en BSON (où le B signifie binaire). Le BSON permet d'accélérer les accès.

Ces principales features:

  • Shell avancé (JS)
  • Système de requêtes complexes
  • Update atomique
  • Indexation des données
  • Aggrégation et Map/Reduce
  • Stockage sur un système de fichier non limité en taille et non limité en nombre de fichier (GridFS)

MongoDB propose simplement de mettre en place un système de réplication avec un maître en écriture et plusieurs esclaves en lecture (qui élisent le maître).

MongoDB permet nativement le sharding. NDM: On en reparle après.

MongoDB met à disposition beaucoup de drivers pour différents languages. La documentation est bien fournie (mais un peu fouillie).

Schema Design: Data as Documents de Nosh Petigara, Director of Product Strategy, 10gen

Cette présentation dans la langue de shakespeare donnait quelques pistes pour stocker ses données dans MongoDB.

Dans les bases SQL, la dénormalisation est souvent présente pour des raisons de performance (ou simplement par erreur !).

MongoDB permet:

  • de stocker des documents riches
  • de faire des recherches avec un système de requêtre proche de SQL
  • de faire des mises à jour atomiques

L'application pilote le schéma et non l'inverse.

Il est important de penser:

  • à l'indexation du schéma
  • de dénormaliser judicieusement ("documents stockés dans des collections différentes" versus "documents embarqués au sein d'autres documents"
  • à faire des jointures applicatives

Encore quelques conseils en vrac:

  • Quand on dénormalise, avoir en tête la durée de vie des données. Un utilisateur change rarement de nom par exemple.
  • Utiliser des attributs supplémentaires dans les documents pour optimiser les recherches.
  • Ne pas stocker dans une même collection des documents trop hétérogènes
  • Eviter de créer/supprimer les documents pour les mettre à jour
  • Eviter d'avoir des documents qui changent beaucoup de taille

MongoDB et Java en pratique de Katia Aresti

Cette présentation était un retour d'expérience sur l'utilisation de MongoDB sur un site web développé en Java.

En résumé:

  • simple et ludique
  • rapide montée en compétence
  • adapation naturelle à la philosophie (stockage des objets/documents)
  • les tests unitaires sont plus simples à écrire qu'avec un SGBDR classique
  • fonctionne bien avec Java (le driver officiel devrait bientôt voir des évolutions notables suite à un rapprochement avec un autre projet)
  • les fonctions de géolocalisations sont utiles et efficaces (mais pourraient être plus poussées)

Avancées dans la boîte à outils Ruby de Yann Klis

J'avais le choix entre Drupal et Ruby. J'ai opté pour Ruby !

Cette présentation était une présentation des différents outils proposés pour Ruby.

J'ai pas grand chose à dire sur cette présentation. Il y a eu pas mal d'échanges sur les différents drivers proposés par la communauté et par MongoDB. 

D'une façon générale, les drivers sont perfectibles et il faut bien se tenir au courant des évolutions. Cette problématique n'est pas liée au Ruby mais se retrouve dans d'autres languages.

Un petit outil sympa: mongosniff qui permet notamment de suivre les requêtes qui arrivent.

MongoDB, NoRM & ASP.NET / C# / Linq : cas client, premier retour d'expérience de Erwan de Cadoudal

Un autre retour d'expérience sur le développement d'un site web mais cette fois avec du .NET.

Le speaker de qualité ;-) présente comment il a utilisé MongoDB sur son le site en ASP.NET.

Pour

  • simplicité de développement 
  • rapidité d'insertion
  • montée en charge assurée nativement
  • installation aisée
  • accès simple aux métriques et au monitoring du serveur
  • possiblité de mettre en place du Map/Reduce

Contre

  • "driver officiel" versus "driver NoRM" (communauté et activité un peu faible)

La présentation a bien mis en avant la simplicité d'utilisation de cette solution et montre bien qu'elle mérite qu'on s'y intérèsse. J'en profite d'ailleurs pour parler d'une présentation sur MongoDB réalisée au Techdays par Rui disponible en ligne

Un petit outil sympa: mongovue qui propose une GUI pour travailler sur MongoDB.

Indexer les données et optimisation des requêtes de Antoine Girbal, Software Engineer, 10gen

La session (en VO) portait sur l'indexation d'une base MongoDB. Elle sera en fait plus théorique que pratique.

Je n'en dirais donc pas grand chose aujourd'hui.

A noter, que comme avec les SGBD qui se respectent, la fonction "explain" permet d'avoir le plan d'exécution d'une requête.

Scaling with MongoDB de Antoine Girbal, Software Engineer, 10gen

Cette session (en VO) portait sur le sharding.

Le sharding est un processus qui permet de répartir les données et la charge entre différents serveurs. Il permet la scalabily horizontale. 

Par exemple, on pourrait répartir les données entre différents serveurs en répartissant les utilisateurs à partir du nom de famille.

Les raisons de la mise en place de la scalabily horizontale sont les suivantes:

  • Le scaling vertical est limité
  • Il est plus difficile de scaler verticalement que horizontalement dans le cloud
  • Il est plus pérenne de scaler horizontalement que verticalement

La présentation a ensuite continué sur comment mettre en place le sharding et quelle était l'architecture proposée par MongoDB. 

J'en dirais pas davantage mais on voit bien que MongoDB propose pas mal de choses sur le sujet nativement.

ETL et indexation solr sur mongodb de Thibaut Barrere

Encore un retour d'expérience. Cette fois-ci c'est en Ruby !

Le projet permet d'afficher les livres mentionnés dans stackoverflow (3GB de données) et hackernews (1GB de données). La présentation portait sur l'utilisation de MongoDB notamment dans l'ETL maison utilisé pour le projet.

MongoDB est utilisé à deux étapes:

  • d'une part pour stocker/manipuler les données extraites dans un format brut
  • d'autre part directement par le site web

Pour

  • absence de schéma - économie d'échelle
  • richesse du requêtage
  • upsert (update ou insert géré de façon transparente). Ceci permet d'avoir un comportement identique lors d'un import de données complet ou incrémental.
  • API de manipulation des tables et base de données
  • scalabilité, sharding et Map/Reduce

Contre

  • Rien ... enfin, je n'ai rien noté !

La présentation a ensuite parlé de l'indexation retenue pour la recherche plein-texte:

  • MongoDB: trop limité
  • Sphynx: trop complexe
  • Solr: gagnant
On a même eu droit à la citation de la journée: MongoDB est à SQL ce que Ruby et à Java !

Bon en résumé, c'est un beau projet (mais connaissant le speaker cela ne m'étonne pas).

Utilisation de mongoDB avec node.js de Vincent Hetru

Je n'ai pas pu assister en entier à cette présentation car je devais partir.

On y a parlé du projet très en vogue Node.JS et de son utilisation avec MongoDB. 

Ce projet est à surveiller mais ne semble pas encore prêt pour la production.

Conclusion

La journée MongoFR s'arrête ici pour moi. J'ai ensuite filé voir une présentation chez Microsoft dans le cadre de l'Azure Camp

Pour conclure, c'était une belle journée bien remplie et bien organisée. L'ambiance était sympa et propice à l'échange. En ce qui concerne MongoDB, elle apparait comme une base NoSQL abordable et qui mérite l'interêt.

De l'avis des développeurs, elle est agréable à utiliser et simplifie pas mal les développements. Elle semble avoir atteint un certain niveau de maturité.

En bonus

La communauté open source Azure française dont j'ai pu rencontrer certains membres chez Microsoft propose de l'Azure gratuit sur son site ZeCloud.

Posted: mars 26 2011, 20:13 by mathieu | Commentaires (0) RSS comment feed |
  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5
Extraction d’une dll depuis le GAC

Dans ce billet je vous propose juste une solution pour extraire une dll du GAC. La dll nommée ci-dessous est utilisée à titre d’exemple.

Ouvrez une ligne de commande puis:

  • Allez dans un des répertoires (GAC, GAC_MSIL...) selon  l'archi
    • ex: cd windows\assembly\GAC_MSIL
  • Ensuite allez dans le répertoire de l'assembly souhaitée
    • ex: cd Microsoft.VisualStudio.Zip.9.0
  • Et enfin  parcourez l'arborescence jusqu'à trouver la dll recherchée
  • Pour la copier faites juste un copy source destination
    • ex: copy Microsoft.VisualStudio.Zip.9.0.dll c:\
Posted: août 19 2010, 22:56 by alex | Commentaires (0) RSS comment feed |
  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5
Filed under: .NET
Comment trouver le DbProvider.InvariantName

Jusqu’ici j’ai écrit des applications dans lesquelles la plateforme de base de donnée était fixée, et le provider instancié spécifiquement :

var connString = ConfigurationManager.ConnectionStrings[dbname]; 
Connection = new SqlConnection(connString.ConnectionString); 
Connection.Open();

Hier, me suis attelé à un code qui doit pouvoir fonctionner avec différentes bases de données et j’ai donc revu mon code Plus...

Posted: août 02 2010, 13:15 by damien | Commentaires (0) RSS comment feed |
  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5
Filed under: C#
Configuration ConnectionString pour fichier dbml

Lors de la création d'un fichier dbml sous Visual Studio, le code behind est automatiquement généré en fonction des tables qu'on ajoute graphiquement.

Le premier constructeur appelle la class de base et lui passe la ConnectionString nécessaire pour la connection à la base de données. Cependant il ne faut pas coder en dur la ConnectionString dans ce code, car il sera automatiquement regénéré à chaque fois qu'une modification sera faite au niveau graphique du fichier dbml.

Comment y remédier ?

Plus...

Posted: nov. 25 2009, 15:17 by alex | Commentaires (0) RSS comment feed |
  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5
Filed under: ASP.NET | C#
Construire une expression lambda

Les informations suivantes sont à prendre en compte avec les RIA Services CTP July, je n'ai pas testé avec la dernière version disponible de ces derniers jours.

J'ai une application cliente en silverlight  qui utilise les RIA Services pour la validation, la récupération, l'insertion
et la suppression des données.

Lors de la compilation, un DomainContext est créé côté client avec les méthodes créées dans le DomainService sur le Serveur. Pour communiquer avec le serveur , le DomainContext utiliser un HttpHandler  " DataService.axd " qui va se charger de rediriger les appels  à la class " DataServiceFactory", comme configuré dans le web.config:

<add path="DataService.axd" verb="GET,POST" type="System.Web.Ria.DataServiceFactory, System.Web.Ria, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" validate="false"/>

Plus...

Posted: nov. 22 2009, 20:56 by alex | Commentaires (0) RSS comment feed |
  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5
Filed under: C# | Linq
Facebook SDK Overview

Microsoft a publié il y a quelques jours la version 3 du Facebook SDK, permettant d'utiliser les API que Facebook met à notre disposition. Ce dernier peut notamment être utilisé au travers de WPF et Silverlight.

 Pour plus de détails, rendez-vous sur codeplex

Posted: nov. 20 2009, 15:06 by alex | Commentaires (0) RSS comment feed |
  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5
Filed under:
INotifyPropertyChanged avec Expression Lambda

Dans le Framework .NET 2.0 il existe une interface nommée INotifyPropertyChanged destinée à notifier un client lorsque la valeur d'une propriété change. Si on prend le cas de Silverlight, elle servira dans une liaison bidirectionnelle entre le client et l'objet métier.

Plus...

Posted: mai 19 2009, 23:52 by alex | Commentaires (0) RSS comment feed |
  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5
Filed under: Linq | C#
R&eacute;cup&eacute;rer la GridviewRow suite au postback d&rsquo;un &eacute;l&eacute;ment enfant

Imaginons que vous ayez un button dans une gridviewrow d’un gridview. Le button est configuré en AutoPostBack=”true” et un handler est spécifié au niveau de l’évènement OnClick;

Plus...
Posted: mai 07 2009, 11:28 by alex | Commentaires (0) RSS comment feed |
  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5
Filed under:
Sérialiser un objet en XML

Nombreux sont les projets où on a des données à sérialiser au format XML.

Voici deux méthodes créées pour un projet qui pourraient être utilisées dans une class Helper XML.

Les deux méthodes sont génériques et permettent la validation du schéma XSD  Plus...

Posted: nov. 16 2008, 12:25 by alex | Commentaires (0) RSS comment feed |
  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5
Filed under:
WebDAV: Manipuler des fichiers serveur depuis une page client (web).

WebDAV est une extension du protocole HTTP qui permet de lire, écrire ajouter et synchroniser des fichiers sur un serveur distant. Grace à WebDAV vous pouvez être plusieur à éditer le même document en même temps sur le serveur.

Quelques ressources pour le mettre en oeuvre:Plus...

Posted: nov. 15 2008, 11:20 by damien | Commentaires (0) RSS comment feed |
  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5