Autor | Zpráva | ||
---|---|---|---|
Pavel_M Profil * |
#1 · Zasláno: 8. 8. 2018, 10:14:04
Zdravím, poradil by mi někdo, prosím, jak co nejlépe uložit více řádků do databáze? Mám pole kde je cca 15k položek a chtěl bych je ukládat do databáze (MySQL). Uloží se však pouze 3500 položek pak script padne na paměti. O tom, že je potřeba změnit nastavení serveru aby zvládal více paměti vím, ale chtěl bych se poradit jestli je možné to řešit i nějak jinak než změnou nastavení hostingu.
Řešením by asi byloo nějak vyčistit paměť po X iteracích, ale nějak se mi to nedaří. Našel jsem pár návodů s flush nebo gc_collect_cycles, ale bohužel to nepomohlo. Poslední testovací verze je zde: $iter = 0; ob_start(); foreach ($products as $product) { $iter++; $this->productFacade->saveProduct($product, [], $userId); if ($iter === 3500) { $iter = 0; gc_collect_cycles(); sleep(2); } } flush(); ob_clean(); Jinak je to část kódu, celé to je postavené na nette a využívám pro práci s db nette database. Pro ukládání položek z výše uvedeného kódu využívám Nette\Database\Connection a query aby insert z nette database nevytvářel ActiveRow (a tím ubíral paměť) Díky za případné rady. |
||
N71 Profil * |
#2 · Zasláno: 8. 8. 2018, 12:25:25
Z tohoto kusu kódu nikdo nic nepozná. Použití output bufferu tady nedává smysl, a že existují nějaké gc_* funkce si úplně vymaž z hlavy.
|
||
Časová prodleva: 6 let
|
0