Publié par

Il y a 7 ans -

Temps de lecture 6 minutes

Revue de Presse Xebia

Revue de Presse Xebia
La revue de presse hebdomadaire des écosystèmes Java/JEE proposée par Xebia.

Actualité éditeurs / SSII

Le coin de la technique

Evènements de notre communauté en France et à l’étranger

Actualité éditeurs / SSII

MongoDB 2.2

La tant attendue release 2.2 de MongoDB est enfin sortie le 29 août dernier.

Tout d’abord, nous pouvons dire adieu au tristement célèbre global lock. Vous le saviez sans doute: jusqu’à présent, le processus mongod devait acquérir un verrou global pour chaque opération d’écriture, bloquant ainsi potentiellement des opérations de lecture. Une stratégie de verrouillage aussi naïve n’a pas manqué d’attirer les sarcasmes de la communauté NoSQL, même si son impact réel sur les installations en production n’est pas aussi important qu’on pourrait le croire.

Consciente malgré tout qu’une amélioration s’imposait, 10Gen s’est donné pour but d’affiner progressivement l’étendue à verrouiller: désormais positionnée au niveau base de données, elle devrait bientôt passer au niveau collection, et peut-être même au niveau document.

On pourrait cependant arguer qu’à moins d’avoir de multiples bases de données, la différence sera minime. C’est sans compter avec le lock with yield – également appelé PageFaultException Architecture – que Dwight Merriman explique dans une vidéo: depuis déjà la version 2.0, le processus relâche le verrou en présence d’un défaut de page l’obligeant à effectuer des entrées-sorties. Cette technique permet d’améliorer très nettement la concurrence d’accès, même sur une seule base de données.

Parmi les autres nouveautés de cette version, nous trouvons le tout nouveau Framework d’Agrégation. Les opérations d’agrégation – analogues à la clause GROUP BY du monde SQL – permettent de trier, de filtrer et de calculer des sommes et des moyennes à partir d’une collection de départ; jusqu’à présent, avec MongoDB, on pouvait soit utiliser les bonnes « vieilles » fonctions count(), distinct() et group(), aux fonctionnalités assez limitées – group() notamment ne fonctionne pas en environnement shardé – ou bien sortir l’artillerie lourde du framework MapReduce. Le Framework d’Agrégation vient en quelque sorte combler le « gap » laissé entre ces deux choix.

Le principe consiste à définir un « pipeline » d’opérations, un peu comme l’opérateur pipe des shells Linux: chaque étape du pipeline prend en entrée les documents produits par l’étape précédente. Voici un exemple illustré inspiré par la documentation du framework; imaginons une collection représentant des villes américaines, et l’on souhaite obtenir la population des états américains ayant au moins 10 millions d’habitants. L’équivalent SQL d’une telle requête pourrait être le suivant:

SELECT state, SUM(population) AS totalPopulation
FROM cities
GROUP BY state
HAVING population > 10000000

Le pipeline MongoDB qui nous permettrait de réaliser cette requête comporterait deux étapes: une première étape « $group » effectue la somme et le regroupement par état, une deuxième étape « $match » filtre ensuite les résultats n’ayant pas le nombre minimum requis:

Les principaux opérateurs de pipeline sont les suivants:

Opérateur Description Equivalent SQL
$project Modifie le document (projection) SELECT
$group Regroupe les documents GROUP BY
$match Filtre les documents HAVING
$sort Trie les documents ORDER BY

La liste complète des opérateurs est disponible ici.

A noter tout de même un certain nombre de limitations:

  1. Le résultat final est un document « chapeau » encapsulant l’ensemble des documents retournés par le pipeline; de ce fait, la taille maximum autorisée pour le résultat est limitée à 16 mégaoctets.
  2. De plus, il n’est pas possible – du moins pour l’instant – de stocker le résultat d’une agrégation dans une collection à part: le résultat est obligatoirement retourné au client.
  3. Certaines opérations sont effectuées, du moins pour l’instant, en mémoire, ce qui peut limiter les possibilités, en particulier pour l’opération « $sort », qui doit en outre attendre que l’étape précédente ait produit la totalité des documents à trier.
  4. Il n’est pas possible de mettre à jour les documents d’origine au cours d’une opération d’agrégation; il s’agit d’ailleurs d’une limitation gênante dans bien des situations, même en dehors d’une opération d’agrégation.
  5. Il n’est pas possible, pour l’instant, de consulter ou d’optimiser le plan d’exécution du pipeline.

