Probé MongoMapper y tiene funciones completas (ofrece casi todas las funciones de AR), pero no estaba muy contento con el rendimiento al usar grandes conjuntos de datos. ¿Alguien se ha comparado con Mongoid? ¿Alguna mejora de rendimiento?
Respuestas:
He usado MongoMapper por un tiempo, pero decidí migrar a MongoId. La razón son los problemas ocultos más la arrogancia hacia los usuarios. Tuve que saltar a través de aros para hacer que MongoMapper funcionara con Cucumber (lo logré al final) y poner un par de parches, incluso el proyecto era simple, pero no es el punto. Cuando intenté enviar una corrección de errores (debido a la incompatibilidad con ActiveRecord), aparentemente se enojaron porque encontré un problema y me empujaron. Mientras estaba probando, también encontré un error importante con la implementación de su consulta, mientras que sus pruebas se ajustaron de manera que las pruebas pasen. Después de mi experiencia anterior, no me atreví a enviarlo.
Tienen un número significativamente menor de solicitudes de extracción y envíos de errores / características que MongoId, es decir, la participación de la comunidad es mucho menor. ¿Misma experiencia que la mía?
No sé cuál tiene más funciones en este momento, pero no veo mucho futuro en MongoMapper. No me importa solucionar problemas y agregar funcionalidad yo mismo, pero sí me importan las situaciones en las que no solucionarían errores.
He estado usando ambos durante las últimas dos semanas. Mongomapper tiene un mejor soporte para asociaciones relacionales (no integradas) y tiene un mayor soporte de terceros. Mongoid tiene un mejor soporte para consultas, mucha mejor documentación (MM tiene casi ninguna, aunque supuestamente se está trabajando en un sitio web), soporte para Rail 3 (y por lo tanto soporte para Devise) y una comunidad un poco más activa en Grupos de Google.
Terminé yendo con Mongoid.
Diferencias
MongoMapper
Mongoide
Similitudes
Configuración
MongoMapper
defaults: &defaults
host: 127.0.0.1
port: 27017
development:
database: database_name
Mongoide
development:
sessions:
default:
database: database_name
hosts:
- 127.0.0.1:27017
Bibliotecas de terceros
Ambas partes han afirmado tener un mejor soporte de terceros. Github revela lo siguiente:
En particular, Devise no es compatible con MongoMapper.
Comprometer actividad
Durante el último año, parece que Mongoid se ha mantenido y actualizado con más regularidad que MongoMapper.
MongoMapper
Mongoide
Una diferencia que encontré es que update_attribute
en MongoMapper parece escribir todo el documento, independientemente de los atributos que realmente cambiaron. En Mongoid, solo escribe los atributos modificados. Este puede ser un problema de rendimiento importante para registros grandes. Esto es particularmente cierto para documentos incrustados (aquí labels
), p. Ej.
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
Activado save
, MongoMapper guardará todo el profile
registro, pero MongoId usará el $set
operador con lógica posicional para actualizar solo la etiqueta que cambió.
Otro problema es seleccionar qué campos devolver. Ambos apoyan un only
criterio, pero Mongoid también admite un without
criterio, que es compatible de forma nativa con Mongo.
Me parece que Mongoid es más "redondeado" y completo en su API, lo que probablemente explica que es una base de código más grande. También parece mejor documentado.
¿Instalaste mongo_ext? Creo que el rendimiento está más relacionado con el controlador que con el propio mapeador. Al mirar el registro de mongo, puedo ver sin la extensión, que el transer parece tener algunos retrasos.
También haga lo que recomiendan en el sitio monogdb, seleccione solo los campos que necesita.
mongo_ext
ya no es necesario y se ha incorporado a la mongo
gema básica .
Hice algunas pruebas con MongoMapper la semana pasada, era estable pero encontré que la interfaz de consulta estaba un poco limitada (también parte de la lógica AR era peculiar), cambié a Mongoid hoy y se siente mucho mejor de usar, y más intuitivo si estás acostumbrado a AR.
Aún no hay conclusiones de velocidad, pero el cambio fue sencillo, también funciona con Rails 3.
Si está usando Rails3, recomendaría Mongoid - también usa "incluir" en lugar de herencia "<" para persistir las clases - usar "incluir" es el mejor paradigma en Ruby para agregar persistencia. Mongoid funciona bien para mí con Devise.
Para mejorar el rendimiento, intente utilizar selectivamente el acceso de nivel inferior, por ejemplo, ciclomotor; he visto que esto es hasta 10 veces más rápido
Usé ambos y están a punto de igualar en funcionalidad, pero mira sus estadísticas de código
Parece que MongoMapper tiene una calidad de código mucho mejor (si hace lo mismo con menos).
Puede calcular estas estadísticas usted mismo, aquí está el analizador https://github.com/alexeypetrushin/code_stats
Creo que Mongoid es mucho mejor en configuración y mapeo.
Esperaría que el rendimiento sea el mismo, la última vez que verifiqué que MongoMapper carecía de soporte para Rails 3, por lo que estoy considerando Mongoid por ahora.
sudo gem install mongo_ext
es clave para obtener rendimiento.
MongoDB supera a CouchDB en términos de velocidad bruta, aunque CDB tiene su propio conjunto de ventajas.
Punto de referencia: http://www.snailinaturtleneck.com/blog/?p=74
mongo_ext
ya no es necesario y se ha incorporado a la mongo
gema básica .
Devise no era compatible con MongoMapper y yo también prefiero moverme al estilo Rails3. Así que cambié a mongoide.
Mongoid tiene un soporte completo con Rails3 y tiene una función de mapa de identidad.
Más documento está en http://mongoid.org
Vea el rendimiento aquí http://mongoid.org/performance.html
Espero que los puntos a continuación agreguen valores a las respuestas anteriores.
1.Mongoid es completamente compatible con Rails 3 y usa ActiveModel en todas partes (validaciones, serialización, etc.), donde MongoMapper todavía se enfoca en Rails 2 y usa la gema validable para sus validaciones.
2. Mongoid admite y funciona oficialmente en Ruby 1.8.7, 1.9.1 y 1.9.2 head.
3.Mongoid admite documentos incrustados de manera más sólida, realizando las operaciones atómicas de MongoDB en cualquier área de la jerarquía internamente. ($ conjunto, $ empujar, $ tirar, etc.). Con MM, debe indicarle explícitamente que realice estas operaciones.
4.MongoMapper tiene un mejor soporte de asociación relacional y funciona así por defecto.
MongoMapper es más extensible, con una arquitectura de complementos que hace que sea bastante fácil para las personas extenderlo con sus propias bibliotecas. Mongoid no tiene esto.
6.MM admite mapas de identidad, Mongoid no.
7.MM tiene una comunidad más grande y probablemente más soporte para bibliotecas de terceros. Me volví loco con la documentación y rdoc.
8.Mongoid admite clústeres de replicación maestro / esclavo. (Escribe al maestro, round robin lee a los esclavos) MM no.
9.Mongoid tiene una API de criterios de estilo ARel extremadamente rica, MM utiliza buscadores de estilo AR2.