快速过滤基于属性的Mongoid文档的最佳方式?
问题描述:
我是一个Rails和Mongoid的相对新手,所以如果对这个问题的答案应该是显而易见的,请大家道歉。 :)快速过滤基于属性的Mongoid文档的最佳方式?
我建立一个Rails应用程序3,将允许用户找到基于对电影的属性电影。我有一个MoviesController
与index
的行动,允许用户基于Movie
模型的属性(如genre
,studio
等)进行排序。
我已经想出了以下解决方案,但这并不感到可持续的,因为它是已经开始为我的数据库已经成长放缓。
# controllers/movies_controller.rb
def index
if params[:genre]
@movies = Movie.where(:genre => params[:genre])
elsif params[:studio]
@movies = Movie.where(:studio => params[:studio])
else
@movies = Movie.all
end
end
# views/movies/index.html.erb
<li><%= link_to "Action", movies_path(:genre => "Action") %></li>
<li><%= link_to "Suspense", movies_path(:genre => "Suspense") %></li>
<li><%= link_to "Drama", movies_path(:genre => "Drama") %></li>
...
<li><%= link_to "Paramount", movies_path(:studio => "Paramount") %></li>
<li><%= link_to "Universal", movies_path(:studio => "Universal") %></li>
<li><%= link_to "Disney", movies_path(:studio => "Disney") %></li>
...
我已经探索行动和片段缓存来加快速度,但我想有一个更好的方式来做到这一点。
在此先感谢您的帮助!
答
在genere和studio上制作索引。
在蒙戈外壳:
db.movies.ensureIndex({genre: 1})
db.movies.ensureIndex({studio: 1})
如果你想要做这里面mongoid有对here一些信息。
基本上,内部类:
class Movie
index :genre
index :studio
end
答
一行响应:向您的集合添加索引可能会加快速度。
朗回应:你想添加缓存到应用程序,因为DB感觉慢的,你可能知道,如果你使用的是关系引擎,然后这些东西就可以了。你应该开发应用程序,而不是担心如何缓存的东西:)
有什么在你的应用程序阻止您使用传统的关系型引擎?如果有,请继续,使用索引,也许这将解决它。如果没有,为什么要去Mongo?
感谢费德里科,我会看看我的索引策略,看看是否能加快东西。我原来选择了MongoDB,所以我不必担心迁移问题,因为我也在我的应用中对电视节目进行建模,并且发现在我的“显示”文档中嵌入“Episode”对象效率更高。 – 2011-12-23 02:17:39