@bizf

Как оптимизировать загрузку для Rails Api?

Как сделать так, если в базе данных хранится около 100 тыс. записей, а то и больше чтобы не было ни каких торможений. Например, если использовать фильтр для поиска информации из 20 тыс. записей то при попытке ввести информацию в сам фильтр будет подтормаживать при каждом вводе новой буквы, тоже самое будет и с пагинацией при переключение страниц. То есть нужно чтобы загружались из jsona не все записи, а отрывками примерно по 40-60 записей.

Вот что есть:

def index
      @posts = params[:limit] ? Post.all.limit(params[:limit]) : Post.all

      render json: @posts
end


Как сделать более правильней. На данный момент у меня 20 с лишнем тыс. записей и подтормаживает хорошо.
  • Вопрос задан
  • 87 просмотров
Пригласить эксперта
Ответы на вопрос 3
HighQuality
@HighQuality
☁ Ниндзя девелопер
Чтобы страницы не тормозили, используй листалку — kaminari
Чтобы аякс фильтр не тормозил, используй дебаунсер в яваскрипте — дебаунс
Ответ написан
Комментировать
Post.all.limit(params[:limit])

Воспользуйся
Post.limit(per_page).offset( per_page * (page_num - 1) )
Ответ написан
Комментировать
@man_without_face
студент
У вас может params[:limit] не приходит, вот и достаётся Post.all, т.е. все 20тыс записей.

Ещё может добавьте, чтобы поиск был не после ввода первого символа, а например после третьего.

Ещё можно добавить индексы в таблицу, если их нет.

Ещё, судя по тому коду, что вы написали, нет вообще как такового поиска по символу (нет where по простому)

Ещё, вы отдаёте наружу целиком данные, т.е. все колонки таблицы posts. Т.е. полагаю вам подойдёт что-то типа такого:
render :json => @posts.as_json(:only => [:title, :created_at])

Тогда данных будет отправляться на порядок меньше.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы