Lekérdezések és cache a Drupalban, mennyi az annyi?

  • GeSHi library error: sites/all/modules/geshifilter/geshi is not a directory.
  • GeSHi library error: sites/all/modules/geshifilter/geshi is not a directory.
  • GeSHi library error: sites/all/modules/geshifilter/geshi is not a directory.
  • GeSHi library error: sites/all/modules/geshifilter/geshi is not a directory.
  • GeSHi library error: sites/all/modules/geshifilter/geshi is not a directory.
  • GeSHi library error: sites/all/modules/geshifilter/geshi is not a directory.
  • GeSHi library error: sites/all/modules/geshifilter/geshi is not a directory.
  • GeSHi library error: sites/all/modules/geshifilter/geshi is not a directory.
  • GeSHi library error: sites/all/modules/geshifilter/geshi is not a directory.
  • GeSHi library error: sites/all/modules/geshifilter/geshi is not a directory.
  • GeSHi library error: sites/all/modules/geshifilter/geshi is not a directory.
  • GeSHi library error: sites/all/modules/geshifilter/geshi is not a directory.
  • GeSHi library error: sites/all/modules/geshifilter/geshi is not a directory.
  • GeSHi library error: sites/all/modules/geshifilter/geshi is not a directory.
  • GeSHi library error: sites/all/modules/geshifilter/geshi is not a directory.
  • GeSHi library error: sites/all/modules/geshifilter/geshi is not a directory.
  • GeSHi library error: sites/all/modules/geshifilter/geshi is not a directory.
  • GeSHi library error: sites/all/modules/geshifilter/geshi is not a directory.
  • GeSHi library error: sites/all/modules/geshifilter/geshi is not a directory.
  • GeSHi library error: sites/all/modules/geshifilter/geshi is not a directory.
  • GeSHi library error: sites/all/modules/geshifilter/geshi is not a directory.
  • GeSHi library error: sites/all/modules/geshifilter/geshi is not a directory.
  • GeSHi library error: sites/all/modules/geshifilter/geshi is not a directory.
  • GeSHi library error: sites/all/modules/geshifilter/geshi is not a directory.
  • GeSHi library error: sites/all/modules/geshifilter/geshi is not a directory.
  • GeSHi library error: sites/all/modules/geshifilter/geshi is not a directory.
  • GeSHi library error: sites/all/modules/geshifilter/geshi is not a directory.
  • GeSHi library error: sites/all/modules/geshifilter/geshi is not a directory.
  • GeSHi library error: sites/all/modules/geshifilter/geshi is not a directory.
  • GeSHi library error: sites/all/modules/geshifilter/geshi is not a directory.
  • GeSHi library error: sites/all/modules/geshifilter/geshi is not a directory.
  • GeSHi library error: sites/all/modules/geshifilter/geshi is not a directory.
  • GeSHi library error: sites/all/modules/geshifilter/geshi is not a directory.
  • GeSHi library error: sites/all/modules/geshifilter/geshi is not a directory.
  • GeSHi library error: sites/all/modules/geshifilter/geshi is not a directory.
  • GeSHi library error: sites/all/modules/geshifilter/geshi is not a directory.
  • GeSHi library error: sites/all/modules/geshifilter/geshi is not a directory.
  • GeSHi library error: sites/all/modules/geshifilter/geshi is not a directory.
  • GeSHi library error: sites/all/modules/geshifilter/geshi is not a directory.
  • GeSHi library error: sites/all/modules/geshifilter/geshi is not a directory.
  • GeSHi library error: sites/all/modules/geshifilter/geshi is not a directory.
  • GeSHi library error: sites/all/modules/geshifilter/geshi is not a directory.
  • GeSHi library error: sites/all/modules/geshifilter/geshi is not a directory.
  • GeSHi library error: sites/all/modules/geshifilter/geshi is not a directory.
  • GeSHi library error: sites/all/modules/geshifilter/geshi is not a directory.
  • The spam filter installed on this site is currently unavailable. Per site policy, we are unable to accept new submissions until that problem is resolved. Please try resubmitting the form in a couple of minutes.
Kategória: 
Leírás

