rails ruby mongodb mongoid mongomapper odm

ruby - rails - Mongoid o MongoMapper?



mongoid php (14)

He probado MongoMapper y es una característica completa (que ofrece casi todas las funcionalidades de AR) pero no estaba muy contento con el rendimiento al usar grandes conjuntos de datos. Alguien ha comparado con Mongoid? Cualquier ganancia de rendimiento?


¿Instalaste mongo_ext? Creo que el rendimiento está más relacionado con el controlador que el asignador en sí. Cuando miro el registro de mongo, puedo ver sin la extensión, que el transer parece tener algunos rezagos.

También haga lo que recomiendan en el sitio monogdb, seleccione solo los campos que necesita.


Creo que Mongoid es mucho mejor en configuración y mapeo.


Devise no era compatible con MongoMapper, y yo también prefiero moverme en el camino de Rails3. Entonces cambié a mongoid.


Esperaría que el rendimiento sea el mismo, la última vez que verifiqué que MongoMapper carecía de soporte para Rails 3, estoy mirando a Mongoid por ahora.


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 está enfocado en Rails 2 y usa la gema validable para sus validaciones.

2.Mongoid oficialmente admite y funciona en Ruby 1.8.7, 1.9.1 y 1.9.2 head.

3.Mongoid admite documentos incrustados de forma más robusta, realizando las operaciones atómicas de MongoDB en cualquier área de la jerarquía internamente. ($ set, $ push, $ pull, etc.). Con MM necesita decirle explícitamente que haga estas operaciones.

4.MongoMapper tiene mejor soporte de asociación relacional y funciona así por defecto.

5.MongoMapper es más extensible, con una arquitectura de complemento que hace que sea bastante fácil para las personas ampliarlo 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 de biblioteca de terceros. Me volví loco en 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 usa buscadores de estilo AR2.


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 mejor soporte para las consultas, mucha mejor documentación (MM tiene casi ninguno, aunque supuestamente se está trabajando en un sitio web), soporte de Rail 3 (y por lo tanto soporte de Devise) y una comunidad un poco más activa en Google Groups.

Terminé yendo con Mongoid.


He usado MongoMapper por un tiempo, pero decidí migrar a MongoId. El motivo son los problemas ocultos y la arrogancia hacia los usuarios. Tuve que saltar por los aros para hacer que MongoMapper funcionara con Cucumber (tuvo éxito al final) y poner un par de parches incluso el proyecto era simple, pero no es el punto. Cuando traté de enviar una corrección de error (debido a la incompatibilidad con ActiveRecord), aparentemente se enojaron porque encontré un problema y me presionaron. Mientras estaba probando, también encontré un error importante con su implementación de consulta, mientras que sus pruebas se ajustaron de una manera que las pruebas pasan. Después de mi experiencia previa, no me atreví a enviarlo.

Tienen un número significativamente menor de solicitudes de extracción y presentación de errores / características que MongoId, es decir, la participación de la comunidad es mucho menor. ¿La misma experiencia que la mía?

No sé cuál tiene más características ahora, pero no veo mucho futuro en MongoMapper. No me importa solucionar problemas y agregar funcionalidades, pero sí me importa situaciones en las que no solucionen errores.


Hice algunas pruebas con MongoMapper la semana pasada, era estable pero encontré que la interfaz de consulta era un tanto limitada (también algo de la lógica AR era peculiar), cambié a Mongoid hoy y se siente mucho mejor de usar, y más intuitivo si se usa a AR.

Aún no hay conclusiones de velocidad, pero el cambio no tuvo problemas, también funciona con Rails 3.


Los utilicé a 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 por usted mismo, aquí está el analizador https://github.com/alexeypetrushin/code_stats



Si está utilizando Rails3, recomendaría Mongoid. También usa "incluir" en lugar de la herencia "<" para conservar 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, el ciclomotor: he visto que es hasta 10 veces más rápido


Una diferencia que encontré es que update_attribute en MongoMapper parece escribir todo el documento, independientemente de qué atributos realmente hayan cambiado. En Mongoid solo escribe los atributos modificados. Esto puede ser un problema de rendimiento significativo para grandes registros. Esto es particularmente cierto para los documentos integrados (aquí las labels ), por ejemplo

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

Al save , MongoMapper guardará todo el registro de profile , pero MongoId usará el operador $set con lógica posicional para actualizar solo la etiqueta que cambió.

Otro problema es seleccionar qué campos devolver. Ambos admiten un only criterio, pero Mongoid también admite un criterio without , el cual es respaldado nativamente por Mongo.

Me parece que Mongoid es más "redondeado" y completo en su API, lo que probablemente explica que se trata de una base de código más grande. También parece documentado mejor.


sudo gem install mongo_ext es clave para obtener rendimiento.

MongoDB derrota 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


Diferencias

MongoMapper

  • Reclamado para tener un mejor soporte para las asociaciones relacionales.
  • Se dice que es más extensible debido a su arquitectura de complemento.
  • Utiliza una DSL para consultar.
  • Las asociaciones de muchos a muchos se actualizan solo en un solo lado en MongoMapper.
  • Soporte menos robusto para documentos integrados. Actualiza el modelo completo incluso si solo se modifican algunos atributos.

Mongoide

  • Sugerido para ser más rápido que MongoMapper por evidencia anecdótica.
  • Soporte más robusto para documentos integrados, usando operaciones atómicas de MongoDB ($ set, $ push, $ pull, etc.) para actualizar los documentos anidados en el lugar.
  • Admite asociaciones bidireccionales de muchos a muchos.
  • Utiliza una sintaxis similar a ARel para consultas.

Similitudes

  • Tanto MongoMapper como Mongoid tienen sitios web con buena documentación. Hace tiempo que se afirma que MongoMapper tiene mala documentación, pero su nuevo sitio web parece cerrar la brecha.
  • Ambos se pueden configurar a través de un archivo YAML, y ambos tienen un generador de rieles para ese archivo.
  • Ambos son completamente compatibles con Rails 3.

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:

  • La búsqueda de "Mongoid" produce 12671 resultados.
  • La búsqueda de "MongoMapper" arroja 4708 resultados.

Notablemente, Devise no es compatible con MongoMapper.

Actividad de compromiso

Durante el último año, parece que Mongoid se ha mantenido y actualizado con más frecuencia que MongoMapper.

MongoMapper

Mongoide