Pregunta

He tratado MongoMapper y es función completa (que ofrece casi todas las funciones de AR), pero yo no estaba muy contento con el rendimiento cuando se utilizan grandes conjuntos de datos. Alguien ha comparado con Mongoid? Cualquier beneficio de rendimiento?

¿Fue útil?

Solución

He utilizado MongoMapper por un tiempo, pero decidido migrar a MongoId. La razón es más problemas ocultos arrogancia hacia los usuarios. Tenía que pasar por el aro para hacer el trabajo MongoMapper con pepino (logrado al final) y para poner un par de parches, incluso el proyecto era simple, pero no es el punto. Cuando traté de presentar una corrección de errores (debido a la incompatibilidad con ActiveRecord), que aparentemente enfurecí que he encontrado un problema y fui empujado alrededor. Mientras yo estaba probando, también me encontré con un error importante con su implementación de consulta, mientras que sus pruebas se sintoniza de manera que respondan a las pruebas. Después de mi experiencia anterior, no se atrevió a enviarlo.

Tienen un número significativamente menor de solicitudes de extracción y de errores / presentaciones de características que MongoId, es decir, la participación comunitaria es mucho menor. Misma experiencia como la mía?

No sé lo que uno tiene más características en este momento, pero no veo mucho futuro en el MongoMapper. No me importa solucionar problemas y añadir funcionalidad a mí mismo, pero lo hago mente situaciones cuando no corregir los errores.

Otros consejos

He estado usando tanto de las últimas dos semanas. MongoMapper tiene un mejor apoyo a las asociaciones relacionales (no integrado) y tiene una mayor ayuda de tercera persona. Mongoid tiene mejor compatibilidad con consultas, mucho mejor documentación (MM cuenta con cerca de ninguno, a través de un sitio web es supuestamente en las obras), carril 3 de apoyo (y por lo tanto Idear soporte) y una comunidad un poco más activa en Grupos de Google.

Terminé yendo con Mongoid.

Diferencias

MongoMapper

  • afirmó tener un mejor apoyo a las asociaciones relacionales.
  • Afirmó ser más extensible debido a su arquitectura de plugin.
  • Utiliza una conexión DSL para la consulta.
  • muchos-a-muchos asociaciones sólo se actualizan unilateral en MongoMapper.
  • Menos de soporte robusto para la inclusión de documentos. Actualiza todo el modelo, incluso si se modifican sólo unos pocos atributos.

Mongoid

  • sugerido a ser más rápido que MongoMapper por la evidencia anecdótica.
  • Un apoyo más sólido para la inclusión de documentos, utilizando operaciones atómicas MongoDB (set $, $ empujar, tirar $, etc.) para actualizar los documentos anidados en el lugar.
  • Soporta bidireccionales asociaciones muchos-a-muchos.
  • Utiliza una conexión en cadena de sintaxis Arel-como para la consulta.

Similitudes

  • Tanto MongoMapper y Mongoid tienen sitios web con una buena documentación. MongoMapper se reclaman para sí haber mala documentación, pero su nueva página web que parece cerrar la brecha.
  • Ambos pueden ser configurados a través de un archivo YAML, y ambos tienen un generador de rieles para ese archivo.
  • Rieles Ambos son totalmente compatibles 3.

Configuración

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

3rd Party Bibliotecas

Las dos partes han afirmado tener un mejor apoyo tercera parte. Github revela lo siguiente:

  • La búsqueda de "Mongoid" da 12671 resultados.
  • Busca rendimientos "MongoMapper" 4708 resultados.

En particular, idearán no soporta MongoMapper.

Commit Actividad

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

MongoMapper

MongoMapper

Mongoid

Mongoid