A drupal.hu-n zajlik épp egy nagyon jó kis thread: Adatbázis teljesítmény optimalizálása. A szolgáltató hozzáállása magyar viszonylatban példaértékű, és ez is hozzájárult némileg a motivációhoz, hogy összeszedjem a Drupal 7 cache rendszerével kapcsolatos tapasztalataimat.

Először oszlassunk érdemes kicsit tisztázni a Drupal cache fogalmát. Egyrészt sokannál a cache fogalma kimerül abban, hogy az a pár bekapcsolható izébizé a performance oldalon.

Összességében: Drupal cache nem egyenlő a anonim felhasználóknak bekapcsolható oldal gyorstárral!

A D7-ben eleve nincsen olyan, hogy „bekapcsoljuk a cache-t”. Egy nagyon komplex, többrétű cache-rendszer van, ami az egyes elemek kiszolgálását végzi.

Ezek lehetnek dedikált elemek, mint pl a Menü gyorstár, Token registry. Vagy nem dedikált, hanem egy bármilyen modul által végzett egyszeri gyorstárazási művelet.

Még egy picit mélyebben, megpróbálom egyszerűen összefoglalni: Minden dedikált cache-nek van a Drupalon belül egy definíciója. Ez mondja meg, hogy mi történjen akkor, amikor ezt a cache-t írjuk, vagy olvassuk.
Pont ezek a definíciók teszik azt lehetővé, hogy az összes típusú cachet egységesen írhassuk, olvashassuk. Amit a modulok - illetve természetesen maga a Drupal is - a cache_get() és cache_set() függvényekkel tesznek meg.

Mire kell a cache rendszer?

Egy példa: Egy node megjelenésekor a címkék mellé ki akarunk írni egy számot, ami a node szerzőjének a node tartalomtípusába tartozó olyan tartalmak összege, amely az adott címkével el van látva.

Ez egy közepesen/kevésbé bonyolult lekérdezést jelent, amit kétféleképpen lehet megcsinálni, jól, vagy rosszul. Tegyük fel, hogy megvan a lekérdezés, ott vannak a megfelelő számok a megfelelő címkék mellett. De hogy került oda? Na ez a nem mindegy!

A legrosszabb: A címke kiírásához kapcsolódó preprocess függvénybe írt lekérdezés. Ilyenkor mondjuk egy 10 node teaserből álló, átlag 4 címkével rendelkező lista kiírásához 40!! plusz lekérdezés fog kapcsolódni!

Jó: Hmm.. És itt most viharban lettem, mert egzakt szabály erre nincsen, több módszert kellene kipróbálni, hogy kiválasszam a legjobbat az adott környezethez, feladathoz.

De 1 dolog mindegyik megoldásban benne van: Valamilyen módon fel kell építeni egy objektumot, és eltárolni cache_set()-el. A legkézenfekvőbb egy nodehoz kapcsolódó cache elem felvétele, amiből visszakapjuk a nodehoz kapcsolódó címéket és a kért számot. De meg lehet próbálni közvetlenül abba a cache-ba írni, ami a mező értékeit tárolja - szóval lehetőség van bőven.

Cache a cacheban

Ezek a cache-ok sokszor egymásba épülnek, tehát teszem azt egy nem dedikált cache elem bele fog épülni a page cache-ba (tehát a ki-bekapcsolható anomim oldalcacheba), de például a views dedikált cache-a is ugyanúgy be fog gyógyulni a page cache-ba, tehát anomymus nem fog kapni cache_get-et a viewstól. És ezért emlegettem az elején, hogy Drupalban nincs olyan, hogy "bekapcsoljuk a cache"-t. A legtöbb cache funkciót nem is lehet állítani.

Folytassuk az előző példát:

Kell egy nézet a főoldalra, ami 10 node-ot tartalmaz, benne az általunk elkészített számozott címke mezővel. Szépen beállítottunk cache_setet az eredményünkre nodeonként, és tegyük fel, hogy nem sikerült belegyógyítani a node rendereléséhez használt cache-ba. Hogyan alakulnak a lekérdezéseink bejelentkezett felhasználóknál?

Ebben az esetben 10 többletlekérdezésbe (cache_get-tel kérdezzük le az egy nodehoz tartozó címkék számait) került a 10 node megjelenítése.

