当前位置:  开发笔记 > 后端 > 正文

Mongoid或MongoMapper?

如何解决《Mongoid或MongoMapper?》经验,为你挑选了5个好方法。

我已经尝试了MongoMapper,它功能齐全(提供几乎所有AR功能),但我对使用大型数据集时的性能不是很满意.有没有人比较Mongoid?任何性能提升?



1> Aynat..:

我已经使用了MongoMapper一段时间但决定迁移到MongoId.原因是隐藏的问题加上对用户的傲慢.我不得不跳过篮球让MongoMapper与Cucumber一起工作(最终成功),并且即使项目很简单也要提供几个补丁,但这不是重点.当我尝试提交错误修复程序时(由于与ActiveRecord不兼容),他们似乎很生气,我发现了一个问题而且我被推了出来.在我测试时,我也遇到了他们的查询实现的一个主要错误,而他们的测试是以测试通过的方式调整的.在我以前的经历之后,不敢提交它.

与MongoId相比,他们的拉取请求和错误/功能提交数量明显较少,即社区参与度要低得多.和我一样的经历?

我不知道哪一个现在有更多的功能,但我在MongoMapper中看不到太多的未来.我不介意自己修复问题和添加功能,但我确实介意他们不修复错误的情况.


当获得first()而不进行排序时,它将作为last()而不是(反之亦然).但是单元测试是以指定顺序的方式编写的,所以它通过了.可能现在已经修好了,但我不再使用MongoMapper了.但我怀疑它,我看到它是如何实现的,这是一个糟糕的设计.

2> Nader..:

过去几周我一直在使用这两种方法.Mongomapper对关系关联(非嵌入式)有更好的支持,并且有更多的第三方支持.Mongoid有更好的查询支持,更好的文档(MM几乎没有,虽然网站可能正在开发中),Rail 3支持(以及Devise支持)和Google Groups上稍微活跃的社区.

我最终选择了Mongoid.


自从我最初写这个答案以来,Mongoid已经获得了很多第三方支持,社区的差异更大.在我看来,今天Mongoid更加明确.性能应该与它们都通过Ruby驱动程序相同.虽然你需要小心OM不要构建可怕的文件.

3> user2398029..:

差异

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

MongoMapper

Mongoid

Mongoid



4> Wolfram Arno..:

我发现的一个区别是update_attributeMongoMapper似乎写了整个文档,而不管实际改变了什么属性.在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中更加"圆润"和完整,这可能解释了它是一个更大的代码库.它似乎记录得更好.



5> Piotr Zolnie..:

你安装了mongo_ext吗?我认为性能与驱动程序的关系比映射器本身更多.在查看mongo日志时,我可以看到没有扩展名,转换器似乎有一些滞后.

同样按照他们在monogdb站点上的建议进行操作,只选择您需要的字段.

推荐阅读
黄晓敏3023
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有