Предложение по использованию PHP-массива? - PullRequest
1 голос
/ 03 октября 2011

Допустим, у меня есть 100k записей в таблице, после извлечения этих записей из таблицы я помещаю их в массив с некоторыми вычислениями, а затем отправляю их на сервер для дальнейшей обработки.

Я протестировал сценарий с (1k) записями, он отлично работает, но беспокоюсь о том, есть ли проблема с производительностью, потому что страница, которая выполняет вычисления и извлекает записи из БД, запускается каждые 2 минуты.

Мой вопрос: могу ли я использовать массив для более чем 2 миллионов записей?

Ответы [ 3 ]

6 голосов
/ 03 октября 2011

Нет памяти о том, сколько данных может содержать массив, ограничение - память сервера / ограничение памяти PHP.

Зачем вам помещать 100 тыс. Записей в массив? Вы знаете, базы данных имеют сортировку и ограничение по этой причине!

2 голосов
/ 03 октября 2011

Мой вопрос: могу ли я использовать массив для более чем 2 миллионов записей?

Да, вы можете, 2 миллиона записей в массивах - это не предел в PHP для массивов. Предел массива зависит от памяти, доступной для PHP.

ini_set('memory_limit', '320M');
$moreThan2Million = 2000001;
$array = range(0, $moreThan2Million);
echo count($array); #$moreThan2Million

Вы писали:

Страница запланирована и запускается через 2 минуты, поэтому меня беспокоит проблема с производительностью.

И

Но мне нужно получить все, а не 100 одновременно, и отправить их на сервер для дальнейшей обработки.

Производительность для операций с массивами зависит от вычислительной мощности. С достаточно быстрым компьютером вы не должны столкнуться с какими-либо проблемами. Однако следует помнить, что PHP является интерпретируемым языком и поэтому значительно медленнее, чем скомпилированные двоичные файлы.

Если вам нужно запускать один и тот же сценарий каждые 2 минуты, но время выполнения сценария превышает две минуты, вы можете распределить выполнение сценария по нескольким компьютерам, поэтому один процесс не потребляет ресурсы ЦП и памяти другого и может завершить работу в то же время другой процесс запускается на дополнительной коробке.

Редактировать

Хороший ответ, но можете ли вы написать свое мнение о том, сколько времени потребуется сценарию для выполнения, если нет проблем с процессором сервера и оперативной памятью.

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

У меня 10 ГБ ОЗУ и более чем 8 процессоров Squad.

Например, вы можете сделать приблизительную метрику для 1, 10, 100, 1000, 10000, 100000 и 1 миллиона записей, чтобы увидеть, как масштабируется ваш (неуказанный) скрипт на этом компьютере.

Я отправляю этот массив на другую страницу для дальнейшей обработки.

Метрика, а также объем данных, которые вы отправляете между компьютерами, и какая пропускная способность у вас есть для межпроцессного взаимодействия по проводной сети.

2 голосов
/ 03 октября 2011

Допустим, у меня есть 100k записей в таблице, после извлечения этих записей из таблицы я помещаю их в массив с некоторыми фильтрами.

Фильтры?Разве вы не можете просто написать запрос, который реализует эти фильтры?База данных (в зависимости от поставщика) - это не просто хранилище данных, она может выполнять вычисления, и в большинстве случаев это гораздо быстрее, чем переносить данные в PHP и выполнять там вычисления.Если у вас есть база данных, скажем, в PostgreSQL, вы можете делать практически все, что вы когда-либо хотели, с помощью plpgsql.

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