És most jön a vudu: Bekapcsoljuk a views gyorstárazását. (a views szerkesztésekor az "Egyéb" szekcióban található) Ez a cache_views_data táblába menti el a lekérdezés kész html eredményét, még az a 10 többletlekérdezésünk is eltűnik, és csak akkor lesz rá szükség, ha a views ezen gyorstárát kell újraépíteni. Tehát a miáltalunk beállított cache a nodeokhoz ezáltal semlegesítődik, az eredménye beleépült a views gyorstárazás eredményébe.

Sőt! Azzal, hogy a views idő alapú gyorstárazását bekapcsoltuk, semlegesítettünk egy rakás más lekérdezéssel járó függvényt, például node_load, user_node_load, comment_node_load.

Mi ebből a tanulság? Bejelentkezett felhasználók esetében a leggyorsabban a views, panels gyorstárazással javíthatunk a teljesítményen.

Ha pedig bekapcsoljuk a gyorstárazást anonim felhasználóknak, akkor a views gyorstár is semlegesítődni fog, mert ilyenkor a cache_page táblából kapja meg a felhasználó az egész oldal renderelt htmljét.

Remélem érthető, hogy miért nem beszélhetünk "cache"-ról a Drupalban.

De akkor miért van mégis egy csomó lekérdezés bekapcsolt anonymus gyorstárazásnál?

Nagyon nem akarok belemerülni a drupal bootstrap folyamatába, de azért néhány példát kiragadnék:

  1. Mindenek előtt be kell inculde-olni a modulok php file-jait.
  2. Fel kell építeni a változókat, amelyekből például azt állapitja meg a drupal, hogy ez most front_page-e vagy nem.
  3. Fel kell építenie egy menüelem-objektumot, amely olyanokat tartalmaz, mint például a felhasználó hozzáférhet-e az adott oldalhoz, vagy nem.
  4. A legtöbb esetben álnevekkel dolgozunk. Meg kell állítani, hogy az adott álnév milyen útvonalhoz kapcsolódik, milyen tartalom tartozik hozzá.
  5. Fel kell építenie egy $user objektumot. Mert bizony, az anonim felhasználó is felhasználó, van neki neve, vannak jogosultságai, a hozzá kapcsolódó adatokat sokszor használják modulok.

És ezek még csak a core dolgai! Egy gyors mérés szerint egy frissen telepített, majdnem szűz drupal kb 30 lekérdezést produkál anonim userek page cacge kiszolgálásakor. Egy komplexebb oldal esetében ez simán felszaladhat 100 fölé.

És igen, szolgáltatóként ezt marha nehéz lekezelni. Engem két olyan oldallal dobtak ki magyar szolgáltatók, amik az én külföldi, jóval olcsóbb és ugyanúgy shared hosting szolgáltatómnak (hehe, ez egy affiliate link. :)) meg se kottyant. Drupallal nagyon könnyű kinőni egy shared hostingot, és nagyon kevés esetben van arra keret, hogy tényleg igazán elejétől a végéig teljesítményoptimalizáljuk az oldalt. Ilyenkor mindenképpen kompromisszumos megoldás kell, erre Drupal vonalon talán a Boost modul a legmegfelelőbb, ha zömében anonim oldallekérések vannak.

Hozzászólások

Hello, I enjoy reading

Hello, I enjoy reading through your article post.

I wanted to write a little comment to support you.

There is certainly a lot to

There is certainly a lot to learn about this subject. I love all of the points you made.|

Hello there, You've done an

Hello there, You've done an incredible job. I'll definitely digg it and in my opinion recommend to my friends. I'm sure they will be benefited from this website.|

naturally like your web-site

naturally like your web-site but you need to check the spelling on quite a few of your posts. A number of them are rife with spelling issues and I in finding it very troublesome to inform the reality however I will definitely come again again.|

It's difficult to find

It's difficult to find knowledgeable people about this subject, but you seem like you know what you're talking about! Thanks|

It's in point of fact a nice

It's in point of fact a nice and helpful piece of information. I am glad that you just shared this useful information with us. Please keep us informed like this. Thank you for sharing.|

