Gőzerővel folyik az új blog.hu fejlesztése, frameworkot írunk és rakjuk le az alapokat ezerrel. Mivel nagy terhelésre készül a rendszer, intenzív cache használattal számolunk. Kézenfekvő dolog a memcached, más nem is nagyon van, gondoltunk még memóriában levő mysql táblára, de a memória méretkorlátja és más okok miatt egyelőre elvetettük.
A cacheléssel szükségszerűen együtt jár az invalidálás problémája, amikor valami változik a cachet azonnal el kell dobni. Erre tűnt nagyon jó megoldásnak amit itt találtunk:
http://dev.mysql.com/doc/refman/5.0/en/ha-memcached-interfaces-mysqludf.html
Ez nem más, mint mysql-ből hívható memcached manipuláló függvények gyűjteménye, ami azt jelenti hogy megfelelően beállított triggerek az adat változásakor automatikusan tudják pl invalidálni az adott elemet a cacheban.
Neki is ugrottunk feltenni, nem volt egyszerű de megküzdöttünk vele. A lépések:
1. innen: http://tangent.org/586/Memcached_Functions_for_MySQL.html forráskód letöltése
2. apt-get install libmysqlclient-dev (szükséges csomag, ebben lakik a mysql_config)
3. innen: http://tangent.org/552/libmemcached.html libmemcached forráskód letöltése (szükséges előfeltétel, csomagban nem elérhető)
4. libmemcached configure, make, make install - ez simán megy, paraméterek nélkül
5. memcached_functions directoryban:
./configure --with-mysql-config=/usr/bin/mysql_config
(a /usr/bin/mysql_config -ot megmondja a which mysql_config)
6. make, make install
7. /usr/local/lib -ből /usr/lib/mysql/plugin -ba másolni mindent ami most létrejött
8. /usr/lib# ln -s /usr/lib/mysql/plugin/libmemcached_functions_mysql.so libmemcached_functions_mysql.so
9. ldconfig
10. mysql restart
11. create function query-k, hogy létrejöjjenek a jó kis függvények. ezek ilyenek:
create function memc_servers_set RETURNS STRING SONAME "libmemcached_functions_mysql.so";
és már kész is van. Ez így összefoglalva nem tűnik bonyolultnak, de volt néhány pont amit elég nehezen sikerült kitalálni ugyanis nem sok infót találtunk róla. Ilyen volt pl hogy kell neki a mysql_config, de hogy azt honnan lehet szerezni arról fogalmunk sem volt.
Beüzemeltük, működik, már csak a triggerek legyártása van hátra. Itt felmerült még egy nehézség: a jelenlegi mysql verzióban egy táblán egy típusú (insert/update) trigger csak egy lehet. Tehát amelyik táblákon már van trigger, ott a meglévő triggerbe kell beleszerelni a memcached hívást, ez kicsit megnehezíti a triggerek automatikus legenerálását, de azért megoldjuk majd.