Объединение двух коллекций Laravel с одинаковыми ключами для агрегации имеет проблемы с производительностьюPhp

Кемеровские программисты php общаются здесь
Ответить
Anonymous
 Объединение двух коллекций Laravel с одинаковыми ключами для агрегации имеет проблемы с производительностью

Сообщение Anonymous »

Сейчас я работаю над приложением Laravel, которое объединяет статистику из двух коллекций: postStats (стандартная коллекция) и contentStats (LazyCollection). Метод mergeStats, который я использую, перебирает каждую коллекцию несколько раз для суммирования различных показателей, что вызывает проблемы с производительностью при работе с большими наборами данных. Для 1000 сообщений и 1000 контента это занимает около 10 секунд. Записи могут быть намного больше, чем это .
Код:
private function mergeStats(Collection $postStats, LazyCollection $contentStats, bool $dashboardStats = false): array
{
$startTime = microtime(true);
$keys = [
'reactions_count',
'comments_count',
'sc_shares_count',
'confirmed_regular_shares_count',
'sc_clicks_count',
'unconfirmed_regular_shares_count',
'confirmed_shares_click_count',
];

// Current logic here to merge postStats and contentStats,
$mergedStats = $postStats->concat($contentStats)->reduce(static function ($carry, $stats) use ($keys) {
foreach ($keys as $key) {
$carry[$key] = ($carry[$key] ?? 0) + ($stats[$key] ?? 0);
}
return $carry;
}, array_fill_keys($keys, 0));

$mergedStats['dashboard_stats'] = $dashboardStats;

return CalculateEngagementMetricsAction::run($mergedStats); //based on the merged stats, it does some calculations, This action is not the culprit for performance.
}


Подробнее здесь: https://stackoverflow.com/questions/790 ... formance-i
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Php»