Selection s velkou tabulkou a memory limit

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
matopeto
Člen | 395
+
0
-

Zdravim

mam mensi problem s Database Selection, pokusam sa nacitat zaznamy s velkej tabulky (o priblizne 100000 – 200000 zaznamoch), cez tieto zaznamy nasledne iterujem a vytvaram z nich nieco ako csv.

Problem je v tom, ze Selection si celu tabulku chce nacitat do pamate (pri execute() si to dava do $data a $rows) co sposobi pretecenie memory_max_limit.

Kedze data iterujem nepotrebujem mat v pamati celu tabulku, staci mi aktualny riadok. Co by tak bolo, keby som robil klasicky cez PDO, lenze z istych dovodov musim pouzit nette database.

Nestretol sa niekto z vas s podobnym problemom a pripadne riesenim?

HonzaN
Člen | 66
+
0
-

Nebylo by řešení zapisovat do souboru průběžně, po blocích ?

matopeto
Člen | 395
+
0
-

To ide, tak to robim, ale memory limit pretecie v Selection, ked sa snazi nacitat celu tabulku do pola.

David Grudl
Nette Core | 8228
+
0
-

Je nutné použít Selection, nestačí obyčejné query(...)?

matopeto
Člen | 395
+
0
-

Nakoniec to vyzera, ze prepisat to do obycajneho query bude nutnost. (a v tom projekte to snad nebude nijako zlozite, akurat mozno trochu menej prehladnejsie)

matopeto
Člen | 395
+
+1
-

Mozno sa to bude niekomu hodit, i ked je to celkom jasne ako so selection spravit normalne query (pokial este nebolo pustene):

<?php

	if ($data instanceof Selection) {
		$selection = clone $data;
		$sql = $selection->getSql();
		$connection = $selection->connection;

		$data = $connection->queryArgs($sql, $selection->getSqlBuilder()->getParameters());
	}

?>