Jak zamezit bobtnání paměti při velkém selectu
- tomasn
- Člen | 8
Potřebuji udělat import z jiné db a během toho upravit data asi takto
$data = $db1->table('tabulka1')->limit(2000000);
foreach ($data as $item) {
$item = upravItem($item);
$db2->insert($item);
}
Bohužel mi to při větším počtu záznamů vyčerpá paměť, nejspíš hlavně proto, že výsledek selectu tzn. $data se nabaluje. Jak můžu opustit už zpracovaný řádek, abych jej nedržel v paměti?
Zkušel jsem si tahat jen id a potom vytáhnout jen jeden řádek nicméně to je zase hrozně pomalé.
- iguana007
- Člen | 970
Přesně jak píše skrivy … viz. třeba: http://www.mysqlperformanceblog.com/…rts-of-data/
- tomasn
- Člen | 8
Díky za rady. V podstatě jedinné co pomohlo bylo přepsaní do
mysqli.
Vypnutí debug panelu pomohlo mírně.
Unbuffered jsem nezkoušel, nicméně předpokládám, že by se to ještě
kousek pomohlo mysqli.
V momentě kdy použiju nette database tak se do objektu, který je výsledkem
dotazu, ukládá všechno co se použije tzn. každý sloupec i řádek a
nepodařilo se mi to udělat tak, aby to nedržel v paměti a zpracovával jen
po řádcích.