Your way of explaining the

Your way of explaining the whole thing in this post is really pleasant, every one be capable of without difficulty understand it, Thanks a lot.|

Hi! I've been reading your

Hi! I've been reading your website for a long time now and finally got the bravery to go ahead and give you a shout out from Atascocita Tx! Just wanted to tell you keep up the fantastic work!|

Hello, everything is going

Hello, everything is going nicely here and ofcourse every one is sharing facts, that's genuinely excellent, keep up writing.|

Good post. I learn something

Good post. I learn something totally new and challenging on websites I stumbleupon every day. It will always be exciting to read articles from other authors and practice a little something from other websites. |

It's going to be finish of

It's going to be finish of mine day, but before finish I am reading this impressive post to increase my knowledge.|

I don't know if it's just me

I don't know if it's just me or if everyone else encountering problems with your site. It looks like some of the written text on your content are running off the screen. Can someone else please comment and let me know if this is happening to them too? This might be a problem with my web browser because I've had this happen before. Thanks|

Hello! Do you use Twitter?

Hello! Do you use Twitter? I'd like to follow you if that would be ok. I'm absolutely enjoying your blog and look forward to new posts.|

At this time it seems like

At this time it seems like Expression Engine is the preferred blogging platform available right now. (from what I've read) Is that what you are using on your blog?|

It's awesome in favor of me

It's awesome in favor of me to have a website, which is beneficial in favor of my knowledge. thanks admin|

Fabulous, what a weblog it

Fabulous, what a weblog it is! This weblog gives helpful data to us, keep it up.|

I don't know if it's just me

I don't know if it's just me or if everybody else encountering issues with your site. It appears like some of the text in your content are running off the screen. Can someone else please comment and let me know if this is happening to them as well? This might be a problem with my internet browser because I've had this happen before. Thank you|

Wow that was unusual. I just

Wow that was unusual. I just wrote an really long comment but after I clicked submit my comment didn't show up. Grrrr... well I'm not writing all that over again. Anyway, just wanted to say wonderful blog!|

If you are going for finest

If you are going for finest contents like myself, simply pay a quick visit this web site all the time since it provides feature contents, thanks|

Very nice post. I just

Very nice post. I just stumbled upon your blog and wanted to say that I've truly enjoyed surfing around your blog posts. In any case I will be subscribing to your rss feed and I hope you write again soon!|

I am sure this post has

I am sure this post has touched all the internet viewers, its really really good post on building up new web site.|

Hi! I've been reading your

Hi! I've been reading your site for a while now and finally
got the courage to go ahead and give you a shout out from Porter Texas!
Just wanted to mention keep up the excellent work!

Hey I know this is off topic

Hey I know this is off topic but I was wondering if you knew of any widgets I could add to my blog that automatically tweet my newest twitter updates. I've been looking for a plug-in like this for quite some time and was hoping maybe you would have some experience with something like this. Please let me know if you run into anything. I truly enjoy reading your blog and I look forward to your new updates.|

Why visitors still use to

Why visitors still use to read news papers when in this technological world everything is available on net?|

I'm not sure where you are

I'm not sure where you are getting your info, but great topic. I needs to spend some time learning more or understanding more. Thanks for magnificent information I was looking for this info for my mission.|

Thanks for another

Thanks for another informative web site. The place else may just I
am getting that type of information written in such an ideal manner?
I have a undertaking that I am just now running on, and I have been at the look out for such info.

I am sure this post has

I am sure this post has touched all the internet users, its really really pleasant paragraph on building up new weblog.|

Normally I don't learn

Normally I don't learn article on blogs, however I wish to say that this write-up very pressured me to try and do so! Your writing style has been surprised me. Thank you, very great post.|

I have to thank you for the

I have to thank you for the efforts you've put in penning this site. I'm hoping to view the same high-grade content by you in the future as well. In fact, your creative writing abilities has inspired me to get my own, personal blog now ;)|

Great info. Lucky me I found

Great info. Lucky me I found your site by accident (stumbleupon).
I have bookmarked it for later!

Have you ever considered

