2013-04-05 86 views
1

在mongodb中使用mongoid驱动程序做Model.find(array_of_ids)性能差,我不明白为什么。使用mongoid和rails在mongodb中发现性能差的性能不佳3

相关代码:

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字段的自动索引,所以它不需要任何手动配置。

那么,它为什么这么慢?

请问你是否需要更多的解释,并为我可怜的英语感到抱歉。

+2

多大是你找到的文件吗?如果它们很大,那就是你的问题。如果你不需要所有的领域,那么你的解决方案。 – Leopd 2013-04-06 05:08:38

+0

Thanks @Leopd!N即时通讯使用.without(:large_field),它可以在50ms内找到所有主题。 – 2013-04-08 17:54:17

+0

@LeonardoBaptista作为Leopd说什么是你正在找到的文件,也是像32位或64位的操作系统配置将是很大的帮助 – Viren 2013-05-10 06:45:37

回答

0

似乎你已经得到了解决方案。

我只是想补充。

如果ID可以达到137,我认为你应该将关系存储在Topic集合 中。这是相反的方式。查询将是

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

其中self是指该模型的记录。

它实际上是has_many和belongs_to的关系。

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

对于您的情况下数组包含主题列出,其中主题包括主题集合中定义的数据,应该已经用于关系模型。

只是一些建议,请不要投我失望。