Sziasztok!
Van esetleg olyan modul, ami azt eredményezi, hogy a cache táblában nem egy hatalmas recordban van az összes fordítás, hanem mondjuk külön recordokban?
Láttam, hogy van egy hasonló téma már a fórumban, az én helyzetem annyiban más, hogy viszonylag sok modult (kb. 30) tényleg használok, és kellenek is hozzá a fordítások.
Viszont így, hogy egy recordból olvassa be az összes fordítást, így hatalmas adatbázis kommunikációt és memóriaigényt eredményez a rendszer.
Előre is kösz a válaszokat!
Minden jót!
Melyik modulhoz, modulokhoz kapcsolódik a téma?:
Drupal verzió:
Fórum:
az csak cache
Az csak cache, nyilván te is sejted, hogy az oldalon használt fordításoknak nem az a végleges helye.
Milyen problémát okoz nálad?
Választ szeretnél? - Új kérdés, új téma - Tesztoldal - Trollkezelés - Frissítés
Kösz a gyors reakciót.
Kösz a gyors reakciót.
Az rendben van h cache. Annyit látok, hogy nagyon sok ilyen jellegű kérés van:
SELECT cid, data, created, expire, serialized FROM cache WHERE cid IN ('locale:hu')
És emellett nagy a szerver memória fogyasztása és nagyon sok adat megy az sql szerverből a php-t futtató szerverre. Ezért gondolom, hogy feleslegesen utazik egy csomó fordítása az adatbázisból a php felé (nagy sql kommunikáció), a php meg sokat dolgozik, hogy megtalálja közöttük a szükségeset (memóriaigény).
Legalábbis, ez a hipotézisem. :)
rossz elgondolás
Rossz elgondolás, mivel a fordításoknak így is az adatbázisból kell jönniük. Amíg nem okoz teljesítménycsökkenést, addig nincs gond, azért van az adatbázis-szerver, hogy dolgozzon. Ha pedig lassúnak érzed, akkor használj más cache-backendet (pl. memcached, van hozzá Drupal modul), hogy a Drupalnak egyáltalán ne kelljen adatbázis-alapú gyorstárat használnia.
Választ szeretnél? - Új kérdés, új téma - Tesztoldal - Trollkezelés - Frissítés
Értem.
Értem.
Annyiban tartom ezt a megoldást pazarlónak, hogy a hatalmas rekord lekérdezésével egy csomó olyan szöveg fordítása is lejön, ami esetleg meg sem jelenik az adott oldalon. Ahogy én utána olvastam ebben a rekordban gyakorlatilag az összes fordítás benne van. Kb. 400kb ez az egy rekord.
Azért gondolom, hogy hogyha csak azokat kérdezné le a rendszer, amik tényleg megjelennek, akkor jobban járnánk.
Tévedek?
Egyetértek, hogy pazarlónak tűnik
Ha valóban olyan query-vel jön le minden fordítás egyben, ahogy írtad, akkor az tényleg pazarló. Nem néztem még utána, hogyan működik a fordítások cache-elése, azokból való adatkikotorás, de belenézve adatbázisban a cache-táblába, az alapján nem igazán tudok elképzelni más megoldást, mint hogy valóban egyben lekérdezné a Drupal, mivel a cache-táblában nincsenek külön tárolva a fordítások.
Ez így tényleg sok memóriát igényel, mivel akkor valószínűleg egy PHP-tömbben a request kezdetétől annak kiszolgálásáig minden fordítás tárolódik (remélhetőleg egyetlen request során nincs többször is lekérdezve ugyanez). Ez viszont pont ellent mond annak, amit korábban írtál, hogy "a php meg sokat dolgozik, hogy megtalálja közöttük a szükségeset", mert a konkrét tömbindex értékének megkeresése elvileg pont nem tart sokáig.
Úgy tűnik, itt kompromisszumot kell kötni: a Drupal eleve nem spórol a memóriaigénnyel (ez általában is jellemző a CMS-ekre, mivel nem egyszerű kompromisszumoktól mentesen megvalósítani egy ilyen komplex rendszert), főleg, amikor a cache-adatok lekéréséről, majd a request idejéig történő tárolásáról van szó, ez viszont annyi előnyt jelent, hogy kevesebb query megy az adatbázis felé, több adatot lehet kiszolgálni kevesebb kéréssel (cserébe nagyobb memóriaigénnyel).
És a rekord átalakítása php
És a rekord átalakítása php tömbbé az nem nagyon erőforrás igényes?
Egyébként köszi mindkettőtöknek a hozzászólásokat!
Szerintem de
De, szerintem az is erőforrás-igényes, mivel unserialize()-t kell hozzá használni, az meg szintén nem egy erőforrás-spórolós megoldás.