2013-04-05 30 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中使用數組功能的好機會。

對於您的情況下數組包含主題列出,其中主題包括主題集合中定義的數據,應該已經用於關係模型。

只是一些建議,請不要投我失望。