Laravel - Возможные решения для улучшения производительности чтения запросов для больших данных (8м + строки) - PullRequest
0 голосов
/ 29 апреля 2019

У меня есть веб-приложение Laravel, использующее интерфейс VueJS и MySQL в качестве СУБД. В настоящее время у меня есть таблица, которая имеет размер 23,8 ГБ и содержит более 8 миллионов строк, и она растет каждую секунду.

При запросе этих данных я объединяю их с 4 другими таблицами, поэтому весь набор данных огромен.

В настоящее время я вынимаю и отображаю только 1000 строк, так как мне больше не нужно. VueJS отображает данные в таблице, и пользователь может выбрать из 13 вариантов фильтрации, чтобы отфильтровать данные в диапазоне от даты, имени, статуса и т. Д.

Используя Eloquent и имея индексы MySQL, мне удалось сократить время запроса до приемлемого времени, но мне нужно, чтобы этот раздел приложения был максимально отзывчивым.

Некоторые из предложений where, которые запускаются из фильтров, выполняются за 13 секунд, что я считаю слишком длинным.

Я немного читал и думал, может быть MongoDB или Redis может быть вариантом, но у меня очень мало опыта с любым из них.

Для этого конкретного сценария, что, по вашему мнению, будет лучшим вариантом для максимизации производительности чтения?

Если бы я использовал MongoDB, я бы не перенес текущие данные ... У меня была бы вторая база данных, содержащая все новые данные. Это приложение еще не было запущено в производство, и в большинстве случаев потребуются данные только за последние 30 дней, но по-прежнему требуется возможность запрашивать старые данные, поэтому сохраняются и MySQL, и MongoDB.

Любые отзывы будут оценены.

Ответы [ 2 ]

0 голосов
/ 29 апреля 2019

Попробуйте использовать эластичный поиск.Это ускорит процесс чтения.

0 голосов
/ 29 апреля 2019
  • Попробуйте преобразовать запрос в хранимую процедуру. Вы можете выполнить хранимую процедуру следующим образом.

    DB::select('exec stored_procedure("Param1", "param2",..)'); 
    

    или

    DB::select('exec stored_procedure(?,?,..)',array($Param1,$param2));
    

    Попробуйте это без параметров

    DB::select('EXEC stored_procedure')
    
  • Попробуйте использовать EXPLAIN для оптимизации производительности.

    Как оптимизировать запросы MySQL на основе плана EXPLAIN

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