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

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

Appreciating the dedication

Appreciating the dedication you put into your blog and detailed information you provide.
It's great to come across a blog every once in a while that isn't the same unwanted rehashed information. Fantastic read!
I've bookmarked your site and I'm including your RSS feeds to my Google
account.

Superb site you have here but

Superb site you have here but I was curious about if you knew of any message boards that cover the same topics discussed here?
I'd really like to be a part of group where I can get
feed-back from other experienced people that share
the same interest. If you have any recommendations,
please let me know. Kudos!

hi!,I like your writing so so

hi!,I like your writing so so much! share we keep in touch more approximately your article on AOL?

I require a specialist on this space to solve my problem.
May be that's you! Taking a look forward to see you.

Hello! I could have sworn

Hello! I could have sworn I've been to this blog before but after checking
through some of the post I realized it's new to me. Anyways, I'm definitely glad I found it and I'll be book-marking and checking back frequently!

Asking questions are actually

Asking questions are actually pleasant thing if you are not understanding something totally, however
this post presents good understanding even.

Actually no matter if someone

Actually no matter if someone doesn't know then its up to other viewers
that they will assist, so here it takes place.

First off I would like to say

First off I would like to say awesome blog!
I had a quick question in which I'd like to ask if you don't mind.
I was curious to find out how you center yourself
and clear your thoughts before writing. I have had a
difficult time clearing my mind in getting my thoughts out.

I do enjoy writing but it just seems like the first 10 to 15
minutes tend to be lost just trying to figure out how to begin. Any ideas or hints?

Thank you!

The other day, while I was at

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

Hi there! This is my first

Hi there! This is my first visit to your blog! We are
a group of volunteers and starting a new initiative in a community in the same niche.
Your blog provided us useful information to work on.
You have done a wonderful job!

Hello! This is my first

Hello! This is my first comment here so I just wanted to give a quick shout out and tell you I
really enjoy reading your articles. Can you recommend any other blogs/websites/forums that cover the same topics?
Thanks a lot!

Hello! I simply want to offer

Hello! I simply want to offer you a huge thumbs up for the great information you've got right here
on this post. I'll be coming back to your blog for more soon.

My brother suggested I might

My brother suggested I might like this blog. He was entirely right.
This post actually made my day. You cann't imagine simply how much time I had spent for this information! Thanks!

Oh my goodness! Incredible

Oh my goodness! Incredible article dude! Thank
you so much, However I am having troubles with your RSS. I don't know the
reason why I can't join it. Is there anybody
else getting identical RSS issues? Anybody who knows the solution can you kindly respond?

Thanks!!

Hi, I desire to subscribe for

Hi, I desire to subscribe for this webpage to obtain latest updates, so
where can i do it please help out.

Thanks designed for sharing

Thanks designed for sharing such a fastidious thinking, paragraph is fastidious,
thats why i have read it entirely

Right now it sounds like

Right now it sounds like Movable Type is the best blogging
platform out there right now. (from what I've read) Is that what you're
using on your blog?

This excellent website really

This excellent website really has all of the info I needed about this subject and didn't know who to ask.

I love what you guys are up

I love what you guys are up too. This sort
of clever work and exposure! Keep up the superb works guys I've incorporated
you guys to blogroll.

Thank you for every other

Thank you for every other magnificent post.
The place else may anybody get that kind of info in such an ideal method of writing?
I've a presentation next week, and I am at
the look for such information.

I think this is among the

I think this is among the most important information for me.
And i'm glad reading your article. But should remark on some general things, The web site style is perfect,
the articles is really excellent : D. Good job,
cheers

Attractive section of

Attractive section of content. I just stumbled upon your weblog and in accession capital to assert that I get in fact enjoyed account your blog posts. Any way I'll be subscribing to your augment and even I achievement you access consistently rapidly.|

Simply want to say your

Simply want to say your article is as surprising.
The clarity in your post is simply excellent and i
could assume you are an expert on this subject. Well with
your permission let me to grab your RSS feed to keep updated with forthcoming post.

Thanks a million and please keep up the enjoyable work.

Howdy just wanted to give you

Howdy just wanted to give you a brief heads up
and let you know a few of the pictures aren't loading properly.
I'm not sure why but I think its a linking issue. I've tried it in two
different browsers and both show the same results.

It is perfect time to make

It is perfect time to make some plans for the future and it is time to be happy.
I've read this post and if I could I wish to suggest you some interesting things or suggestions.

Maybe you can write next articles referring to this article.
I desire to read more things about it!

Hello there! I could have

Hello there! I could have sworn I've been to this site before but
after checking through some of the post I realized it's new to me.

Anyhow, I'm definitely happy I found it and I'll be book-marking and checking back often!
Jim's San Jose Carpet Cleaning
780 S 3rd St, San Jose, CA 95112
3408-351-1063
colettemackie2641 [at] gmail [dot] com

Hi there everyone, it's my

Hi there everyone, it's my first go to see at this website, and post is in fact fruitful for me,
keep up posting these posts.

My partner and I stumbled

My partner and I stumbled over here by a different web address and thought I might as well
check things out. I like what I see so now i am following
you. Look forward to looking into your web page repeatedly.

This post is genuinely a good

This post is genuinely a good one it helps new web viewers, who are
wishing for blogging.

Excellent post. I was

Excellent post. I was checking constantly this blog and I'm
impressed! Very helpful info specifically the last part :
) I care for such info much. I was seeking this particular info for a
long time. Thank you and best of luck.