Et enfin, notons que la documentation MongoDB officielle a fait peau neuve: disponible sous docs.mongodb.org, on en trouvera également le code source sous GitHub (il semblerait néanmoins que tout n’ait pas été encore migré).

Le coin de la technique

Nouvelle faille de sécurité 0-Day identifiée sur Java

Une nouvelle faille de sécurité concernant Java 7 a été découverte le 27 août 2012. Cette faille, largement diffusée et exploitée, permettait de contourner les sécurités des systèmes Windows, Linux et OSX 10.7+ pour y exécuter des malwares tels que Poison Ivy (voir cet article et l’annonce officielle).

Oracle nous a livré la correction de l’exploit le 30 août (voir cet article du blog d’Oracle).

Evènements de notre communauté en France et à l’étranger

Live Webinar : « de l’Intégration Continue à la Livraison Continue avec Jenkins Enterprise »

Date : 12 Septembre 2012
Horaire : 6:00 PM CET
Présentateurs : Mark Prichard (Sr. Director of Product Management, CloudBees) et Andrew Phillips (VP Product Management, XebiaLabs)
Durée : 60 Minutes
Inscription : merci de remplir la fiche d’inscription ci-dessous

Délivrer de la valeur aux métiers est devenu l’enjeu principal de nombreuses organisations IT. Alors que bon nombre d’équipes sont parvenues à mettre en place des processus et outils d’intégration continue, on leur demande maintenant d’aller encore plus loin en implémentant de la livraison continue. Pour y parvenir, les équipes ont besoin de mettre en place des tests automatisés, de l’intégration continue et des déploiements automatiques.

Rejoignez Mark Prichard, Sr Director of Product Management, CloudBees et Andrew Phillips, VP Product Management, XebiaLabs, pour ce webinar au cours duquel ils présenteront une approche pragmatique pour mettre en place de l’intégration continue et de la livraison continue à l’échelle d’une entreprise avec Jenkins Enterprise et Deployit.

Ils discuteront des différents enjeux, présenteront Jenkins Enterprise, expliqueront comment configurer Jenkins pour de la haute disponibilité et pour améliorer la productivité des développeurs et des administrateurs Jenkins. Ils présenteront également le plugin Deployit pour Jenkins et montreront comment en ajoutant des capacités de déploiement continu à Jenkins, il est possible d’accélérer le time to market des applications et faciliter la transition vers des clouds privés, hybrides ou publics.

Le webinar couvrira l’agenda suivant :

  • Intégration Continue d’Entreprise avec Jenkins : haute disponibilité et capacité à monter en charge
  • Déploiement Continu « Out of the Box » depuis Jenkins vers vos principaux middlewares
  • Migrer de vos middlewares internes vers des clouds privés, hybrides, publics ainsi que vers des platesformes de type PaaS.

Pour vous inscrire, merci de remplir le formulaire ci-dessous :

http://www.xebialabs.com/cloudbees

JavaCampParis 9

La neuvième édition du JavaCampParis aura lieu lors d’un picnic aux tuileries le 20 septembre à partir de 19h. Renseignements et inscriptions sur le wiki de l’évènement.

Publié par

Publié par Xebia France

Xebia est un cabinet de conseil international spécialisé dans les technologies Big Data, Web, les architectures Java et la mobilité dans des environnements agiles. Depuis plus de 15 ans, nous avons la volonté de partager notre expertise et nos actualités à travers notre blog technique.

Commentaire

1 réponses pour " Revue de Presse Xebia "

  1. Publié par , Il y a 7 ans

    Il me semble que « la population des états américains ayant au moins 10 millions d’habitants » implique une clause « > 10000000 » sur la somme des populations par état, et non sur la population de chaque ville. En d’autres termes, est-ce qu’il ne faudrait pas remplacer..

    SELECT state, SUM(population) AS totalPopulation
    FROM cities
    GROUP BY state
    HAVING population > 10000000

    ..par :

    SELECT state, SUM(population) AS totalPopulation
    FROM cities
    GROUP BY state
    HAVING SUM(population) > 10000000

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Nous recrutons

Être un Xebian, c'est faire partie d'un groupe de passionnés ; C'est l'opportunité de travailler et de partager avec des pairs parmi les plus talentueux.