Лучший способ быстрой фильтрации документов Mongoid по атрибутам? - PullRequest
0 голосов
/ 23 декабря 2011

Я относительный новичок в Rails и 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>
...

Я исследовал действия и кеширование фрагментов для ускорения процесса, ноЯ должен думать, что есть лучший способ сделать это.

Заранее спасибо за вашу помощь!

Ответы [ 2 ]

1 голос
/ 23 декабря 2011

Создание индексов для жанров и студий.

В оболочке Монго:

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

Если вы хотите сделать это внутри монгоида, здесь есть некоторая информация об этом здесь .

В основном в классе:

class Movie
    index :genre
    index :studio
end
0 голосов
/ 23 декабря 2011

Ответ в одну строку: добавление индекса в ваши коллекции может ускорить процесс.

Длинный ответ: вы думаете о добавлении кэширования в приложение, потому что БД работает медленно, и вы, вероятно, знаете, что если выиспользовали реляционный движок, тогда все было бы хорошо.Вы должны разрабатывать свое приложение, не беспокоясь о том, как что-то кешировать:)

Есть ли в вашем приложении что-то, что мешает вам использовать традиционный реляционный движок?Если есть, продолжайте, используйте индексы и, возможно, это все исправит.Если нет, зачем идти на Монго?

...