cid locale:hu

brtamas képe

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ó: 
nevergone képe

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?

0
0
brtamas képe

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. :)

0
0
nevergone képe

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.

0
0
brtamas képe

É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?

0
0
Sk8erPeter képe

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).

0
0
brtamas képe

É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!

0
0
Sk8erPeter képe

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.

0
0