Многопоточность в Laravel

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

Я используя это передать возвращаемые данные в JavaScript.

Эти диаграммы обновляются, когда вы нажимаете на точку данных. Поэтому, если вы щелкнете по точке, т. Е. (‘Демократ’), она перезагрузит страницу и снова вызовет эти методы.

То, что я спрашиваю, можно ли сделать что-то подобное в нативном PHP. Сервер работает под управлением PHP 5.2 на линоде.

foreach(function in getChartsMethod){
Start a child thread to process the function.
}
join the threads.
reload the page.public function getCharts(){
$this->get_cast_chart();
$this->get_party_chart();
$this->get_gender_chart();
$this->get_age_chart();
$this->get_race_chart();
$this->get_ballot_chart();
$this->get_county_chart();
$this->get_precinct_chart();
$this->get_congressional_district_chart();
$this->get_senate_district_chart();
$this->get_house_district_chart();
return view('elections.index');
}

Образец метода

public function get_party_chart(){
$query = DB::table($this->tableName)
->select('party', DB::raw('count(*) as numVotes'))
->groupBy('party')
->orderBy('numVotes', 'ASC');

if ($this->filterParameters != null){
$query = $query->where(key($this->filterParameters), $this->operator, current($this->filterParameters));
}
$chartData = $query->get();
$chartData = $this->prepare_data_for_chart($chartData, 'party', 'numVotes');
JavaScript::put(['partyChart' => $chartData]);

}

3

Решение

Многопоточность возможна в PHP, который обсуждался ранее в Stackoverflow: Как можно использовать многопоточность в приложениях PHP

Однако я не знаю, насколько многопоточность поможет вам здесь. Сколько данных мы говорим, какую точность вы ищете в графиках? Сколько графиков показывается? Многое решение придет из контекста.

Если бы это был я, у меня был бы фон график предварительная обработка «огромных» объемов данных во что-то более полезное / пригодное для использования на внешнем интерфейсе. Опять же полезное / пригодное для использования полностью зависит от контекста. Когда есть фактический запрос страницы, вам просто нужно передать обработанные данные, а не фактические «живые» данные.

Опять же, опять же, это будет полностью зависеть от контекста вашего приложения. Возможно, вам нужны поминутные данные, а может и нет.

2

Другие решения

Крис прав — все зависит от вашего приложения, но если вы приближаетесь к тому моменту, когда приложение становится непригодным для использования, вам следует рассмотреть возможность обналичивания ваших результатов в redis или memcached.

2

По вопросам рекламы [email protected]