Nette\Database při vykonání dotazu spotřebuje veškerou paměť

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

AHoj chtel jsem se zeptat, mám routu napsanou asi takto

$routerProdukt = new RouterProdukt('<produkt>/',array(
            'produkt'    => array(
                Route::FILTER_OUT   => function ($id) use ($container){
                    if(!is_numeric($id))
                    {
                        return $id;
                    }
                    else
                    {
                        $cache = $container->cache;
                        $adresaList = $cache->load("adresaList2");
                        if ($adresaList == NULL) {
/********************* Zde mi to vezme veškerou paměť *******************************************/
                            $adresaList = $container->produkty->table->fetchPairs('id', 'adresa');
/********************* Zde mi to vezme veškerou paměť *******************************************/
                            $cache->save("adresaList2", $adresaList);
                        }
                        if (isset($adresaList[$id])) {
                            $adresa = $adresaList[$id];
                        }
                        else
                        {
                            $adresaList = $container->produkty->table->fetchPairs('id', 'adresa');
                            $cache->save("adresaList2", $adresaList);
                            $adresa = $adresaList[$id];
                        }

                        return $adresa;
                    }
                }
            ),
            'module'    => 'Front',
            'presenter' => 'Produkt',
            'action'    =>  'default'
        ));
        $routerProdukt->context = $container;
        $router[] = $routerProdukt;

Normálně mi funguje jak má, ale problém nastal, když má tabulka produktů přiblížně 60 tisíc produktů. Tak při vykonání dotazu ($adresaList = $container->produkty->table->fetchPairs(‚id‘, ‚adresa‘);) mi zabere všechnu interní paměť, nevíte prosím co s tím. Děkuji

Editoval zool (23. 4. 2013 21:47)

Eda
Backer | 220
+
0
-

Zkus kešovat jen jednotlivé záznamy, nikoliv celou tabulku :-)

zool
Člen | 144
+
0
-

Zkusím, ale myslím že to nepomůže, bo když dám exit() před tento řádek $cache->save(„adresaList2“, $adresaList); tak se to na něj ani nedostane a ukonči se vlivem nedostatku paměti. Ale zkusím díky

cubic
Člen | 45
+
0
-

Zkus pomocí select() omezit dotaz jen na ty 2 sloupce, se kterými pracuješ. U NDB mi to dřív často pomohlo…

Nox
Člen | 378
+
0
-

Vypni pro tu část logování query, je to obrovský žrout paměti

zool
Člen | 144
+
0
-

cubic díky za typ zkusím

Nox jak se dá vypnout pro jednotlivý dotaz cache?