Лучший способ подойти к тяжелому запросу SQL в представлении панели мониторинга в рельсах - PullRequest
0 голосов
/ 24 января 2020

У меня есть эта панель (отчет), которая в основном выполняет тяжелый запрос sql и отображает его результаты в сетке таблицы, довольно стандартные вещи.

Однако иногда запрос бывает слишком тяжелым из-за большого объема данных и сложности sql, и браузер просто зависает, пока пользователь не получит ошибку.

У меня нет n + 1 запросов, и я пытался добавить нумерацию страниц, но я все еще сталкиваюсь с этой проблемой.

Каков наилучший подход к этому? Использование фонового задания?

Есть ли способ выполнить этот запрос в фоновом режиме, чтобы предотвратить сбой запроса?

Я пытался внедрить рабочий sidekiq, но не уверен, что может получить результаты от работника после завершения задания.

@results = ActiveRecord::Base
   .connection
   .select_all(query)
   .map do |record|
    Hashie::Mash.new(record)
   end

query содержит запрос SQL в строке.

Любые идеи?

1 Ответ

0 голосов
/ 24 января 2020

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

Но вы можете найти способ обработать его на одном рабочем месте или даже записать результат в файл это может быть поиск после или отправка его с мыслью о запросе на тот же сервер в главном потоке (но из-за больших данных это может замедлиться) et c ...

Может быть, кеш-сервер, такой как redis, может помочь временно сохранить его и отправить запрос в основной поток, сообщающий ему, что на Redis-сервере есть что посмотреть

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...