Jongo = Mongo + Java // le 21 mars au Mongo User Group

Le 21 mars, le Mongo User Group à la gentillesse d’accueillir les développeurs de Jongo.

Si Mongo est plein de qualités, les exploiter à l’aide de son driver Java peut être délicat. Des sucres syntaxiques en simplifient d’ailleurs l’usage, Morphia – le plus populaire – permet d’écrire des requêtes à l’aide de builders et d’exploiter les résultats unmarshallé en objets Java. Dans leur lignée, Jongo propose une nouvelle approche : écrire directement les requêtes en chaînes de caractères (et récupérer les résultats unmarshallés).

En un clin d’oeil :

// Mongo shell
db.peoples.find({age: {$gt: 18}})
 
// Jongo
Iterable<People> adults = peoples.find("{age: {$gt: 18}}").as(People.class);
 
// Java driver
Iterable<BSONObject> adults = peoples.find(new BasicDBObject("age", new BasicDBObject("$gt", 18)));
// Morphia
Iterable<People> adults = ds.createQuery(People.class).field("age").greaterThan(18);

Les retours sont bienvenus sur l’api à l’étude et les sources GitHub.

5 Responses

  • Question bête mais quel est l’intérêt réel d’écrire les requêtes en Mongo Shell ?
    Performance?

    Y’a des benchs par rapport a Morphia?

  • J’ai rapidement regardé : ça a l’air pas mal du tout ! Ayant un peu exploré MongoDB je me suis demandé pourquoi il n’est pas possible d’élaborer une requete directement en JSON.
    En ce qui concerne les requêtes paramétrées (très pratiques) offertes par Jongo : avec JDBC on a été habitué à utiliser ‘?’ comme caractère de remplacement. Vous utilisez ‘#’. Y a-til une raison particulière ?

  • @Dominique Écrire des requêtes BSON nous semble plus naturel que d’utiliser l’approche — déjà controversée en SQL — de l’api Criteria. L’écriture est celle documentée sur mongodb.org, elle est compatible avec les nouveautés sans nécessiter de développements et est sans équivoque dans le code : combien de fois avons-nous été dubitatifs face à une requête de plusieurs lignes en Criteria sans pouvoir dire pour sûr la requête effective ?

    Bien entendu cela a, en plus, un avantage important sur les performances : nos premiers calculs — dont nous publierons le source — donne Jongo deux fois plus rapide que Morphia pour le marshalling (la sauvegarde) et l’unmarshalling (le requêtage). L’écart se creuse encore davantage avec l’augmentation de la volumétrie.

  • @Yves
    Merci pour les détails sur Jongo. Cela semble très prometteur!

  • @Sebastien
    En effet nous utilisons le caractère de remplacement ‘#’ dans les requêtes JSON.
    Nous avons voulu marquer une différence avec les paramètres JDBC ‘?’ qui implique la notion de requête précompilée (ie. PreparedStatement).
    Suite à vos remarques, nous avons crée une tâche https://github.com/bguerout/jongo/issues/28 pour permettre à l’utilisateur de l’API de choisir son caractère de remplacement.

Laisser un commentaire