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 grands ensembles de données. 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 des problèmes cachés plus l'arrogance envers les utilisateurs. J'ai dû franchir des étapes pour que MongoMapper fonctionne avec Cucumber (réussi à la fin) et mettre quelques correctifs même si le projet était simple, mais ce n'est pas le but. Lorsque j'ai essayé de soumettre un correctif de bogue (en raison d'une incompatibilité avec ActiveRecord), ils se sont apparemment sentis énervés que j'ai trouvé un problème et que je sois tombé. Lors de mes tests, j'ai également rencontré un bug majeur lors de l'implémentation de leur requête, alors que leurs tests étaient réglés de manière à ce que les tests réussissent. Après mon expérience précédente, n'a pas osé le soumettre.
Ils ont un nombre de demandes d'extraction et de soumissions de bogues/fonctionnalités bien inférieur à MongoId, ce qui signifie que la participation de la communauté est beaucoup plus faible. Même expérience que la mienne?
Je ne sais pas laquelle a plus de fonctionnalités pour le moment, mais je ne vois pas beaucoup d’avenir dans MongoMapper. Cela ne me dérange pas de résoudre les problèmes et d’ajouter des fonctionnalités moi-même, mais cela ne me dérange pas dans les cas où ils ne corrigeraient pas les bogues.
j'utilise les deux depuis deux semaines. Mongomapper prend mieux en charge les associations relationnelles (non intégrées) et dispose d’un support plus important pour les tiers. Mongoid supporte mieux les requêtes, la documentation est bien meilleure (MM n’en a pratiquement pas, bien qu’un site Web soit censé être en cours de réalisation), le support Rail 3 (et donc le support Devise) et une communauté légèrement plus active sur Google Groupes.
J'ai fini par aller avec Mongoid.
Différences
MongoMapper
_ {Mongoid} _
Similitudes
Configuration
MongoMapper
defaults: &defaults
Host: 127.0.0.1
port: 27017
development:
database: database_name
_ {Mongoid} _
development:
sessions:
default:
database: database_name
hosts:
- 127.0.0.1:27017
Bibliothèques tierces
Les deux parties ont prétendu avoir un meilleur soutien en tant que tiers Github révèle ce qui suit:
Notamment, Devise ne supporte pas MongoMapper.
Activité de validation
Au cours de la dernière année, il semble que Mongoid ait été mis à jour et mis à jour plus régulièrement que MongoMapper.
MongoMapper
Mongoïde
Une différence que j'ai trouvée est que update_attribute
dans MongoMapper semble écrire tout le document, quels que soient les attributs réellement modifiés. Dans Mongoid, seuls les attributs modifiés sont écrits. Cela peut constituer un problème de performances important pour les enregistrements volumineux. Cela est particulièrement vrai pour les documents incorporés (ici 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
Sur save
, MongoMapper enregistre l'intégralité de l'enregistrement profile
, mais MongoId utilise l'opérateur $set
avec la logique de position pour mettre à jour uniquement l'étiquette modifiée.
Un autre problème consiste à sélectionner les champs à retourner. Les deux prennent en charge un critère only
, mais Mongoid prend également en charge un critère without
, qui est pris en charge de manière native 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 davantage liée au pilote qu’au mappeur lui-même. En regardant le journal du mongo, je peux voir sans extension que le transeur semble avoir quelques retards.
Faites également ce qu'ils recommandent sur le site monogdb, sélectionnez uniquement les champs dont vous avez besoin.
J'ai fait quelques tests avec MongoMapper la semaine dernière. Ils étaient stables mais je trouvais l'interface de requête un peu limitée (une partie de la logique de l'AR était bizarre), je suis passée à Mongoid aujourd'hui et je me sens beaucoup mieux d'utiliser - et plus intuitive si vous êtes habitué à AR.
Aucune conclusion sur la vitesse pour le moment - mais le basculement s'est fait sans douleur - cela fonctionne aussi avec Rails 3.
Si vous utilisez Rails3, je recommanderais Mongoid - il utilise également "include" au lieu de l'héritage "<" pour les classes persistantes - utiliser "include" est le meilleur paradigme de Ruby pour ajouter de la persistance . Mongoid fonctionne très bien pour moi avec Devise.
Pour améliorer les performances, essayez d’utiliser sélectivement l’accès de niveau inférieur, par exemple. Vélomoteur - J'ai vu cela être jusqu'à 10 fois plus rapide
Je les ai utilisés tous les deux et ils sont sur le point de fonctionner de manière égale, mais regardez ses statistiques de code
Il semble que MongoMapper ait une bien meilleure qualité de code (s’il fait la même chose avec moins).
Vous pouvez calculer ces statistiques par vous-même, voici l'analyseur https://github.com/alexeypetrushin/code_stats
Je pense que Mongoid est bien meilleur en configuration et en mapping.
Devise ne supportait pas MongoMapper, et moi aussi je préfère passer à la manière Rails3 Alors je suis passé à la mongoïde.
Mongoid supporte pleinement Rails3 et possède une fonction de carte d'identité.
Plus de document est à http://mongoid.org
Voir la performance ici http://mongoid.org/performance.html
Sudo gem install mongo_ext
est la clé pour obtenir des performances.
MongoDB épate 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
J'espère que les points ci-dessous ajoutent des valeurs aux réponses ci-dessus.
1.Mongoid est totalement compatible avec Rails 3 et utilise ActiveModel all Partout (validations, sérialisation, etc.), où MongoMapper est toujours concentré sur Rails 2 et utilise la gem pouvant être validée pour ses validations.
2.Mongoid prend officiellement en charge et fonctionne sur les têtes Ruby 1.8.7, 1.9.1 et 1.9.2.
3.Mongoid prend en charge les documents incorporés de manière plus robuste, en effectuant les opérations atomiques MongoDB sur toute zone de la hiérarchie en interne. ($ set, $ push, $ pull, etc.). Avec MM, vous devez lui indiquer explicitement d’effectuer ces opérations.
4.MongoMapper a un meilleur support d'association relationnelle et fonctionne comme ceci par défaut.
5.MongoMapper est plus extensible, avec une architecture de plug-in qui permet aux gens 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 communauté plus large et probablement plus de soutien de bibliothèques tierces. Je suis devenu fou de documentation et de rdoc.
8.Mongoid prend en charge les clusters de réplication maître/esclave. (Écrit sur maître, tour à tour lit sur esclaves) MM ne le fait pas.
9.Mongoid possède une API de critères de style ARel extrêmement riche, MM utilise les détecteurs de style AR2.
Je m'attendais à des performances identiques, la dernière fois que j'ai vérifié que MongoMapper ne disposait pas du support Rails 3, je regarde donc Mongoid pour le moment.