Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > Обработать много данных


Автор: Zorak 26.4.2013, 15:53
Доброго времени суток. В принципе может мои опасения напрасны, то отпишите пжлста). И так...
Хочу написать скрипт, который будет обрабатывать данные и результат писать в базу.
Вот шаги работы скрипта:
1. Открываем файл и считываем его в массив mas1
2. Считываем SELECT-ом данные из базы и опять загоняем в массив mas2
3. Далее бежим от начала до конца mas1. Проверяем наличие записи mas1[i] в mas2 (т.е. in_array());
4. Далее
4.1. Если in_array == true -> делаем запись в лог-файл
4.2. Если in_array == false -> пишем ету строку в базу

Мои опасения: Количество строк  в mas1 неизвестно, но их будет минимум как 500... но не думаю что будет больше чем 40 000.

Вопрос: справится ли PHP с такой задачей ? Какие может настройки в php.ini надо изменить чтобы ему было проще? 

З.Ы. Файл у меня создается при выполнении скомпиленной программы на delphi. По условиям клиента ета программа у них работает почти по 20 часов в сутки. По сути она мониторит большой набор сайтов и выбирает оттуда определенные данные и после фильтрации нужные записывает в файл, который пересоздается раз в сутки. Поэтому я не могу даже предположить сколько там будет записей. 

Спасибо

Автор: ksnk 26.4.2013, 16:30
Не проще ли записать во временную таблицу все значения из mas1 и состряпать пару запросов - что выводить в лог и второй - что сохранять в базу.

Вставка - простая простыня из insert values... Если удастся ее уместить в 64к, то это один запрос (при обычных настройках mysql)

Остальное - еще пара запросов.

Автор: Zorak 26.4.2013, 17:40
хм.. т.е. длругими словами разбить выполнение на части ?

Автор: ksnk 26.4.2013, 18:07
Цитата(Zorak @  26.4.2013,  17:40 Найти цитируемый пост)
т.е. длругими словами разбить выполнение на части ? 

Ну, в принципе, да. Дать возможность mysql выполнить всю работу и только вывести результат.

Автор: Zorak 26.4.2013, 18:22
блин, как я боялся этого ответа )))))))

Добавлено через 15 секунд
Спасибо большое.. ушол делать)

Автор: skyboy 26.4.2013, 23:50
1. временная таблица с движком memory.
2. запись в базу отсутствующих записей — один запрос insert … select … on duplicate key ignore или аналог
3. В лог закидываются все записи из таблицы с перезаписью тех, что были.

Автор: Zorak 29.4.2013, 23:02
Воспользовался принципом SkyBoy и ksnk.... спасибо вам большое, вопрос решен.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)