af83

Pourquoi choisir MongoDB ?

Depuis quelques mois maintenant, af83 utilise la base de données NoSQL MongoDB dans son pôle R&D. Mais pourquoi ce choix ?

Qu'est ce que MongoDB ?

MongoDB est un système de stockage de données NoSQL. En effet, ce n'est pas la peine de faire du SQL pour requêter votre base de donnée MongoDB. On parle alors de base SchemaLess, car il n'est pas nécessaire de faire un script SQL plus ou moins complexe pour créer et définir la structure des données qu'on peut mettre dans notre base. C'est simple, on met juste un énorme Hash.

Le fait de n'avoir des données que sous forme de Hash revient à avoir une base de données dite orienté Documents. MongoDB est donc une base de donnée SchemaLess orientée Documents.

Les bases de données de ce type les plus connues sont CouchDB Riak et MongoDB.

Les plus d'une base de données orienté Documents, SchemaLess ?

La première grande utilité est qu'on est pas obligé d'avoir des scripts de migration pour définir et faire évoluer le format de sa base de données. C'est simple : on crée son objet et on le met dans notre base. On ne se pose pas plus de questions. Cette logique est donc beaucoup plus orientée Objet Dynamique. Un utilisateur peut facilement rajouter par la suite de nouvelles données à cet objet. Avec une base de données SchemaLess, il suffit de modifier son objet, pas sa base de données.

Dans cette même verve, il y a la création de tables. En SQL pur, à chaque nouvelle table, il faut créer un script SQL pour l'ajouter. Là, pas besoin. Tout se fait automatiquement. On peux ainsi facilement switcher entre deux bases de données et créer autant de bases que d'utilisateur.

Le sharding de MongoDB

MongoDB depuis sa version 1.2 intègre une gestion de sharding. L'application de cette gestion permet d'avoir une scalabilité plus importante. Nos données sont toutes cohérentes, car on accède toujours à tout.

Le concept du sharding n'est pas d'avoir plusieurs bases de données en master/master, mais une seule base de donnée qui répartie ses propres données dans les différentes instances. On se retrouve ainsi à posséder certaines données sur une instance et les autres sur une autre.

GridFS

MongoDB embarque avec lui un système de fichiers complet. Ce système est GridFS. MongoDB est limité par document à 4Mo, mais on a vite besoin de stocker des documents plus importants. GridFS permet ça. On stocke donc tout document supérieur à 4 Mo sur le système de fichier GridFS. GridFS permet ainsi d'avoir le sharding sur ses fichiers. On a donc besoin de rsync entre plusieurs machines. GridFS fait le boulot pour soi. On pourrait facilement rapprocher GridFS à Hbase.

Un système de requêtes évolué

Enfin le vrai intérêt de MongoDB selon moi, surtout par rapport à Riak ou CouchDB, c'est sa gestion de requêtages. On peux requêter de façon très fine grâce à une grande quantité de mots-clé. On peux donc faire des requêtes aussi riches qu'en SQL, mais tout ça sur une base de données orientée Documents.

On peux par exemple chercher tous les documents qui possèdent plusieurs éléments dans un tableau

db.things.find( { a: { $all: [ 2, 3 ] } } );

Alors qu'en SQL on aurait plus fait un

select * from things where a LIKE '%2%' AND a LIKE '%3%' 

Mais cette dernière est finalement incomplète car marchera pour un champs a contenant un array [32] en SQL mais ne fonctionnera pas dans le cas de la requête MongoDB.

On peux aussi faire de la recherche en donnant une fonction Javascript

db.myCollection.find( { $where: "this.a > 3" } );

C'est très modulaire et le nombre de mot clé ne cesse d'augmenter.

Oui, je suis un convaincu de l'utilité de MongoDB. Mais comme toute chose, essayez-le pour vraiment en voir les avantages et vous faire votre propre opinion.

Enfin pour les Rubyistes, vous avez à votre disposition des ODM (Object Document Mapping, l'ORM des base de données orienté Document) complet pour requêter votre base MongoDB : MongoMapper, MongoID et même un adapter DataMapper.

blog comments powered by Disqus