URL: https://linuxfr.org/news/mongodb-sort-en-version-2-2 Title: MongoDB sort en version 2.2 Authors: Grégoire Seux Nÿco, Nils Ratusznik, Bruno Michel, jcr83, Cyprien, passant·e et NeoX Date: 2012年07月25日T22:21:57+02:00 License: CC By-SA Tags: mongodb et base_de_données Score: 31 Une nouvelle version de la base de données MongoDB est sortie ce mercredi. Il s'agit de la version 2.2 qui fait suite à la version 2.0 (le versionnement adopte un système pair/impair : pair pour les versions stables, impair pour les versions en développement). Pour rappel, MongoDB (_hu**mongo**us **d**ata**b**ase_) est une base de données développée par la société 10gen. Elle s'inscrit dans le mouvement NoSQL (_Not Only SQL_), très à la mode. Les forces de MongoDB viennent avant tout de sa simplicité : aucun schéma, installation simplissime, peu de concept complexes à maîtriser avant de l'utiliser. C'est un système de gestion de base de données orientée documents, extensible, écrit en langage C++ et distribué sous licence AGPL. Plus d'information sur la base de données sur [Wikipedia](http://en.wikipedia.org/wiki/MongoDB) ou sur le site de MongoDB. Dans cette dépêche, nous étudierons les nouveautés proposées par cette nouvelle version. Les plus pressés iront consulter les [notes de version](http://docs.mongodb.org/manual/release-notes/2.2/) tandis que les pointilleux pourront s'intéresser à la liste des [bugs corrigés](https://jira.mongodb.org/browse/SERVER/fixforversion/11218) par cette version. ---- [Page française de MongoDB sur Wikipedia](http://fr.wikipedia.org/wiki/MongoDB) [Page anglaise de MongoDB sur Wikipedia](http://en.wikipedia.org/wiki/MongoDB) [Site Officiel](http://www.mongodb.com) [Notes de version](http://docs.mongodb.org/manual/release-notes/2.2/) [DLFP : Sortie de MongoDB 2.0](http://linuxfr.org/news/sortie-de-mongodb-20-rc) [DLFP : présentation de MongoDB lors de la sortie de la version 1.4](http://linuxfr.org/news/mongodb-14-pr%C3%AAt-pour-la-production) [Tutoriel MongoDB](http://tutorial.mongly.com/tutorial/index) [Livre d'introduction à MongoDB](http://openmymind.net/2011/3/28/The-Little-MongoDB-Book/) ---- Les avancées importantes proposées par MongoDB 2.2 sont : * le framework d’agrégation ; * l'amélioration de la gestion de la concomitance ; * l'ajout de collection TTL ; * le raffinement du routage des requêtes. ## Framework d'agrégation## L'utilisation de MapReduce rebutait probablement les utilisateurs de MongoDB (NDLR : à tort probablement). La fonctionnalité était sujette à quelques bugs. Les développeurs de MongoDB ont donc décidé de publier un [framework d'agrégation](http://docs.mongodb.org/manual/applications/aggregation/) permettant de réaliser des requêtes plus complexes que les habituels `find` et `count`, permettant ainsi aux utilisateurs venant du monde SQL d'effectuer des calculs plus complexes côté base de données. La [syntaxe](http://docs.mongodb.org/manual/reference/aggregation/) rappelle facilement [cascading](http://www.cascading.org/) qui simplifie les requêtes sur les clusters Hadoop et s'en inspire probablement. Il permet, par exemple, de réaliser un équivalent de requête SQL `group by` et `having` facilement. Ce framework fonctionne y compris sur les clusters utilisant le _sharding_. Aucune information en revanche n'est donnée pour faire fonctionner les requêtes d'agrégation sur les _secondaries_ (NDLR : les esclaves). ## Amélioration de la gestion de la concomitance ## La gestion de la concomitance était un problème revenant régulièrement sur la liste de diffusion MongoDB ainsi que dans le _bugtracker_. Un des plus gros reproches fait à MongoDB est son système de verrou global au serveur (_i.e._ une seule opération d'écriture peut s’exécuter à un instant donné sur le serveur). L'approche a été revue et le verrou est désormais descendu au niveau de la _database_, ce qui devrait augmenter les performances générales de MongoDB en cas d'écritures concomitantes dans plusieurs bases. L'étape suivante sera de descendre le verrou au [niveau de la collection](https://jira.mongodb.org/browse/SERVER-1240) puis au niveau du document mais ce n'est pas encore prévu (et c'est bien dommage !). Les verrous ont donc été rendus plus fin, c'est à dire qu'il existe désormais plusieurs types de verrous selon la portée des opérations. On pourra trouver le détail sur la [page dédiée](http://docs.mongodb.org/manual/reference/server-status/#locks). ##L'ajout de collection TTL## Les [collections TTL](http://docs.mongodb.org/manual/tutorial/expire-data/) (_time to live_) permettent de stocker des documents ayant une certaine durée de vie, c'est à dire qu'ils disparaissent de la collection après un certain temps. Ce temps est un réglage global à la collection. On peut facilement imaginer l'usage de telles collections : logs d'erreur, journaux d'évènements ou tout autre donnée volatile. Cette fonctionnalité vient en complément des collections à taille fixe (_capped_) agissant comme un _buffer_ circulaire. La fonctionnalité fonctionne dans les environnement répliqués et partition-nés. ## Le raffinement du routage des requêtes## Deux améliorations sont au menu : * il est désormais possible de spécifier le type d'instance sur lesquelles les requêtes sont faites de manière plus fine. Dans les versions précédentes de MongoDB, on pouvait spécifier si on souhaitait lire sur le PRIMARY ou bien sur un SECONDARY. Grâce aux _read preferences_, on peut désormais demander, sur le PRIMARY à lire de préférence sur le PRIMARY mais en acceptant un SECONDARY, mais aussi sur un SECONDARY, de lire sur le SECONDARY ou bien sur un PRIMARY. On peut également étiqueter les instances et demander à lire de préférence sur une instance portant une certaine étiquette. * il est également possible de configurer plus finement le partionnement des données (_sharding_) en spécifiant une relation entre la clé de partionnement et la partition (_shard_) sur laquelle elle va aller. Dans les versions précédentes, cette répartition était décidée par MongoDB, on peut donc désormais influer et tenir compte de la topologie de son cluster. Par exemple, on pourra insérer les utilisateurs provenant d'un pays A dans les _shards_ présent dans les _datacenters_ du pays A. ## Autres avancées ## On notera également quelques améliorations moins importantes : * l'optimisation de certains types de requêtes ; * l'amélioration de la plupart des outils de diagnostics ; * la possibilité d'envoyer les logs via [syslog](https://jira.mongodb.org/browse/SERVER-2957) ; * l'utilitaire mongoimport permet d'importer des documents d'une taille supérieure à 16 Mo ; * shell amélioré : * [Unicode](https://jira.mongodb.org/browse/SERVER-2939) mieux pris en charge ; * fonctionnalités d'édition comme dans Bash en [emacs-mode](https://jira.mongodb.org/browse/SERVER-4312) ; * prise en charge des commands multi-lignes dans l'historique ; * une amélioration de la propagation lors de la mise à jour de la configuration lors d'ajout ou de la suppression de serveurs.

AltStyle によって変換されたページ (->オリジナル) /