Una diferencia que encontré es que update_attribute en MongoMapper aparece a escribir todo el documento, independientemente de los atributos que realmente cambiado. En Mongoid que sólo escribe los atributos modificados. Esto puede ser un problema de rendimiento significativo para grandes registros. Esto es particularmente cierto para los documentos incrustados (aquí 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

En save, MongoMapper ahorrará todo el disco profile, pero MongoId utilizará el operador $set con la lógica posicional sólo actualizar la etiqueta que ha cambiado.

Otra cuestión es seleccionar qué campos para volver. Tanto apoyar un criterio only, pero Mongoid también soporta un criterio without, que está soportado nativamente por Mongo.

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

¿Desea instalar mongo_ext? Creo que el rendimiento está más relacionado con el conductor que el propio asignador. Al mirar el registro de mongo, puedo ver sin la extensión, que la transer parece tener algunos retardos.

También hacen lo que recomiendan en el sitio monogdb, seleccionar sólo los campos que necesite.

Hizo algunas pruebas con MongoMapper la semana pasada, era estable, pero me encontré con la interfaz de consulta un poco limitado (también parte de la lógica AR era peculiar), cambió a MongoId hoy y se siente mucho mejor utilizar - y más intuitivo si que se utilizan para AR.

No hay todavía conclusiones de velocidad - pero el cambio fue rápido sobre -. Funciona con Rails 3 también

Si está utilizando Rails3 Me gustaría recomendar Mongoid - que también utiliza "incluir" en lugar de la herencia "<" de persistir las clases - el uso de "incluir" es el mejor paradigma en Ruby para añadir persistencia. Mongoid me da buenos resultados con inventar.

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

He utilizado los dos y que están a punto es igual a la funcionalidad, pero mira que es de código estadísticas Mongoid vs MongoMapper

Parece que MongoMapper tiene mucho mejor calidad del código (si lo hace lo mismo con menos).

Se puede calcular esta Estadísticas por sí mismo, aquí está el https://github.com/alexeypetrushin/code_stats

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

Yo esperaría que el rendimiento sea el mismo la última vez, he comprobado MongoMapper carecía de los carriles de soporte 3 -. Por lo que estoy mirando Mongoid por ahora

sudo gem install mongo_ext es clave para conseguir el rendimiento.

MongoDB saca de quicio CouchDB en términos de velocidad pura - aunque CDB tiene su propio conjunto de ventajas.

Benchmark: http://www.snailinaturtleneck.com/blog/?p=74

Diseñar no apoyó MongoMapper, y yo también prefieren moverse en el camino Rails3. Por lo que me pasa a MongoId.

Mongoid está teniendo un soporte completo con Rails3 y tener función de mapa de identidad.

Más documento está en http://mongoid.org

Vea la actuación aquí http://mongoid.org/performance.html

Espero puntos por debajo de los valores se suman a las respuestas anteriores.

1.Mongoid es completamente compatible con Rails 3, y utiliza toda ActiveModel el lugar (validaciones, la serialización, etc), donde MongoMapper todavía se centra en los carriles 2 y utiliza la gema validable por sus validaciones.

2.Mongoid oficialmente apoya y trabaja sobre el Ruby 1.8.7, 1.9.1, 1.9.2 y la cabeza.

3.Mongoid admite documentos incrustados de forma más robusta, la realización de las operaciones atómicas MongoDB en cualquier área de la jerarquía interna. (Conjunto $, $ empujar, tirar $, etc.). Con MM que es necesario indicar explícitamente que para hacer estas operaciones.

4.MongoMapper tiene un mejor soporte asociación relacional y funciona de la siguiente forma predeterminada.

5.MongoMapper es más extensible, con una arquitectura plugin que hace que sea muy fácil que la gente se extienden con sus propias bibliotecas. Mongoid no tiene esto.

6.MM soporta mapas de identidad, Mongoid no lo hace.

7.MM tiene una comunidad más grande, y probablemente más apoyo tercera biblioteca de partido. Fui loca en la documentación y rdoc.

8.Mongoid admite clústeres de replicación maestro / esclavo. (Escribe de dominar, round robin lee a los esclavos) MM no lo hace.

9.Mongoid tiene una muy rica Arel criterios de estilo de la API, MM utilizar buscadores de estilo AR2.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top