【问题标题】:Poor performance finding ids in mongodb using mongoid and rails 3使用 mongoid 和 rails 3 在 mongodb 中查找 id 的性能不佳
【发布时间】:2013-03-28 12:15:34
【问题描述】:

我在 mongodb 中使用 mongoid 驱动器执行 Model.find(array_of_ids) 时性能很差,我不明白为什么。

相关代码:

ids = get_ids() #Get an array of 137 _ids for Topic model.
Topic.find(ids) #Find all data, but take 4 seconds to do it.

_id 字段是自动索引的,所以不需要任何手动配置。

那么,为什么这么慢?

请询问您是否需要更多解释,并为我糟糕的英语感到抱歉。

【问题讨论】:

  • 您要查找的文档有多大?如果它们很大,那是你的问题。如果您不需要所有字段,则有您的解决方案。
  • 谢谢@Leopd!现在我使用 .without(:large_field) 并在 50 毫秒内找到所有主题。

标签: ruby-on-rails-3 mongodb mongoid mongoid3


【解决方案1】:

看来你已经找到解决办法了。

我只是想补充一下。

如果 id 可以达到 137,我认为你应该将关系存储在 Topic 集合中 反而。情况恰恰相反。查询将是

Topic.where(:id => self.topic_id)

self 指的是这个模型的记录。

其实是has_many和belongs_to的关系。

Mongodb 存储数组的能力,并不意味着对于与其他模型关联的那么多 (137) 记录,您可以以这种方式存储。关系方法更好。 如果数据类型与其他模型/集合无关,只需将某些内容放入数组中。 例如,主题标签可能是“时尚、青少年、幼稚、俗气等,而您没有预定义标签,而是由您的用户定义 .这是在 mongodb 中使用数组功能的好机会。

对于数组包含主题列表的情况,其中主题是在主题集合中定义的数据,应该使用关系模型。

只是一些建议,请不要投票给我。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-10
    • 1970-01-01
    相关资源
    最近更新 更多