Rails,mongoid,heroku 性能

Posted

技术标签:

【中文标题】Rails,mongoid,heroku 性能【英文标题】:Rails, mongoid, heroku performance 【发布时间】:2014-03-13 21:18:07 【问题描述】:

我在 heroku 上使用 rails、mongoid 和 mongohq 来开发我的网站。

但是,我遇到了非常严重的性能问题。

我在每个用户页面上查询,加载所有数据的时间超过2秒 数据不多,只有30首音乐,每首音乐大概有1到3种不同的风格。

有人知道如何提高性能吗?

我已经尝试了很多方法,但仍然无法正常工作,而且 mongo 显示每个单独的查询都非常快。

代码如下:

     @musics = []           #get all user downloaded musics
     @uploaders = []        #record uploader of each music
     @styles = []           #record the styles of each music
     @user.mydownloads.each do |download_music|
        music = Music.find(download_music)                   #find the music by id
        @musics.insert(0, music)        
        uploader = music.user                                #find the uploader
        @uploaders.insert(0,uploader)
        @styles.insert(0,shortstyle(music.music_styles,10))  
        #shortstyle is a helper function in application helper to make the stylelooks nicer
     end

如果需要所有数据,我该如何提高性能?

非常感谢你们!

【问题讨论】:

【参考方案1】:

你的索引是什么?

另外,@user.mydownloads 中有多少项目?

这将导致 N+1 查询,如果 @user.mydownloads 很大(大于 1 或 2 个项目,请参阅 this SO thread),这可能会非常糟糕

【讨论】:

感谢您的帮助!我对每个模型的 id 都有索引。用户下载的项目大约有30个。 我尝试过对音乐样式进行预加载,但 Rails 会说这是多对多引用,因此不允许预加载.....

以上是关于Rails,mongoid,heroku 性能的主要内容,如果未能解决你的问题,请参考以下文章

Heroku 中 mongoid 的奇怪异常

Mongoid 3 + Heroku (MongoHQ) 导致 Moped::Errors::OperationFailure

heroku mongohq 和 mongoid Mongo::ConnectionFailure

rails 4 gem 'mongoid_slug' 无法按 id 搜索

Ruby on Rails 是 mongodb - mongoid

嵌套属性中的 Rails/Mongoid 错误消息