Have you ever considered publishing an ebook or guest authoring on other sites? I have a blog based on the same ideas you discuss and would love to have you share some stories/information. I know my viewers would enjoy your work. If you're even remotely interested, feel free to shoot me an e mail.|

Somebody essentially lend a

Somebody essentially lend a hand to make seriously articles I'd state. This is the first time I frequented your website page and to this point? I amazed with the research you made to make this particular post incredible. Magnificent job!|

I will immediately grab your

I will immediately grab your rss as I can't in finding your email subscription hyperlink or e-newsletter service. Do you've any? Kindly allow me recognise so that I may just subscribe. Thanks.|

May I just say what a comfort

May I just say what a comfort to discover someone that genuinely knows what they're discussing on the web. You actually realize how to bring a problem to light and make it important. A lot more people ought to read this and understand this side of the story. I was surprised you aren't more popular since you surely have the gift.|

We are a bunch of volunteers

We are a bunch of volunteers and starting a new scheme in our community. Your web site offered us with valuable information to work on. You've performed a formidable process and our entire community will be grateful to you.|

Having read this I believed

Having read this I believed it was very enlightening.
I appreciate you taking the time and effort to put this information together.

I once again find myself spending a significant amount of time both reading and leaving comments.
But so what, it was still worth it!

Amazing things here. I am

Amazing things here. I am very glad to peer your post. Thanks so much and I am having a look ahead to contact you. Will you please drop me a e-mail?|

You should be a part of a

You should be a part of a contest for one of the most useful blogs on the net. I am going to highly recommend this site!|

I'll immediately snatch your

I'll immediately snatch your rss as I can't find your email subscription link or newsletter service. Do you have any? Please allow me recognise so that I may just subscribe. Thanks.|

Amazing! Its in fact

Amazing! Its in fact remarkable article, I have got much clear idea regarding from this article.|

I every time used to read

I every time used to read article in news papers but now as I am a user of net thus from now I am using net for articles or reviews, thanks to web.|

Excellent post. I definitely

Excellent post. I definitely appreciate this website. Stick with it!

Asking questions are actually

Asking questions are actually pleasant thing if you are not understanding something completely, except this piece of writing offers good understanding even.|

WOW just what I was looking

WOW just what I was looking for. Came here by searching for %keyword%|

This specific disease may

This specific disease may encompass runny tip and additionally a sore throat.

Hi there mates, how is the

Hi there mates, how is the whole thing, and what you would like to say concerning this piece of writing, in my view its genuinely awesome in favor of me.|

Many people snapshot some

Many people snapshot some sort of Sigmund Freudlike healthcare professional with a persistent resting for the sofa speaking of their very own thoughts if they picture therapy.

The other day, while I was at

The other day, while I was at work, my sister stole my apple ipad and tested to see if it can survive a 40 foot drop, just so she can be a youtube sensation. My iPad is now broken and she has 83 views. I know this is entirely off topic but I had to share it with someone!|

It is usually quickly without

It is usually quickly without getting intense.

Awesome issues here. I'm very

Awesome issues here. I'm very glad to peer your article. Thanks so much and I'm taking a look ahead to touch you. Will you kindly drop me a mail?|

Hozzászólás

A mező tartalma nem nyilvános.
  • Internal paths in double quotes, written as "internal:node/99", for example, are replaced with the appropriate absolute URL or relative path.
  • Engedélyezett HTML elemek: <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd> <del> <img>
  • A webcímek és email címek automatikusan linkekké alakulnak.
  • A sorokat és bekezdéseket a rendszer automatikusan felismeri.
  • Engedélyezett HTML elemek: <a> <blockquote> <br> <cite> <code> <dd> <del> <div> <dl> <dt> <em> <li> <ol> <p> <span> <strong> <ul>
  • You can enable syntax highlighting of source code with the following tags: <code>, <blockcode>, <bash>, <c>, <cpp>, <drupal5>, <drupal6>, <java>, <javascript>, <mysql>, <php>, <python>, <ruby>, <sql>. The supported tag styles are: <foo>, [foo].
  • Minden email cím át lesz alakítva ember által olvasható módon, vagy (ha a JavaScript engedélyezett) ki lesz cserélve kattintható, de biztonságos hivatkozásra.