PHP перебирает огромный массив из MySQL

Я обрабатываю большие перемещения базы данных для клиента. У нас есть запрос, который извлекает большой объем данных, который необходимо обработать, а затем вставить в другую таблицу. Исходный запрос представляет собой комбинацию объединения нескольких таблиц, чтобы получить его в требуемом формате.

Мы используем собственный класс базы данных, чтобы поместить все результаты запроса (около 600 000 строк с 30 столбцами данных, которые в основном являются строками). Этот массив передается в другой класс (который расширяет ArrayIterator) для выполнения некоторых манипуляций, а затем вставляется в таблицу целевой базы данных.

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

Первоначально он обрабатывал около сотни в секунду, теперь его всего 2-3.

Вот пример нашего кода:

$sql = "some query";
$array = new Import($sql);

foreach($array as $data){
$db->insert('table', $data);
}

Демонстрация нашего класса итераторов:

 class Import extends ArrayIterator {

public function __construct($sql){
//database class parses query and returns all the results into an array
$array = $db->getArray($sql)

parent::__construct($array);
}

public function current() {
$data = parent::current();

//come data processing...

return $data;
}

}

есть идеи по постепенному замедлению? Есть предложения по повышению его эффективности?

0

Решение

Задача ещё не решена.

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

Других решений пока нет …

По вопросам рекламы [email protected]