производительность — Как считать вхождения в ОЧЕНЬ БОЛЬШОМ наборе данных с переполнением стека

Допустим, я хочу отслеживать, сколько раз слово встречается …

//Update the totals
foreach($arrayOfWords as $word) {
$totals[$word] = $totals[$word] + 1;
}

Теперь представьте, что этот маленький блок кода называется СТО раз, каждый раз с сотнями новых слов в $ arrayWords каждый раз, что приводит к миллионам записей внутри связанного массива $ total. Несмотря на простоту операции (добавление 1 к существующему значению), PHP значительно замедляется, когда мы приближаемся к миллионам записей.

Можете ли вы придумать лучший способ подсчета событий (желательно без использования базы данных)?

3

Решение

Вот один из способов ускорить

//Update the totals
foreach($arrayOfWords as $word) {
$totals[$word]++;
}

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

Кроме того, (только примечание) я не вижу, как длина $totals может когда-либо превышать длину $arrayOfWords, если вы не добавляете слова в $totals где-то еще в вашем коде.

2

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

Объединяя предложения Марк Бейкер а также quickshiftin, следующий код должен быть немного быстрее, если список входных слов содержит много повторяющихся слов:

$counts = array_count_values( $words );
foreach( $counts as $word => $count ) {
$totals[$word] += $count;
}

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

2

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector