2011-12-23 11 views
0

私はRailsとMongoidに対する相対的な初心者ですので、この質問に対する答えが明らかであるならば謝ります。 :)属性に基づいてモンゴイド文書を素早くフィルタリングする最良の方法は?

私は、ユーザーがムービーの属性に基づいてムービーを見つけることを可能にするRails 3アプリケーションを構築しています。私は、ユーザがMovieモデル(例えば、genrestudioなど)の属性に基づいてソートすることを可能にするindexアクションを持つMoviesControllerを持っています。

私は以下の解決策を思いつきましたが、私のdbが成長するにつれて既に減速を開始しているため、これは持続可能ではありません。

# 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> 
... 

私は物事をスピードアップするために行動し、フラグメントキャッシュを調査してきましたが、私はこれを行うには良い方法があると思うしなければなりません。

ご協力いただきありがとうございます。

答えて

1

genereとstudioでインデックスを作成します。モンゴシェルで

db.movies.ensureIndex({genre: 1}) 
db.movies.ensureIndex({studio: 1}) 

あなたはこの内部mongoidをしたい場合はそのhereにいくつかの情報があります。

基本的には、クラス内:

class Movie 
    index :genre 
    index :studio 
end 
0

1行の回答:コレクションにインデックスを追加すると、処理が速くなる可能性があります。

長い応答:DBが遅いと感じるため、アプリケーションにキャッシュを追加することを考えています。リレーショナルエンジンを使用していれば、そのようなものは問題ありません。物をキャッシュする方法を気にせずにアプリを開発する必要があります。

伝統的なリレーショナルエンジンを使用できないアプリケーションはありますか?存在する場合は、インデックスを使用し、それを修正します。もしそうでなければ、なぜモンゴーに行きますか?

+0

おかげフェデリコ、私は物事をスピードアップかどうかを確認するために私のインデックス戦略を見てみましょう。もともと私はMongoDBを選んだので、マイグレーションについて心配する必要はなく、また私のアプリでTVショーをモデリングしているので、「エピソード」オブジェクトを私の「ショー」ドキュメントに埋め込む方が効率的だとわかった。 –

関連する問題