Mongoid ou MongoMapper?

J’ai essayé MongoMapper et ses fonctionnalités sont complètes (offrant presque toutes les fonctionnalités AR), mais je n’étais pas très satisfait des performances lors de l’utilisation de jeux de données volumineux. Quelqu’un at-il comparé à Mongoid? Des gains de performance?

    J’ai utilisé MongoMapper pendant un certain temps mais j’ai décidé de migrer vers MongoId. La raison en est les problèmes cachés et l’arrogance envers les utilisateurs. J’ai dû passer à travers des cerceaux pour faire fonctionner MongoMapper avec Cucumber (réussi à la fin) et mettre quelques patchs même le projet était simple, mais ce n’est pas la question. Lorsque j’ai essayé de soumettre un correctif de bogue (en raison d’une incompatibilité avec ActiveRecord), ils semblaient en colère parce que j’ai trouvé un problème et que j’étais repoussé. Pendant que je testais, j’ai également rencontré un problème majeur lié à l’implémentation de leurs requêtes, tandis que leurs tests étaient ajustés de manière à ce que les tests réussissent. Après mon expérience précédente, je n’ai pas osé le soumettre.

    Ils ont un nombre de requêtes pull et de bogues / fonctionnalités nettement inférieur à celui de MongoId, c’est-à-dire que la participation de la communauté est beaucoup plus faible. Même expérience que la mienne?

    Je ne sais pas lequel a plus de fonctionnalités en ce moment, mais je ne vois pas beaucoup d’avenir dans MongoMapper. Cela ne me dérange pas de régler les problèmes et d’append des fonctionnalités moi-même, mais je me soucie des situations où ils ne corrigeraient pas les bogues.

    Je les utilise depuis deux semaines. Mongomapper prend mieux en charge les associations relationnelles (non incorporées) et bénéficie d’un plus grand support par des tiers. Mongoid a un meilleur support pour les requêtes, une documentation bien meilleure (MM n’en a quasiment aucun, même si un site Web est censé fonctionner), le support de Rail 3 (et donc le support de Devise) et une communauté légèrement plus active sur Google Groups.

    J’ai fini par aller avec Mongoid.

    Différences

    MongoMapper

    • Déclaré avoir un meilleur support pour les associations relationnelles.
    • Déclaré être plus extensible en raison de son architecture de plugin.
    • Utilise un DSL pour interroger.
    • Les associations plusieurs-à-plusieurs ne sont mises à jour que unilatéralement dans MongoMapper.
    • Prise en charge moins robuste pour les documents incorporés. Met à jour le modèle entier même si seuls quelques atsortingbuts sont modifiés.

    Mongoïde

    • Suggéré d’être plus rapide que MongoMapper par des preuves anecdotiques.
    • Support plus robuste pour les documents incorporés, en utilisant les opérations atomiques MongoDB ($ set, $ push, $ pull, etc.) pour mettre à jour les documents nesteds sur place.
    • Prend en charge les associations bidirectionnelles plusieurs-à-plusieurs.
    • Utilise une syntaxe de type chaîne ARel pour l’interrogation.

    Similitudes

    • MongoMapper et Mongoid ont tous deux des sites Web avec une bonne documentation. MongoMapper a longtemps prétendu avoir une mauvaise documentation, mais son nouveau site Web semble combler le fossé.
    • Les deux peuvent être configurés via un fichier YAML, et les deux ont un générateur de rails pour ce fichier.
    • Les deux sont entièrement compatibles Rails 3.

    Configuration

    MongoMapper

    defaults: &defaults host: 127.0.0.1 port: 27017 development: database: database_name 

    Mongoïde

     development: sessions: default: database: database_name hosts: - 127.0.0.1:27017 

    Bibliothèques tierces

    Les deux parties ont affirmé avoir un meilleur soutien de la part de tiers. Github révèle ce qui suit:

    • La recherche de “Mongoid” donne 12671 résultats.
    • La recherche de “MongoMapper” donne 4708 résultats.

    Notamment, Devise ne supporte pas MongoMapper.

    Commit Activity

    Au cours de la dernière année, il semble que Mongoid ait été plus régulièrement mis à jour et mis à jour que MongoMapper.

    MongoMapper

    MongoMapper

    Mongoïde

    Mongoïde

    Une différence que j’ai trouvée est que update_atsortingbute dans MongoMapper semble écrire tout le document, quels que soient les atsortingbuts réellement modifiés. Dans Mongoid, seuls les atsortingbuts modifiés sont écrits. Cela peut être un problème de performance important pour les gros enregistrements. Cela est particulièrement vrai pour les documents incorporés (ici les labels ), par exemple

     profile = Profile.find(params[:id]) label = profile.labels.find_or_create_by(idx: params[:idx]) # MongoMapper doesn't have find_or_create_by for embedded docs # -- you'll have to write custom code profile.save 

    Lors de la save , MongoMapper enregistre l’intégralité de l’enregistrement de profile , mais MongoId utilisera l’opérateur $set avec la logique de positionnement pour mettre à jour uniquement l’étiquette qui a été modifiée.

    Un autre problème est la sélection des champs à retourner. Les deux prennent en charge un only critère, mais Mongoid prend également en charge un critère without critère, qui est nativement pris en charge par Mongo.

    Il me semble que Mongoid est simplement plus “arrondi” et complet dans son API, ce qui explique probablement que c’est une base de code plus grande. Il semble également mieux documenté.

    Avez-vous installé mongo_ext? Je pense que la performance est plus liée au pilote que le mappeur lui-même. En regardant le journal mongo, je peux voir sans l’extension que le transer semble avoir quelques retards.

    Faites également ce qu’ils recommandent sur le site monogdb, sélectionnez uniquement les champs dont vous avez besoin.

    A fait quelques tests avec MongoMapper la semaine dernière, il était stable mais je trouvais l’interface de requête un peu limitée (une partie de la logique AR était bizarre), passée à Mongoid et on se sent beaucoup mieux à utiliser – et plus intuitive si on est habitué à AR.

    Pas encore de conclusions rapides – mais le changement était sans douleur – ça marche aussi avec Rails 3.

    Si vous utilisez Rails3, je recommande Mongoid – il utilise également “include” au lieu de l’inheritance “< " pour persister les classes - l'utilisation de "include" est le meilleur paradigme de Ruby pour ajouter de la persistance. Mongoid fonctionne bien pour moi avec Devise.

    Pour améliorer les performances, essayez d’utiliser sélectivement l’access de niveau inférieur, par exemple le cyclomoteur.

    Je les ai utilisées toutes les deux et elles sont sur le point d’être égales en fonctionnalités, mais regardez ses statistiques de code Mongoid vs MongoMapper

    Il semblerait que MongoMapper ait une qualité de code bien meilleure (si elle fait la même chose avec moins).

    Vous pouvez calculer cette statistique par vous-même, voici l’parsingur https://github.com/alexeypetrushin/code_stats

    Je pense que Mongoid est beaucoup mieux en configuration et en cartographie.

    Je m’attendrais à ce que la performance soit la même, la dernière fois que j’ai vérifié, MongoMapper manquait de support Rails 3 – donc je regarde Mongoid pour le moment.

    sudo gem install mongo_ext est la clé pour obtenir des performances.

    MongoDB élimine le CouchDB en termes de vitesse brute – bien que CDB ait ses propres avantages.

    Indice de référence: http://www.snailinaturtleneck.com/blog/?p=74

    Devise ne supportait pas MongoMapper, et moi aussi, je préfère évoluer dans le sens Rails3. Donc je suis passé au mongoid.

    Mongoid a un support complet avec Rails3 et possède une fonctionnalité de carte d’identité.

    Plus de document est à http://mongoid.org

    Voir la performance ici http://mongoid.org/performance.html

    J’espère que les points ci-dessous ajoutent des valeurs aux réponses ci-dessus.

    1.Mongoid est complètement compatible avec Rails 3 et utilise ActiveModel partout (validations, sérialisation, etc.), où MongoMapper est toujours concentré sur Rails 2 et utilise la gemme valide pour ses validations.

    2.Mongoid soutient officiellement et fonctionne sur Ruby 1.8.7, 1.9.1 et 1.9.2 head.

    3.Mongoid prend plus solidement en charge les documents incorporés, effectuant les opérations atomiques MongoDB sur n’importe quelle zone de la hiérarchie en interne. ($ set, $ push, $ pull, etc.). Avec MM, vous devez lui dire explicitement de faire ces opérations.

    4.MongoMapper a un meilleur support de l’association relationnelle et fonctionne comme ceci par défaut.

    5.MongoMapper est plus extensible, avec une architecture de plugin qui permet aux utilisateurs de l’étendre facilement avec leurs propres bibliothèques. Mongoid n’a pas cela.

    6.MM prend en charge les cartes d’identité, pas Mongoid.

    7.MM a une plus grande communauté et probablement plus de support de bibliothèque tiers. Je suis devenu fou sur la documentation et rdoc.

    8.Mongoid prend en charge les clusters de réplication Master / Slave. (Écrit sur master, round robin lit aux esclaves) MM ne le fait pas.

    9.Mongoid a une API de critères de style ARel extrêmement riche, MM utilise des trouveurs de style AR2.