我已经尝试了MongoMapper,它功能齐全(提供几乎所有AR功能),但我对使用大型数据集时的性能不是很满意.有没有人比较Mongoid?任何性能提升?
我已经使用了MongoMapper一段时间但决定迁移到MongoId.原因是隐藏的问题加上对用户的傲慢.我不得不跳过篮球让MongoMapper与Cucumber一起工作(最终成功),并且即使项目很简单也要提供几个补丁,但这不是重点.当我尝试提交错误修复程序时(由于与ActiveRecord不兼容),他们似乎很生气,我发现了一个问题而且我被推了出来.在我测试时,我也遇到了他们的查询实现的一个主要错误,而他们的测试是以测试通过的方式调整的.在我以前的经历之后,不敢提交它.
与MongoId相比,他们的拉取请求和错误/功能提交数量明显较少,即社区参与度要低得多.和我一样的经历?
我不知道哪一个现在有更多的功能,但我在MongoMapper中看不到太多的未来.我不介意自己修复问题和添加功能,但我确实介意他们不修复错误的情况.
过去几周我一直在使用这两种方法.Mongomapper对关系关联(非嵌入式)有更好的支持,并且有更多的第三方支持.Mongoid有更好的查询支持,更好的文档(MM几乎没有,虽然网站可能正在开发中),Rail 3支持(以及Devise支持)和Google Groups上稍微活跃的社区.
我最终选择了Mongoid.
差异
MongoMapper
声称可以更好地支持关系协会.
由于它的插件架构,声称更具可扩展性.
使用DSL进行查询.
在MongoMapper中,多对多关联仅在单方面更新.
对嵌入式文档的支持不太强大.即使只修改了少数属性,也会更新整个模型.
Mongoid
建议通过轶事证据比MongoMapper更快.
对嵌入式文档的更强大支持,使用MongoDB原子操作($ set,$ push,$ pull等)就地更新嵌套文档.
支持双向多对多关联.
使用可链接的ARel语法进行查询.
相似
无论MongoMapper和Mongoid有良好的文档的网站.MongoMapper长期以来声称文档不好,但他们的新网站似乎缩小了差距.
两者都可以通过YAML文件进行配置,并且都有一个用于该文件的rails生成器.
两者都完全兼容Rails 3.
组态
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
第三方图书馆
双方声称拥有更好的第三方支持.Github揭示了以下内容:
搜索"Mongoid"会产生12671个结果.
搜索"MongoMapper"会产生4708个结果.
值得注意的是,Devise不支持MongoMapper.
提交活动
在过去的一年中,看起来Mongoid比MongoMapper更经常地维护和更新.
MongoMapper
Mongoid
我发现的一个区别是update_attribute
MongoMapper似乎写了整个文档,而不管实际改变了什么属性.在Mongoid中,它只写入已更改的属性.对于大型记录,这可能是一个重要的性能问题.对于嵌入式文档(这里labels
)尤其如此,例如
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
在save
,MongoMapper将保存整个profile
记录,但MongoId将使用$set
具有位置逻辑的运算符来仅更新已更改的标签.
另一个问题是选择要返回的字段.两者都支持一个only
标准,但Mongoid也支持一个without
标准,Mongo本身支持该标准.
在我看来,Mongoid在其API中更加"圆润"和完整,这可能解释了它是一个更大的代码库.它似乎记录得更好.
你安装了mongo_ext吗?我认为性能与驱动程序的关系比映射器本身更多.在查看mongo日志时,我可以看到没有扩展名,转换器似乎有一些滞后.
同样按照他们在monogdb站点上的建议进行操作,只选择您需要的字段.