Я пытаюсь получить большой объем данных из базы данных PDO PostgreSQL, чтобы вычислить их с помощью алгоритма упрощения (сокращения количества строк) в php.
Проблема в том, что я не могу использовать fetchAll, часто получая сообщение:
Допустимый объем памяти 134217728 байт исчерпан …
Затем я выбрал выборку с использованием курсоров, которая позволяет мне получить доступ к требуемым данным без забот о памяти, как в этом примере:
function simplify(&q){
//Doing some stuff loop
$current = $q->fetch(PDO::FETCH_ASSOC, PDO::FETCH_ORI_ABS, $index+1); //Iterators starts from 1
//Doing some more stuff
}
[...]
$query = $this->connexion->prepare($req, array(PDO::ATTR_CURSOR => PDO::CURSOR_SCROLL)); //More than 100k results
$result = simplify($query);
Теперь это работает как шарм … за исключением времени выполнения, которое занимает до 1 минуты, чтобы вычислить 200 000 строк.
Я указываю, что мой алгоритм использует рекурсивное поведение, которое не помогает в моем случае.
Есть ли другое решение, чтобы сократить время выполнения без потребления слишком большого количества памяти?
Я думал о триггере на стороне сервера БД, но что вы думаете?
Задача ещё не решена.
Других решений пока нет …