Kezdőoldal » Számítástechnika » Weblapkészítés » Egymillió rekordos adatbázis...

Egymillió rekordos adatbázis lekérdezésnél hibát dob az oldal (PHP memória limit). Azon kívül, hogy a PHP limitet növelem, van-e más megoldás? Részletek lent.

Figyelt kérdés
Látogatói statisztikát tárol az oldal (melyik menüből hova mennek), tárolással nincs is probléma, hibátlan az oldal. A lekérdezésnél viszont előjön a hiba: a memória limit megtelt . Neten keresgélve a limit emelését ajánlják, de nem tudom elképzelni, hogy ha a MySql lekérdezésben limit van (mondjuk utolsó 100 oldal látogatása vagy session feltételű lekérés), akkor ne tudjon lekérni ennyi adatot memória túllépés nélkül. Köszönöm a válaszokat!

#php #limit #MySQL #memória limit
2017. márc. 14. 10:40
 1/3 2*Sü ***** válasza:
100%

Valószínű nem a lekérdezéssel van a gond, hanem az adatok feldolgozásával. Ha a lekérdezés minden sorát elkezded egy tömbben letárolni, majd a tömbbel dolgozol tovább, akkor persze, hogy el fog szállni memóriatúllépéssel. Valahogy meg kell oldani, hogy ne kelljen a már feldogozott rekordot tárolnod, így a lekérdezésből mindig csak az aktuális sort kéred le és dolgozod fel. Még jobb, ha maga a lekérdezés van úgy összeállítva, hogy nem a nyers, hanem a kívánt adatokat kérdezze le.


Egy lekérdezés akkor szokott időtúllépéssel elszállni, ha kellően sok rekord van az adattáblában, és olyan mező alapján próbálsz szűrni, sorba rendezni, amely mezőre nincs külön index. Ha session azonosítóra van egy feltételed, akkor a session azonosítót tároló mezőre célszerű külön indexet definiálni az adattáblában. Egy hasonlattal élve olyan ez, mint mikor a könyvtárban mondjuk azokat a könyveket akarod kiválasztani, amelyek az „Programozás” szóval kezdődnek. Ha nincs semmiféle segítséged, akkor végig kell bogarásznod az összes könyvet, hogy ki tudd választani a programozás szóval kezdődő címeket. Ha viszont van egy cím alapú katalógusod, ahol a cím alapján vannak sorba rendezve a könyvek, akkor ott könnyen – intervallumfelezéssel – megtalálod az első és az utolsó programozás szóval kezdődő könyvet, kivéve ezt a pár száz katalóguscédulát, már könnyebben ki tudod keresni a könyvtárból azt a pár száz könyvet, aminek a cím ezzel a szóval kezdődik.


De így adattábla szerkezet és forráskód nélkül sokkal többet nem lehet erről mondani.

2017. márc. 14. 11:15
Hasznos számodra ez a válasz?
 2/3 A kérdező kommentje:
Köszönöm a választ, nagyon hasznos, főleg az összehasonlítás! Valóban vannak hiányosságok: a tábla (log_id, log_value, log_ip, log_date) oszlopokat tartalmaz, a lekérés pedig egyszerű: Select (log_value) from url_logging LIMIT 0, 30;. A log_id Auto_increment, elsődleges kulcs. Az érdekesség, hogy ez 30 db sort kéne, hogy visszaadjon, ami a Workbenchben 0.000 mp alatt megy végbe. Tehát elvileg 30*4 adattal kellene dolgoznia. Természetesen tömbbe tárolja, ezeket majd egy for ciklussal formázva megjeleníti.
2017. márc. 14. 11:27
 3/3 A kérdező kommentje:
Közben egy jellemző eset, miután kiírtam a kérdést, meg is lett a hiba. Az adatfeldolgozásnál sikerült egy végtelen ciklust alkotni. Köszönöm a választ!
2017. márc. 14. 11:32

Kapcsolódó kérdések:





Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!