If some one desires to be

If some one desires to be updated with newest technologies after that he
must be pay a quick visit this site and be up to date every day.

We are a group of volunteers

We are a group of volunteers and starting a new scheme in our community.
Your website offered us with helpful information to work on. You've performed a formidable job
and our entire community can be grateful to you.

I always spent my half an

I always spent my half an hour to read this website's content every day along with a cup of coffee.|

Do you have a spam issue on

Do you have a spam issue on this website; I also am a blogger, and I was wondering your situation; we have
developed some nice methods and we are looking to exchange
methods with other folks, please shoot me an email
if interested.

It's remarkable to visit this

It's remarkable to visit this web site and reading the views of all colleagues about this post, while I am also eager of getting know-how.|

It's amazing in favor of me

It's amazing in favor of me to have a website, which is beneficial in support of my know-how.

thanks admin

This design is spectacular!

This design is spectacular! You obviously know
how to keep a reader entertained. Between your wit and your videos, I was almost
moved to start my own blog (well, almost...HaHa!)
Excellent job. I really enjoyed what you had to
say, and more than that, how you presented it. Too cool!

Simply want to say your

Simply want to say your article is as astounding. The clarity in your post is just spectacular and i could assume you are an expert on this subject. Well with your permission allow me to grab your feed to keep up to date with forthcoming post. Thanks a million and please carry on the enjoyable work.|

This design is spectacular!

This design is spectacular! You definitely know how
to keep a reader amused. Between your wit and your videos,
I was almost moved to start my own blog (well, almost...HaHa!) Wonderful job.
I really loved what you had to say, and more than that, how you presented it.

Too cool!

This piece of writing

This piece of writing provides clear idea in support of the new users of
blogging, that actually how to do blogging and site-building.

What's up to all, how is the

What's up to all, how is the whole thing, I think every one is getting
more from this site, and your views are fastidious in support of new
viewers.

Everything is very open with

Everything is very open with a very clear description of the
issues. It was truly informative. Your website is very helpful.
Thanks for sharing!
Jay's Santa Clarita Tree Removal Kings
26174 Las Lanas Ct, Santa Clarita, CA 91355
661-464-1270
laureljefferson09875 [at] gmail [dot] com

Hey there! This is my 1st

Hey there! This is my 1st comment here so I just wanted to give a quick shout out and tell you I truly enjoy reading
your posts. Can you recommend any other blogs/websites/forums that go over the same topics?
Thanks!

magnificent points

magnificent points altogether, you just won a
logo new reader. What might you recommend about your put up that
you simply made some days ago? Any certain?

Hi there, just wanted to say,

Hi there, just wanted to say, I enjoyed this blog post.
It was inspiring. Keep on posting!

Why visitors still make use

Why visitors still make use of to read news papers when in this
technological globe the whole thing is accessible on net?

I got this web site from my

I got this web site from my pal who shared with me concerning this web page and at the moment this
time I am browsing this web site and reading very informative content
here.

Wow that was strange. I just

Wow that was strange. I just wrote an extremely long comment but after I clicked submit my comment didn't appear.
Grrrr... well I'm not writing all that over again. Anyhow, just wanted
to say excellent blog!

Your style is unique in

Your style is unique in comparison to other people I've read stuff from.
I appreciate you for posting when you've got the opportunity, Guess I will just bookmark this blog.

What a data of un-ambiguity

What a data of un-ambiguity and preserveness of valuable experience regarding unexpected feelings.|

Post writing is also a

Post writing is also a excitement, if you be acquainted with
afterward you can write or else it is complicated to write.

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.