1 Keer is genoeg

OBA groeit, en de website kostte Ina handen vol werk. 1 Van de steeds weerkerende rotklusjes was het bewaken van reeksen posts door dezelfde persoon. Tot vandaag kon je door in een keer van alles te publiceren nog de voorpagina domineren. En eerdere poging om daar d.m.v. een eenvoudige technische ingreep een eind aan te maken was mislukt doordat WordPress tijdens het ontwikkelen van een plugin een update van zijn database deed.

WordPress werkt met een parameteriseerbare query die de posts ophaalt uit de database en toont aan de gebruikers. Middels een plugin kun je zelf extra voorwaarden achter die query plakken, zodat de resultaten veranderen. De hele query vervangen kan ook, maar dat is veel meer werk, met een grote kans op fouten. Ik probeerde het met een gecorreleerde subquery, maar dat leverde een dramatisch slechte performance op, zelfs als ik een extra index op de posts tabel maakte. De index werd door de optimizer gewoon genegeerd, en als ik hem forceerde, bleek de snelheid onaanvaardbaar.
Toen besloot ik een view te maken en in een subquery aan deze view te refereren :

CREATE VIEW ” . $table_name . ” AS (SELECT max(ID) from $wpdb->posts where post_status = ‘publish’ and post_type = ‘post’ group by post_author)”;

Ik wilde eigenlijk een view met 2 kolommen maken, maar om ondoorgrondelijke redenen kon je de kolom max(ID) geen andere naam geven en max(ID) refereert aan de niet bestaande kolom “ID”, dus dat werkte niet. Dan maar 1 kolom, en een select *. En nu de query :

mysql> select post_author, ID, post_title from wp_posts where ID in (select * from wp_maxidperuser);
+-------------+-------+--------------------------------------------------------------+
| post_author | ID    | post_title                                                   |
+-------------+-------+--------------------------------------------------------------+
|           2 | 38175 | muziektest                                                   |
|           1 | 40725 | SONNY BOY **********!!!                                      |
|         580 | 34670 | exvkblog                                                     |
|         577 | 34671 | Hoe lang nog                                                 |
|         581 | 34675 | Hoe komt het dat de eerste inzending nauwelijks bekeken is ? |
|         585 | 34695 | Al wat is.                                                   |
|         578 | 34699 | Welkom op deze planeet                                       |
|         586 | 35334 | PS06 - De politiek in                                        |
|         607 | 36591 | Niets van tederheid                                          |
|        3841 | 37616 | Bijdrage voor Volkskrantcolumn wedstrijd.                    |
+-------------+-------+--------------------------------------------------------------+
10 rows in set (0.00 sec)

Zo, dat is wat sneller dan een halve dag.
Een view wordt bijgewerkt op het moment dat je de tabel(len) waarop hij gebaseerd is bijwerkt. Als de optimiser van MySQL intelligent is, ziet hij dat hij niets hoeft te sorteren, omdat ID steeds groter is dan de vorige max.
Bij het installeren van de plugin die ik gemaakt heb wordt de view automatisch aangemaakt en bij deactiveren weer verwijderd. Het werkt razendsnel, en het ontgaat me dan ook waarom de MySQL optimiser zelf niet kon uitrekenen dat dit de snelste methode was.

Read Offline:
This entry was posted in Wordpress and tagged , , , . Bookmark the permalink.

4 Responses to 1 Keer is genoeg

  1. Jokezelf says:

    Ik vind het geweldig wat jullie allemaal voor elkaar boksen, maar ik snap er geen jota van. Ben jullie overigens erg dankbaar dat mijn posts doorgestuurd worden naar de goegemeente en dat ik de posts van anderen in mijn mail ontvang (al is het soms wat veel). Keep up the good work!

  2. beheerder says:

    More good work is on the way….
    Er komt deze week nog een verbetering bij.
    Je kan bij OBA instellen hoeveel en vaak je mail wil ontvangen.
    Je kan ook zoals ik alle mail afkomstig van OBA in een aparte map laten plaatsen door je mailprogramma, en die 1 keer per week leeg gooien.

  3. Appelvrouw says:

    Knutselsmurf, komen jij en Ina nog wel eens toe aan iets anders?
    Ik vind het bewonderenswaardig dat jullie niet afhaken met al die drukte.

    Mails kun je ook ontvangen?
    Ik heb er nog nooit een gezien (behalve op het vk blog een enkele maar) Ik zie ook niet de optie om een berichtje te sturen, of bij iemand achter te laten.
    Of bedoel je niet persoonlijke mails?

  4. beheerder says:

    Nee. Door een paar dingen te automatiseren, wordt Ina ontheven van routinewerk. Wat ik doe is eigenlijk gewoon oefenen voor een betaalde baan. Dit is wat een reïntegratiebedrijf zou moeten doen, maar in de praktijk helemaal niet blijkt te kunnen.

    Je kan bij OBA instellen dat je een mailtje wil krijgen als iemand een nieuw bericht geplaatst heeft. ( let op, dat is veel mail ) Sommige mensen stellen dat in en worden dan boos, omdat ze vinden dat het spam is.

Leave a Reply

Your email address will not be published.