Как посчитать большое количество файлов в каталоге - PullRequest
2 голосов
/ 23 апреля 2019

Я пытаюсь сгенерировать и посчитать большое количество маленьких файлов json (например, миллионов), используя класс хранилища Laravel.

Я пробовал count(Storage::files(PATH)), но это не сработало из-за того, что их миллионы.

Сначала он вернул ошибку, превышающую время выполнения, превышающее 30 секунд, поэтому я попытался увеличить значение max_execution_time, но теперь, после некоторого запуска, он возвращает пустую страницу без подсказки, что пошло не так

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

любая помощь, пожалуйста?

Ответы [ 2 ]

3 голосов
/ 23 апреля 2019

Я бы сделал это с PHP exec - Ваша ОС уже знает количество файлов в каталоге. Она индексирует его, так почему бы не использовать его? Супер быстро и чисто.

<?php

exec('ls -l /path/to/your/json/files | grep ^- | wc -l', $out);
echo $out[0];

Обратите внимание , что этот exec возвращает массив - поэтому вам нужно использовать индекс 0 для $out

ОБНОВЛЕНИЕ - Я протестировал, используя следующее для создания 3 000 000 файлов - Получившаяся функция php exec запустилась за <20 секунд. </p>

#!/bin/bash
max=3000000
for i in `seq 2 $max`
do
    echo "$i" > $i.json
    echo "$i"
done
0 голосов
/ 23 апреля 2019

Даже если вы увеличите max_execution_time до 1 часа, это, безусловно, приведет к истечению времени ожидания в любое время около 10 минут, поэтому вы получаете пустую страницу.

@ Решение Зака ​​- ваш лучший выбор.

...